Hier erfährst du, wie du einfache Arduino-Schaltungen aufbaust und einen vorgegebenen Code anpasst.
Hier erfährst du, wie du einfache Arduino-Schaltungen aufbaust und einen vorgegebenen Code anpasst.
Vorbereitung
Baue die Schaltung gemäss dem Bild unten auf.
Lade den Code auf das Arduino und teste diesen.
// Einfaches Blink-Programm – LED an Pin 12
void setup() {
pinMode(12, OUTPUT); // Pin 12 als Ausgang
}
void loop() {
digitalWrite(12, HIGH); // LED ein
delay(500); // 0.5 s warten
digitalWrite(12, LOW); // LED aus
delay(500); // 0.5 s warten
}
Aufgabe
Baue die Schaltung zu einem Wechselblinker um. Ergänze dazu eine zweite LED an Pin A0 und GND (Ground = 0 V).
Passe den Code an, damit ein Wechselblinker entsteht. Du musst dazu die drei Zeilen unten an der jeweils richtigen Stelle in den Code einfügen.
pinMode(A0, OUTPUT); // Pin A0 als Ausgang
digitalWrite(A0, HIGH); // LED ein
digitalWrite(A0, LOW); // LED aus
Hinweis: Für kurze Experimente können LEDs ohne Vorwiderstand an ein Arduino angeschlossen werden. Für einen längeren Betrieb ist ein Widerstand (z. B. 150 Ω) vor jeder LED Pflicht.
Vorbereitung
Baue die Schaltung gemäss dem Bild unten auf.
Lade den Code auf das Arduino und teste diesen.
Wahrscheinlich bekommst du die Fehlermeldung Compilation error: Servo.h: No such file or directory
Um den Fehler zu beheben, musst du die Bibliothek Servo.h installieren. Klicke dazu auf das Büchersymbol links, tippe Servo und klicke auf Installieren.
// Bewegt den Servo langsam vor und zurück.
#include <Servo.h> // Lädt die Servo-Bibliothek, damit wir Servos steuern können
Servo servo9; // Erstellt einen Servo. "servo9" ist nur ein selbst gewählter Name.
// Wir hätten ihn auch "meinServo" nennen können. Der Name 9 erinnert
// bloss daran, dass dieser Servo an Pin 9 angeschlossen wird.
int pos = 0; // Variable für die Position (Winkel) des Servos, Startwert 0
void setup() { // Wird einmal beim Start ausgeführt
servo9.attach(9, 500, 2500); // Verbindet den Servo mit Pin 9
// 500 und 2500: kürzeste/längste Steuerimpulslänge (Mikrosekunden)
}
void loop() { // Wird immer wieder wiederholt
// vorwärts: Winkel zählt Schritt für Schritt von 0 bis 180 hoch
for (pos = 0; pos <= 180; pos += 1) {
servo9.write(pos); // Fährt den Servo auf den aktuellen Winkel
delay(15); // Wartet 15 Millisekunden, damit die Bewegung langsam wirkt
}
// rückwärts: Winkel zählt Schritt für Schritt von 180 zurück auf 0
for (pos = 180; pos >= 0; pos -= 1) {
servo9.write(pos); // Fährt den Servo auf den aktuellen Winkel
delay(15); // Wartet 15 Millisekunden
}
}
Aufgabe
Verändere das Verhalten des Servos, indem du die Werte Position und delay änderst. Der Servo kann sich maximal um 180 Grad drehen.
Vorbereitung
Baue die Schaltung gemäss dem Bild unten auf. Wenn du ein Lautsprechermodul (Lautsprecher mit eingebautem Verstärker) statt eines Piezo-Lautsprechers verwendest, schliesst du dieses an GND und 5V an, den Signalpin verbindest du mit Pin 8.
Lade den Code auf das Arduino und teste diesen.
// Melodie auf Pin 8
// Notenfrequenzen (Hz)
#define G3 196 // G3 steht ab jetzt für 196 Hz (tiefe Frequenz = tiefer Ton)
#define A3 220 // A3 steht für 220 Hz, etwas höher
#define B3 247 // B3 steht für 247 Hz
#define C4 262 // C4 steht für 262 Hz, höher = höherer Ton
// Melodie (0 = Pause) und Noten / Dauer (4=Viertel, 8=Achtel)
const int melody[] = { C4, G3, G3, A3, G3, 0, B3, C4 }; // Liste der Töne, 0 = Pause
const int dur[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; // Dauer pro Ton (4=Viertel, 8=halb so lang)
void setup() {
}
void loop() {
const int n = sizeof(melody) / sizeof(melody[0]); // zählt die Anzahl Töne (hier 8)
for (int i = 0; i < n; i++) { // geht alle Töne durch, i = Nummer des Tons
int ms = 1000 / dur[i]; // Tondauer in ms: 1000/4=250, 1000/8=125
// wenn keine Pause (Wert > 0): Ton melody[i] auf Pin 8 für ms Millisekunden spielen
if (melody[i] > 0) tone(8, melody[i], ms);
delay(ms * 1.30); // etwas länger warten (130 %) gibt Lücke zwischen Noten
noTone(8); // Ton sicher abschalten, auch bei Pause
}
}
Aufgabe
Verändere die Melodie, indem du neue Töne definierst (define) oder deren Reihenfolge (melody) oder Länge (dur) änderst.
Gib den Code einer KI und bitte um eine Anpassung in eine andere Melodie.
Vorbereitung
Baue die Schaltung gemäss dem Bild unten auf.
Lade den Code auf das Arduino und teste diesen.
Auch hier wirst du wieder eine Bibliothek/Library installieren müssen (siehe Aufgabe Servo)
#include <Adafruit_NeoPixel.h> // Bibliothek für Neopixel laden
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(7, 2); // 7 Neopixel werden über Pin 2 angesteuert
void setup() {
pixels.begin(); // Neopixel startklar machen
}
void loop() {
// setPixelColor(Nummer, Farbe): legt für ein Pixel die Farbe fest (noch unsichtbar)
// Color(Rot, Grün, Blau): Mischwerte 0 bis 255, 0 = aus, 255 = volle Helligkeit
pixels.setPixelColor(0, pixels.Color(50, 0, 0)); // Pixel 0: rot
pixels.setPixelColor(1, pixels.Color(0, 50, 0)); // Pixel 1: grün
pixels.setPixelColor(2, pixels.Color(0, 0, 255)); // Pixel 2: blau (volle Helligkeit)
pixels.setPixelColor(3, pixels.Color(50, 50, 0)); // Pixel 3: rot + grün = gelb
pixels.setPixelColor(4, pixels.Color(0, 50, 50)); // Pixel 4: grün + blau = türkis
pixels.setPixelColor(5, pixels.Color(50, 0, 50)); // Pixel 5: rot + blau = violett
pixels.setPixelColor(6, pixels.Color(50, 50, 50)); // Pixel 6: alle gleich = weiss
pixels.show(); // schickt die Farbwerte an die Neopixel
// delay (500); // ausgeschaltet: würde 500 ms warten
// pixels.setPixelColor(0, pixels.Color(0, 50, 0)); // ausgeschaltet: Pixel 0 grün
// pixels.setPixelColor(1, pixels.Color(50, 0, 0)); // ausgeschaltet: Pixel 1 rot
// pixels.show(); // ausgeschaltet: Farben anzeigen
// delay (500); // ausgeschaltet: 500 ms warten
}
Aufgabe
Passe die Farben an.
Entferne die // vor den letzten 5 Zeilen. Zwei Neopixel sollten nun blinken. Bringe auch die weiteren Neopixel zum Blinken.
Hinweis: In jedem Neopixel sind je eine rote, eine grüne und eine blaue LED verbaut. Die Zahlen in den Klammern nach pixels.Color geben an, wie stark die jeweilige LED leuchten soll. 0 bedeutet ausgeschaltet, 255 bedeutet maximale Helligkeit je Farbe. Der erste Wert steuert die rote LED, der zweite die grüne, der dritte die blaue.
Vorbereitung
Baue die Schaltung gemäss dem Bild unten auf.
Lade den Code auf das Arduino
// LDR an A0 und GND, LED an Pin 11
// Einfaches Ein-/Ausschalten je nach Helligkeit
// LDR = Fotowiderstand, sein Widerstand ändert sich je nach Lichtmenge
void setup() {
pinMode(11, OUTPUT); // Pin 11 als Ausgang: steuert die LED
pinMode(A0, INPUT_PULLUP); // Pin A0 als Eingang mit internem Pull-up (liest den LDR)
Serial.begin(9600); // Serielle Ausgabe zur Kontrolle (Werte am Computer anzeigen)
}
void loop() {
int ldrWert = analogRead(A0); // LDR-Wert einlesen (Zahl von 0 bis 1023, je nach Helligkeit)
Serial.println(ldrWert); // Wert im seriellen Monitor anzeigen
if (ldrWert > 250) { // ist es dunkel genug? Schwellenwert anpassen
digitalWrite(11, HIGH); // ja: LED einschalten (bei Dunkelheit)
} else {
digitalWrite(11, LOW); // nein: LED ausschalten (bei Helligkeit)
}
delay(200); // kurze Pause, damit nicht zu schnell gemessen wird
}
Aufgabe
Öffne den Seriellen Plotter (unter Werkzeuge) und beobachte, wie sich der Messwert verändert, wenn du deine Hand über den Lichtsensor haltest.
Verändere den Schwellenwert (250) so, dass die LED leuchtet, wenn der Lichtsensor im Schatten deiner Hand ist.
Vorbereitung
Verbinde folgende Komponenten:
LED auf GND und Pin 12
Touch-Sensor auf GND, VCC und Pin 11
Lade den Code auf das Arduino und teste diesen.
int led = LOW; // merkt sich: LED-Zustand (LOW/HIGH)
int prev = LOW; // vorheriger Sensorwert
void setup() {
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
pinMode(11, INPUT); // bei Open-Collector: INPUT_PULLUP
}
void loop() {
int cur = digitalRead(11); // aktuellen Sensorwert lesen
if (cur == HIGH && prev == LOW) { // Übergang von LOW -> HIGH
led = (led == LOW) ? HIGH : LOW; // umschalten
digitalWrite(12, led);
}
prev = cur; // für den nächsten Vergleich merken
}
Aufgabe
Baue nun einen Servo oder einen Lautsprecher in die Schaltung ein. Gib den Code oben sowie den Code des eingebauten Elementes einer KI und lasse dir diese zu einem neuen Code kombinieren. Falls du den Code selbst zusammenführen möchtest, siehe hier unter Aufbau eines Arduino-Programms.
Vorbereitung
Baue die Schaltung mit dem FET auf.
Lade den Blink-Code aus den Beispielen
Verbinde das Gate des FET mit Pin 13 des Arduinos, die Source mit dem GND der Arduinos.
Teste die Schaltung
Aufgabe
Ändere Pin 13 zu Pin A0 im Code und in deinem Aufbau. Teste die Schaltung.
Gib den Code einer KI mit der Anweisung, das Blinken in ein Ein- und Ausdimmen zu verwandeln.
Vorbereitung
Verbinde ein OLED-Display folgendermassen:
GND auf GND
VCC auf 5V
SCL auf SCL
SDA auf SDA
Lade den Code auf das Arduino und teste diesen.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <string.h>
Adafruit_SSD1306 display(128, 32, &Wire, -1);
// Zwei Frames (4 Zeilen). Backslashes doppelt escapen.
const char* CAT0[4] = {
" /\\_/\\ ",
" ( o.o ) ",
" > ^ < ",
" / \\ "
};
const char* CAT1[4] = {
" /\\_/\\ ",
" ( o.o ) ",
" > ^ <~ ",
" / \\ "
};
void setup() {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { for(;;); }
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
static int x = -90; // Start links ausserhalb
static unsigned long t = 0;
static bool frameFlip = false;
// alle ~180 ms Frame wechseln
if (millis() - t > 180) { frameFlip = !frameFlip; t = millis(); }
// maximale Textbreite in Zeichen (einmal berechnen)
static int maxChars = -1;
if (maxChars < 0) {
maxChars = 0;
for (int i=0; i<4; i++) {
int l0 = strlen(CAT0[i]);
int l1 = strlen(CAT1[i]);
if (l0 > maxChars) maxChars = l0;
if (l1 > maxChars) maxChars = l1;
}
}
int pixelWidth = maxChars * 6; // Standardfont: 6 px pro Zeichen
display.clearDisplay();
for (int row = 0; row < 4; row++) {
display.setCursor(x, row * 8); // 8 px Zeilenhöhe
display.println(frameFlip ? CAT1[row] : CAT0[row]);
}
display.display();
x += 4; // Schrittweite
if (x > 128) x = -pixelWidth; // neu von links einlaufen lassen
}
Aufgabe
Versuche, die Grafik anzupassen. Von Hand oder mit KI.
Du kannst nun versuchen, weitere Sensoren und Aktoren einzeln oder in Kombination in Betrieb zu nehmen. Wenn du die Beispielcodes selbstständig (und nicht mit KI) zusammenführen willst, musst du den Abschnitt Programmcodes zusammenführen unter Aufbau eines Arduino-Programms beachten.
Weitere Lehrgänge finden sich hier:
https://www.arduino.cc/en/Tutorial/BuiltInExamples
Erklärungen zu den Einsteigerprojekten, die in der Arduino IDE bereits enthalten sind. (EN)
https://funduino.de/ ; https://starthardware.org/ ; https://www.makinginderschule.ch/arduino.html
https://starthardware.org/category/kurs/ ;
Anleitungen, Lehrgänge, teilweise auch zu den Einsteigerprojekten. (DE)