meta data for this page
- de-informal
Dies ist eine alte Version des Dokuments!
Microcontrollerprogrammierung mit Tinkercad
Bevor du beginnst mit den echten Microcontrollern zu arbeiten, solltest du ein wenig Erfahrung mit Hilfe der Simulation Tinkercad sammeln. Hierbei handelt es sich um eine Online-Plattform, welche es dir ermöglicht, microcontrollergesteuerte Schaltungen virtuell aufzubauen, zu programmieren und zu testen.
Empfohlene Lernstrategie
Der Einstieg in Tinkercad
Das Dokument Tinkercad-Tipps.pdf gibt dir Hilfestellung bei deinem ersten Kontakt mit Tinkercad. Lies es dir durch, erstelle einen eigenen Account und versuche deinen ersten Schaltkreis zu erstellen.
Tinkercad-Erfahrungen sammeln
Nachdem du dich mit der Bedienung von Tinkercad vertraut gemacht hast, kannst du dich an einige Aufgaben wagen, die dir dabei helfen sollen, ein wenig Erfahrung für die Microcontrollerprogrammierung zu sammeln.
Das Dokument Quickstart Tinkercad und Arduino v1.1 - Schülerversion.pdf enthält insgesamt 11 zum Teil aufeinander aufbauende Aufgaben:
- Elektrische Grundlagen
- Spannungsteilung durch Widerstände
- Der Arduino-Mikrocontroller
- Serieller Monitor
- Ampelsteuerung
- Einlesen von Messwerten: Potentiometer
- Einlesen von Messwerten: Photowiderstand
- Einlesen von Messwerten: Temperatursensor
- Entfernungsmessung mittels Ultraschall
- Steuerung eines Nicht-binären Aktors
- Visuelle Ausgabe: LCD-Display
- Farbdarstellung mit Hilfe einer Bibliothek: NeoPixel RGB LEDs
Im Anhang des Dokuments sind zu einigen Aufgaben Codebeispiele enthalten. Diese findest du auch weiter unten auf dieser Seite. Versuche nach und nach alle Aufgaben zu lösen.
Hinweise und Hilfsmittel
Die Programmierung des Arduino-Microcontrollers und der ESP-Microcontroller erfolgt in der Sprache C++, auch wenn die Dateiendung .ino
lautet. Für viele Aufgaben gibt es spezifische Funktionen, welche in der Arduino-Referenz dokumentiert sind.
- Die Arduino-Referenz sollte zum Nachschlagen stets griffbereit sein.
- Die Programmierkenntnisse, die du in deiner bisherigen Ausbildungszeit erwerben konntest, sollten eigentlich ausreichend sein, um einfachen C++-Code unter Verwendung von Vorlagen erstellen oder vorhandenen Code nach deinen Bedürfnissen anpassen zu können. Falls du dennoch solidere Grundlagen haben möchtest, kannst du dieses interaktive C++-Tutorial versuchen.
Codebeispiele für die Tinkercad-Quickstart-Aufgaben
Codebeispiel zu 3.
- codebepspiel_3.cpp
#define LED_EXTERN 2 void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(LED_EXTERN, OUTPUT); digitalWrite(LED_EXTERN, LOW); } void loop() { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(LED_EXTERN, HIGH); delay(1000); // Wait for 1000 millisecond(s) digitalWrite(LED_BUILTIN, LOW); digitalWrite(LED_EXTERN, LOW); delay(1000); // Wait for 1000 millisecond(s) }
Codebeispiel zu 4.
- codebeispiel_4.cpp
void setup() { pinMode(LED_BUILTIN, OUTPUT); // Serielle Ausgabe mit 115200 Baud starten Serial.begin(115200); } void loop() { digitalWrite(LED_BUILTIN, HIGH); Serial.println("LED ist an"); delay(1000); // Wait for 1000 millisecond(s) digitalWrite(LED_BUILTIN, LOW); Serial.println("LED ist aus"); delay(1000); // Wait for 1000 millisecond(s) }
Codebeispiel zu 6.
- codebeispiel_6.cpp
#define POTIPIN A0 void setup() { Serial.begin(115200); } void loop() { Serial.println(analogRead(POTIPIN)); delay(100); }
Codebeispiel zu 9.
- codebeispiel_9.cpp
#define PIN_TRIGGER 13 #define PIN_ECHO 12 #define SENSOR_MAX_RANGE 300 unsigned long time_of_flight; unsigned int distance; void setup() { Serial.begin(115200); pinMode(PIN_TRIGGER, OUTPUT); pinMode(PIN_ECHO, INPUT); } void loop() { // 345m/s, Hin- und Rückweg, Messung in Mikrosekunden, 0,0345 cm/us float factor = 0.0345 / 2; unsigned int timeout = (SENSOR_MAX_RANGE / factor) * 1.1; digitalWrite(PIN_TRIGGER, LOW); delayMicroseconds(3); digitalWrite(PIN_TRIGGER, HIGH); delayMicroseconds(10); digitalWrite(PIN_TRIGGER, LOW); time_of_flight = pulseIn(PIN_ECHO, HIGH, timeout); distance = time_of_flight * factor; // Ausgeben der Entfernung, sofern diese in einem sinnvollen Bereich // (positiv und unter der Messgrenze des Sensors) liegt, oder eine // Fehlermeldung ausgeben delay(1000); }
Codebeispiel zu 10.
- codebeispiel_10.cpp
#define SERVO 3 #define SERVO_UP 1 #define SERVO_DOWN 2 static int servoPos = 0; static int servoDir = SERVO_UP; void setup() { pinMode(SERVO, OUTPUT); Serial.begin(115200); // Probelauf analogWrite(SERVO, 0); delay(500); analogWrite(SERVO, 127); delay(500); analogWrite(SERVO, 255); Serial.println("Setup abgeschlossen."); } void loop() { // drehen und ausgeben }
Codebeispiel zu 11.
- codebeispiel_11.cpp
#include <LiquidCrystal.h> // Erstellen eines LCD unter Angabe der verwendeten Pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); pinMode(A0, INPUT); } void loop() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("BS Lichtenfels"); lcd.setCursor(0, 1); lcd.print("Messwert: "); delay(100); }
Codebeispiel zu 12.
- codebeispiel_12.cpp
#include <Adafruit_NeoPixel.h> #define NEO_PIXEL 2 // Pin für NeoPixel-Daten #define NPIXELS 2 // Anzahl der NeoPixel Adafruit_NeoPixel px = Adafruit_NeoPixel(NPIXELS, NEO_PIXEL, NEO_GRB + NEO_KHZ800); void setup() { px.begin(); px.clear(); px.setBrightness(255); px.show(); Serial.begin(9600); Serial.println("Setup"); } void loop() { Serial.println("One"); px.setPixelColor(0, px.Color(255, 0, 0)); px.setPixelColor(1, px.Color(255, 255, 0)); px.show(); delay(2000); Serial.println("Two"); px.setPixelColor(0, px.Color(0, 255, 0)); px.setPixelColor(1, px.Color(0, 255, 255)); px.show(); delay(2000); Serial.println("Three"); px.setPixelColor(0, px.Color(0, 0, 255)); px.setPixelColor(1, px.Color(255, 0, 255)); px.show(); delay(2000); }
Ergänzendes und alternatives Material
- YouTube: 6-teilige Videoreihe Learn Arduino with Tinkercad Circuits
- PDF-Dokument zu Microcontrollern im Allgemeinen ohne speziellen Bezug zu Arduino oder ESP8266
- Anfängerübungen zu Tinkercad für alle, denen der Quickstart als Einstieg zu anspruchsvoll ist