Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)

Ähnliche Präsentationen


Präsentation zum Thema: "1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)"—  Präsentation transkript:

1 1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)

2 Arduino Mikrocontroller Eine Einführung speziell für Jugendliche Der hier vorgeschllagene Kurs richtet sich an Einsteiger und vor allem an Jugendliche ab ca. 13 Jahre. Die Teilnehmer erhalten zu Beginn als Einzelteile: - einen Arduino (fertig oder besser von den Teilnehmern selber löten lassen) - ein Steckbrett - ein LC-Display - einige Verbindungskabel (wire-jumpers) unterschiedlicher Länge(ca. 20 Stück ) - 8 LED´s mit Vorwiderstand (330 Ohm) -1 Minilautsprecher -1 Holzbrett weitere Bauteile kommen dann bei Bedarf hinzu. Die Kosten für die Erstausstattung liegen bei ca. 35€. Wir beginnen mit einfachen Übungen an einem Steckbrett. Als Stromversorgung dient zunächst eine 9V-Blockbatterie. Die Teilnehmer lernen die wichtigsten elektronischen Bauteile kennen. Sinnvoll sind jetzt auch einige Lötübungen, bei Jüngeren mit Reisszwecken, Ältere mit kleinen elektronischen Schaltungen In der nächsten Phase werden Arduino und Steckbrett auf dem Holz montiert. Das ist wichtig, um ein sauberes Arbeiten zu ermöglichen. Es folgen erste Programmierübungen. Je nach Aufgabe erhalten die Teilnehmer dann weitere Bauteile. Anfangs sollen die Jugendlichen die Programme einfach abschreiben und anschließend modifizieren. Nach und nach werden alle wichtigen Kommandos erklärt. Später ist ein selbstständiges Arbeiten anzustreben, wobei natürlich Teamarbeit immer wünschenswert ist. Die Übungen werden in der Folge immer anspruchsvoller. Zum Abschluss eines jeden Abends sollten „Hausaufgaben“ gegeben werden, um die Teilnehmer zum Weiterarbeiten zu Hause zu motivieren. Diese Unterlagen bieten Material für sicher mehr als ein halbes Jahr (>20 Abende). Vorsicht beim Umgang mit externen Spannungsquellen (bei Aufbauten mit Motoren)! Alle Schaltungen und Programme wurden getestet. Diese Unterlage darf beliebig an Teilnehmer und DARC-Mitglieder weiter gegeben werden. Aber bitte nicht im Internet veröffentlichen und bitte keine Weitergabe außerhalb der Gruppe oder des Vereins, da die Bilder u.U, nicht frei von Urheberrechten sind.

3 3 Tutorials Youtube: Arduino Tutorial Händler Interessante Seiten

4 4 Leuchtdioden Das Steckboard Übungen mit dem Steckboard

5 5 Leuchtdioden Übungen mit dem Steckboard

6 6 Leuchtdioden U= I= Übungen mit dem Steckboard

7 7 Schaltungsvarianten Übungen mit dem Steckboard

8 8 Diode Übungen mit dem Steckboard

9 9 Transistor Messen mit dem Ohmmeter: Farben vertauschen! Plus wird zu Minus und Minus zu Plus! Übungen mit dem Steckboard

10 10 Transistor Übungen mit dem Steckboard

11 11 Kondensator Übungen mit dem Steckboard

12 12 Wechselblinker Übungen mit dem Steckboard

13 13 Lautsprecher Übungen mit dem Steckboard

14 Der Arduino

15 15 void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); } LED-blinken

16 16 void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); usw. } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); digitalWrite(3, HIGH); delay(1000); usw. } Lauflicht

17 17 void setup() { pinMode(2, OUTPUT); pinMode(3, INPUT); } void loop() { if (digitalRead(3) == LOW { digitalWrite(2, HIGH); } Taster Auf den Widerstand kann verzichtet werden: mit: digitalWrite(3, HIGH);

18 18 int a = 5; int b = 10; int c = 20; void setup() { Serial.begin(9600); Serial.print("a = "); Serial.println(a); Serial.print("b = "); Serial.println(b); Serial.print("c = "); Serial.println(c); } void loop() { } Monitor Über den Monitor kann man mit dem Arduino sprechen Serial.begin(9600); Serial.println(„Guten Tag!“); if (Serial.available() > 0) { Eingabe = Serial.read(); }

19 19 Blinklicht Nach einmaligem Betätigen des Tasters sollen die LED´s abwechselnd blinken

20 20 Lautsprecher Nach einmaligem Betätigen des Tasters soll die LED leuchten und der Lautsprecher einen Ton von sich geben. Wird die Taste nochmals betätigt, soll wieder Ruhe herrschen und die LED ausgehen.

21 21 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue, DEC); } Analog-Eingang

