Seite anzeigenÄltere VersionenLinks hierherCopy this pageFold/unfold allNach oben Diese Seite ist nicht editierbar. Du kannst den Quelltext sehen, jedoch nicht verändern. Kontaktiere den Administrator, wenn du glaubst, dass hier ein Fehler vorliegt. ====== Arduino-Projekte ====== ===== - Arduino-Box mit LCD – "Hello World" ===== <color #7092be>**Lernziele:** Arduino-Entwicklungsumgeung (IDE) kennenlernen; Programmiersprache C\+\+ kennenlernen; estes Arduino-Programm schreiben; Display ansteuern.</color> Zuerst baust du eine Adruino-Box. Das ist eine verschliessbaer **Plastik-Box**, die neben dem **Arduino UNO** folgende Komponenten enthält: * Halterung für Arduino * Breadboard * Display- und Batteriehlaterung (Batterie mit Kabel optional) * LCD (Display) und Display-Kabel * USB-A-Kabel für die Verbindung zwischen Arduino und PC Die Idee der Box: Du kannst auf dem Breadboard elektronische Bauteile aufbringen und mit dem Arduino verbinden. Diesen Aufbau kannst du jederzeit mitnehmen: USB-Kabel rein, Box verschliessen und in den Rucksack! - Baue die Box zusammen. **Überlege zuerst gut**, wie du die Teile auf dem Deckel der Box platzierst, sodass es praktisch zum Arbeiten ist (Verbindung zum Laptop, Display-Verbindung etc.). Klebe dann die Teile mit doppelseitigem Klebenband oder Heissleim fest. - Informiere dich über die Arduino-Programmierung in der Programmiersprache C\+\+ hier: [[informatik:arduino_programmieren|Arduino programmieren]] - Verbinde das Display und teste es: Dein Display soll "Hello World" zeigen. ===== - Blinkende und mehrfarbige LEDs ===== <color #7092be>**Lernziele:** LEDs, Tasten und Potentiometer mit **digitalen und analogen Ein- und Ausgängen** verbinden und ansteuern.</color> ==== - Blinkende LED ==== * Verbinde eine LED und einen Vorwiderstand mit einem digitalen Ein/Ausgang, sodass die LED leuchtet, wenn der Ausgang HIGH (5 V) ist. * Programmiere den Arduino so, dass die LED mit 2 Hz blinkt. //Tipp:// Du benötigst die Funktionen ''pinMode()'', ''digitalWrite()'' und ''delay()''. ==== - Blinkende LED mit stufenlos verstellbarer Frequenz ==== * Verbinde ein 10-kΩ-Potentiometer mit einem analogen Eingang, sodass ein Signal von 0 bis 5 Volt am Eingang anliegt. * Programmiere den Arduino so, dass die Frequenz der blinkenden LED mit dem Potentiomter eingestellt werden kann. //Tipp:// Du benötigst u. a. die Funktion ''analogRead()''. Informiere dich erst über diese Funktion: [[https://reference.arduino.cc/reference/en/|Arduino-Referenz]] ==== - Blinkende LED mit stufenweise verstellbarer Frequenz ==== * Verbinde zwei Tasten mit zwei digitalen Ein/Ausgängen, sodass der Eingang auf LOW (0V) ist, wenn die ensprechende Taste gedrückt ist. * Programmiere den Arduino so, dass die Frequenz der blinkenden LED schrittweise zu- oder abnimmt, wenn die eine oder die andere Taste gedrückt wurde. * Minmale Frequenz: 0.495 Hz (Periodendauer 2020 ms) * Maximale Frequenz: 50 Hz (Periodendauer 20 ms) * Schritt: 200 ms //Tipps:// * Verwende für die Tasten den pinMode INPUT_PULLUP. Wenn dir nichg ganz klar ist, weshalb das nötig ist: Lehrperson fragen. * Ob eine Taste gedrückt ist oder nicht, fragst du innerhalb der loop()-Schleife mit If-Verzweigungen ab (z.B.: if (digitalRead(freqUpPin) == LOW){...}). Da die loop-Schleife mehrere zehntausend Male pro Sekunde durchlaufen wird, ist es gut möglich, dass auch eine sehr kurze Betätigung der Taste mehrmals erkannt wird und damit wie mehrere Betägtigungen wirkt. Das kannst du verhindern, indem du kurz nach Eintritt in die Verzweigung einige Millisekunden wartest (''delay()''). Alles klar? Falls nicht ganz: Lehrperson fragen! ==== - RGB-LED ==== * Verbinde folgende Bauteile mit dem Arduino: * [[https://www.adafruit.com/product/848|RGB-LED 10mm]] oder [[https://www.mouser.ch/datasheet/2/180/HV_5RGBXX_5mm_Full_Color_Series-1489147.pdf|RGB-LED 5mm]] * Potentiometer * drei Tasten * Programmiere den Arduino so, dass du die Farben wie folgt verändern kannst: * Rot-Anteil stufenlos erhöhen/verringern * Grün-Anteil ganz ein oder ganz ausschalten * Blau-Anteil schrittweise erhöhen oder verinngern Tipp: Um unterschiedliche Helligkeitsstufen zu setzen benötigst du **PWM**-Ausgänge, die du mit ''analogWrite()'' ansteuerst: * Welche Pins geeignet sind, siehst du in der [[informatik:arduino_programmieren#einfuehrung|Überischt hier]]. * Du sollst wissen, was PWM ist und wie es funktioniert: Lese [[https://docs.arduino.cc/learn/microcontrollers/analog-output|diese Beschreibung]] und frage nach, wenn etwas nicht ganz klar ist. === Zusatzaufgaben === - Zeige auf dem Display die aktuellen Farbwerte an. - Progammiere ein Leuchtmuster: LED-Fabre wechselt regelmässig. - Programmiere mehrere Leuchtmuster, die dann via Display und Tasten wählbar sind. Verwende evtl [[https://www.adafruit.com/category/168|Neo-Pixel-Bautele]] anstelle von RGB-LEDs. ===== - Chronometer ===== <color #7092be>**Lernziele:** Zeitmessung mit millis(), Strings und Formatierungen verwenden, Arrays verwenden, EEPROM beschreiben und auslesen, Bit-Operatoren verwenden.</color> ==== - Chronometer 1 ==== Programmiere den Arduino so, dass du die Zeit stoppen kannst: * Bestimmme zwei Eingänge //Start// und //Stop// an die du Tasten zum Starten und Stoppen anschliesst. Verwende die internen Pull-up-Widerstände. * Wenn der Eingang //Start// LOW wird, beginnt die Zeitmessung, wenn //Stop// LOW wird, stoppt sie. * Die Zeit misst du mit der Funktion [[https://www.arduino.cc/reference/de/language/functions/time/millis/|millis()]]. * Das LCD zeigt die aktuelle laufende/gestoppte Zeit im Format MM:SS:HH (M=Minuten, S=Sekunden, H=Hundertstelsekunden). * Erstelle hierfür eine Funktion z. B. //showTime//, der du eine Zeit in Millisekunden übergeben kannst und die diese Zeit im gewünschten Format aufs Display schreibt. Nutze die Funktion ''sprintf'' für Formatierungen, siehe Beispiele [[https://gist.github.com/ArduinoBasics/6517378fc2ef9e851773837f301b1d55|hier]] und [[https://forum.arduino.cc/t/convert-int-to-sring-with-leading-zero/629313|hier]]. ==== - Chronometer 2 ==== Speichere dein Programm Chronometer 1 unter neuem Namen und erweitere es wie folgt: * Bestimme einen zusätzlichen Eingang //Reset//. * Das Display zeigt nun auf der ersten Zeile die laufende/gestoppte Zeit und auf der zweiten Zeile die kürzeste, je gemessene Zeit seit Betätigung der Taste Reset. //Tipp:// Erstelle evtl. eine Funktion //updateTimes//, die die gestoppte und die kürzeste Zeit an richtiger Stelle aufs LCD schreibt. * Wenn der Reset-Eingang LOW wird, werden alle gemessenen oder gespeicherten Zeiten auf 0 gesetzt. ==== - Chronometer 3 ==== Speichere dein Programm Chronometer 2 unter neuem Name und erweitere es wie folgt: * Bestimme einen zusätzlichen Eingang //Next//. * Dein Programm soll nun die 5 kürzesten Zeiten speichern. Verwende hierzu ein Array (speichert die 5 besten Zeiten in Millisekunden). * Das Display zeigt auf der zweiten Zeile jeweils die Position (1. … 5.) der jeweiligen Zeit, also etwa so {{:talit:electronics:pasted:20230301-110103.png}} * Wenn der Next-Eingang LOW wird, wird die nächst höhere Position/Zeit angezeigt. Nach Position 5 wird wieder Position 1 angezeigt. * Wenn du die Stromversorgung abschaltest, sollen die fünf Zeiten gespeichert bleiben! (Nutze die Bibliothek EEPROM). Erst wenn der Reset-Eingang LOW wird, werden alle gemessenen oder gespeicherte Zeiten auf 0 gesetzt. * Erstelle folgende Funktionen: * Eine Funktion //sortTimes//, die die Zeiten sortiert, sodass die kürzeste jeweils an erster Stelle im Array steht. * Zwei Funktionen //writeTimesEEP// und //readTimesEEP//, die alle fünf Bestzeiten im EEPROM speichern bzw. daraus auslesen. **Challenge:** Verwende nur die EEPROM-Funktionen //EEPROM.write// und //EEPROM.read//, welche jeweils nur ein Byte schreiben/lesen. Nutze [[https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftleft/|Bit-Schiebe-]] und [[https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitwiseand/|Bit-Maskierungs]]-Operatoren, um Variablen von längeren Datentypen in mehrere Bytes aufzuteilen bzw. aus meherern Bytes zusammenzusetzen. * Alternative zu //EEPROM.write// und //EEPROM.read//: Betrachte EEPROM als ein Array, dessen Elemente 1 Byte gross sind: mit EEPROM[2] greifst du auf Adresse 2 zu. talit/electronics/arduno.txt Zuletzt geändert: 2025-02-19 12:41von gra