Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Arduino Mikrocontrollerkurs

Ähnliche Präsentationen


Präsentation zum Thema: "Arduino Mikrocontrollerkurs"—  Präsentation transkript:

1 Arduino Mikrocontrollerkurs
Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs 1 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 Youtube: Arduino Tutorial
Tutorials Youtube: Arduino Tutorial Interessante Seiten Händler 3

4 Übungen mit dem Steckboard
Leuchtdioden Das Steckboard 4

5 Übungen mit dem Steckboard
Leuchtdioden 5

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

7 Übungen mit dem Steckboard
Schaltungsvarianten 7

8 Übungen mit dem Steckboard
Diode 8

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

10 Übungen mit dem Steckboard
Transistor 10

11 Übungen mit dem Steckboard
Kondensator 11

12 Übungen mit dem Steckboard
Wechselblinker 12

13 Übungen mit dem Steckboard
Lautsprecher 13

14 Der Arduino

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

16 Lauflicht 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.            } 16

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

18 Monitor Serial.begin(9600); Serial.println(„Guten Tag!“);
Über den Monitor kann man mit dem Arduino sprechen Serial.begin(9600); Serial.println(„Guten Tag!“); if (Serial.available() > 0) { Eingabe = Serial.read(); } 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() { 18

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

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. 20

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

22 Blinkgeschwindigkeit
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);                   } 22

23 Bar-Graph 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);     }   } } 23

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

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

26 Töne 26 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 26

27 Helligkeit in Stufen anzeigen
sensorMin= Ergebnis bei kleinster Helligkeit sensorMax = Ergebnis bei größter Helligkeit 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;   } } 27

28 LCD anschließen (2x16 Zeichen)
* 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              28

29 29

30 LC-Display Typ „Batron“ BT24005 2x40 Zeichen
#include <LiquidCrystal.h> //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!"); Arduino LCD Arduino GND +5V 1KO nach GND (RS) 7 (E) LCD Arduino 2 3 4 5 A ,0 Ohm nach +5V K GND 30

31 31

32 LC-Display Typ 1602 2x16 Zeichen 32 #include <LiquidCrystal.h>
//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!"); 1 15 16 LCD Arduino +5V GND 5 4 LCD Arduino 1 2 3 15 (A) ,0 Ohm nach +5V 16 (K) GND 32

33 33

34 LCD-Befehle 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 Vom Terminal auf das LCD schreiben: #include <LiquidCrystal.h> 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());       } } 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); 34

35 LCD - Beispielprogramme
//Taster LCD EIN AUS #include <LiquidCrystal.h> 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.print ("AUS"); Taster an Pin 9 Mit dem Taster zwischen Anzeige „Ein“ und „Aus“ umschalten // taster lcd zähler #include <LiquidCrystal.h> 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); Mit dem Taster höherzählen und auf dem LCD anzeigen 35

36 Programme mit dem LDR 36 „Gemessene“ Werte im Monitor und auf dem
int sensorPin = A0; int sensorValue; Serial.begin(9600); void setup() { } void loop() { sensorValue = analogRead(sensorPin); Serial.println (sensorValue); delay(500); #include <LiquidCrystal.h> 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); #include <LiquidCrystal.h> 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); „Gemessene“ Werte im Monitor und auf dem LCD ausgeben, oder in Töne umsetzen 36 36

37 Programme mit dem LDR #include <LiquidCrystal.h> 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(); 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!). 37

38 „Messen“ von Temperaturen
#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); } 38

39 Programme mit dem NTC 39 Temperatur auf dem LCD anzeigen
#include <LiquidCrystal.h> 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); Temperatur auf dem LCD anzeigen #include <LiquidCrystal.h> 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 als Ton ausgeben 39

40 Temperaturen messen mit dem LM35
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); 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 Widerstände messen 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); } 41

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. 42

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

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


Herunterladen ppt "Arduino Mikrocontrollerkurs"

Ähnliche Präsentationen


Google-Anzeigen