22 22 int sensorPin = A0; int ledPin = 13; int sensorValue = 0; void setup() { pinMode(ledPin, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); digitalWrite(ledPin, HIGH); delay(sensorValue); digitalWrite(ledPin, LOW); delay(sensorValue); } Blinkgeschwindigkeit

23 23 const int analogPin = A0; const int ledCount = 10; int ledPins [ ] = { 2, 3, 4, 5, 6, 7,8,9,10,11 }; void setup() { for (int thisLed = 0; thisLed < ledCount; thisLed++) { pinMode(ledPins[thisLed], OUTPUT); } } void loop() { int sensorReading = analogRead(analogPin); int ledLevel = map(sensorReading, 0, 1023, 0, ledCount); for (int thisLed = 0; thisLed < ledCount; thisLed++) { if (thisLed < ledLevel) { digitalWrite(ledPins[thisLed], HIGH); } else { digitalWrite(ledPins[thisLed], LOW); } } } Bar-Graph

24 24 void setup() { } void loop() { int sensorReading = analogRead(A0); int ton = map(sensorReading, 400, 1000, 100, 1000); tone(9, ton, 10); } Töne

25 25 //dit dit dit void setup() { pinMode(9, OUTPUT); } void loop() { tone (9,800,100); //pin, frequenz (hz), dauer (ms) delay (200); tone (9,800,100); //pin, frequenz (hz), dauer (ms) delay (200); tone (9,800,100); //pin, frequenz (hz), dauer (ms) delay (1000); } //space-Ton void setup() { pinMode(9, OUTPUT); } void loop() { int i; for (i=0; i<=2000; i=i+20){ tone (9,i,100); //pin, frequenz (hz), dauer (ms) delay (20); } } Beispielprogramme Töne

26 26 Töne Vorschläge für Variationen - Sirenenton erzeugen - Tonhöhe mit Potentiometer variieren - Tonhöhe in Abhöngigkeit vom Lichteinfall (LDR) - Tonhöhe in Abhöngigkeit von der Temperatur (NTC) - CQ-Ruf programmieren - Orgel mit 8 Tastern (Pin 2-9) - Musikprogramm aus dem Internet laden und ausprobieren

27 27 void setup() { Serial.begin(9600); } void loop() { int sensorReading = analogRead(A0); int range = map(sensorReading, sensorMin, sensorMax, 0, 3); switch (range) { case 0: Serial.println("dunkel"); break; case 1: Serial.println(„dunkler"); break; case 2: Serial.println(„Mittel"); break; case 3: Serial.println(„Hell"); break; } } Helligkeit in Stufen anzeigen sensorMin= Ergebnis bei kleinster Helligkeit sensorMax = Ergebnis bei größter Helligkeit

28 28 * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground //Format is RS, Enable, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); lcd.begin(16, 2); lcd.print("hello, world!"); lcd.clear(); lcd.setCursor(0,0); //Spalte, Zeile LCD anschließen (2x16 Zeichen)

29 29

30 30 LC-Display Typ „Batron“ BT x40 Zeichen #include //Format is RS, Enable, DB4, DB5, DB6, DB7 LiquidCrystal lcd(7,6,2,3,4,5); void setup(){ lcd.begin(40, 2); } void loop(){ lcd.clear(); lcd.setCursor(0,0); //Zeile, Spalte (X,Y) lcd.print(„Hallo!"); } LCD Arduino 1 GND 2 +5V 3 1KO nach GND 4(RS) 7 5 GND 6(E) 6 LCD Arduino A 5,0 Ohm nach +5V K GND Arduino

31 31

32 32 LC-Display Typ x16 Zeichen LCD Arduino 1 +5V 2 GND 3 GND GND 6 4 LCD Arduino (A) 5,0 Ohm nach +5V 16 (K) GND 1 #include //Format is RS, Enable, DB4, DB5, DB6, DB7 LiquidCrystal lcd(7,6,2,3,4,5); void setup(){ lcd.begin(16, 2); } void loop(){ lcd.clear(); lcd.setCursor(0,0); //Zeile, Spalte (X,Y) lcd.print(„Hallo!"); } 16 15

33 33

34 34 lcd.begin(Spalte, Zeile) lcd.print(„Halloele“!) lcd.clear() lcd.setCursor(0, 0); // top left lcd.setCursor(15, 0); // top right lcd.setCursor(0, 1); // bottom left lcd.setCursor(15, 1); // bottom right Weitere Kommandos: LiquidCrystal() begin() clear() home() setCursor() write() print() cursor() noCursor() blink() noBlink() display() noDisplay() scrollDisplayLeft() scrollDisplayRight() autoscroll() noAutoscroll() leftToRight() rightToLeft() createChar() Anzeige der Zeit seit Einschalten des Arduino lcd.setCursor(0, 0); lcd.print(millis()/1000); Vom Terminal auf das LCD schreiben: #include LiquidCrystal lcd(7,6, 2, 3, 4, 5); void setup(){ lcd.begin(40, 2); Serial.begin(9600); } void loop() { if (Serial.available()) { lcd.write(Serial.read()); } } LCD-Befehle

35 35 //Taster LCD EIN AUS #include LiquidCrystal lcd(7,6,2,3,4,5); int taster = 0; void setup() { lcd.begin(16, 2); pinMode(9, INPUT); digitalWrite(9,HIGH); lcd.clear(); } void loop() { taster = digitalRead(9); if (taster == LOW) { lcd.home(); lcd.print ("EIN"); } else { lcd.home(); lcd.print ("AUS"); } // taster lcd zähler #include LiquidCrystal lcd(7,6,2,3,4,5); int i = 0; int taster = 0; void setup() { lcd.begin(16, 2); pinMode(9, INPUT); digitalWrite(9,HIGH); lcd.clear(); } void loop() { taster = digitalRead(9); if (taster == LOW) { lcd.home(); i=i+1; lcd.print (i); } LCD - Beispielprogramme Taster an Pin 9 Mit dem Taster zwischen Anzeige „Ein“ und „Aus“ umschalten Mit dem Taster höherzählen und auf dem LCD anzeigen

36 36 #include LiquidCrystal lcd(7,6,2,3,4,5); int sensorPin = A0; int sensorValue; void setup() { lcd.begin(40, 2); lcd.clear(); } void loop() { sensorValue = analogRead(sensorPin); lcd.home(); lcd.print (sensorValue); delay(500); } Programme mit dem LDR #include LiquidCrystal lcd(7,6,2,3,4,5); int sensorPin = A0; int sensorValue; int lautsprecher = 13; void setup() { lcd.begin(40, 2); lcd.clear(); } void loop() { sensorValue = analogRead(sensorPin); int tonhoehe = map (sensorValue,0,1023,700,4000); lcd.home(); lcd.print ("Stufe: "); lcd.print(tonhoehe); tone (lautsprecher, tonhoehe); } int sensorPin = A0; int sensorValue; Serial.begin(9600); void setup() { } void loop() { sensorValue = analogRead(sensorPin); Serial.println (sensorValue); delay(500); } „Gemessene“ Werte im Monitor und auf dem LCD ausgeben, oder in Töne umsetzen

37 37 #include LiquidCrystal lcd(7,6,2,3,4,5); void setup() { lcd.begin(16, 2); lcd.clear(); } void loop() { int x=0; int y = 1; int ldr = analogRead(A0); lcd.print("Lichteinfall:"); int bar = map(ldr,300,0,0,16); for (x=0; x<=bar; x++) { lcd.setCursor(x,y); lcd.write(255); } delay(30);lcd.clear(); } Programme mit dem LDR Balkenanzeige: Je mehr Licht, desto weiter läuft der Balken auf dem LCD. Das gefüllte Kästchen wird mit lcd.write(255) erzeugt. Die Zeile mit dem „map“ muss dem LDR angepasst werden (kalibrieren!).

38 38 #define wert1 108 #define temp1 0 //Grad Celsius/10 #define wert2 99 #define temp2 230 //Grad Celsius/10 void setup() { Serial.begin(9600); } void loop() { // lese Wert vom Analogpin in Variable int analogValue = analogRead(0); analogValue=map(analogValue,wert1,wert2,temp1,temp2); // gebe das Ergebnis mit einer Nachkommastelle aus: Serial.print("Temperatur: "); Serial.println((analogValue/10.0),1); // Warte 1 Sekunde bevor der nächste Wert gelesen wird delay(1000); } „Messen“ von Temperaturen

39 39 Programme mit dem NTC #include LiquidCrystal lcd(7,6,2,3,4,5); int sensorPin = A0; int sensorValue; void setup() { Serial.begin(9600); lcd.begin(40, 2); lcd.clear(); } void loop() { sensorValue = analogRead(sensorPin); int ntctemp = map (sensorValue,110,170,30,20); lcd.home(); lcd.print ("Temp:"); lcd.print(ntctemp);lcd.print (" Grad"); delay(500); } #include LiquidCrystal lcd(7,6,2,3,4,5); int sensorPin = A0; int lautsprecher = 13; int sensorValue; void setup() { Serial.begin(9600); lcd.begin(40, 2); lcd.clear(); } void loop() { sensorValue = analogRead(sensorPin); int ntctemp = map (sensorValue,110,170,30,20); lcd.home(); lcd.print ("Temp:"); lcd.print(ntctemp);lcd.print (" Grad"); int frequenz = ntctemp * 50; tone(lautsprecher,frequenz); } Temperatur auf dem LCD anzeigen Temperatur als Ton ausgeben

40 float tempC; int tempPin = 0; void setup() { Serial.begin(9600); } void loop() { tempC = analogRead(tempPin); tempC = (5.0 * tempC * 100.0)/1024.0; Serial.print((byte)tempC); delay(1000); Temperaturen messen mit dem LM35 2 Typen: LM35CZ teurer und genauer LM35DZ billiger, etwas ungenauer Temperaturbereich: -55 bis °C Messkurve: 10mV/°C Genauigkeit: +/ -0,25 Grad im Raumtemperaturbereich +/- 0,75 Grad über den gesamten Messbereich

41 41 float Quellspannung=5.0; int AnalogPin=5; int R1=1500.0; //Wert des bekannten Widerstands (der mitgelieferte 1,5k-Widerstand) long Messwert; float SpannungR2; //Spannung über dem zu messenden Widerstand float Widerstand; void setup() { Serial.begin(9600); Serial.println("Widerstand ausmessen"); Serial.println(); } void loop() { //5 Messungen machen und Mittelwert bilden Messwert=0; for(int i=0;i<5;i++){ Messwert+=analogRead(AnalogPin); } Messwert=trunc(Messwert/5); //Spannung berechnen SpannungR2=(Quellspannung/1023.0)*Messwert; Serial.print("Spannung ueber R2 betraegt "); Serial.print(SpannungR2,2); Serial.println(" Volt!"); //Berechnung: (R2 = R1 * (U2/U1)) Widerstand=R1*(SpannungR2/(Quellspannung-SpannungR2)); Serial.print("Der Widerstand hat "); Serial.print(Widerstand,2); Serial.println(" Ohm."); Serial.println(); delay(1000); } Widerstände messen

42 42 Schalten von Last Das Relais wird über den Transistor geschaltet. In einem Programm soll das Relais abwechselnd ein – und ausgeschaltet werden. Variationen: Relais durch externen Taster schalten Taster schaltet beim 1. Mal das Relais ein, beim 2. Mal aus Relais schaltet erst ein, wenn der Taste länger gedrückt wird.

43 43 Schalten von Last void setup() { pinMode (3, OUTPUT); void loop() { for (int i = 1; i<=20; i++) { digitalWrite (3, HIGH); delay (1000); digitalWrite (3, LOW); delay (1000); } delay (2000); } Relais ein und ausschalten

44 44 Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. Schreibe ein Programm, in dem die Helligkeit der LED sich kontinuierlich verändert


Herunterladen ppt "1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)"

Ähnliche Präsentationen


Google-Anzeigen