1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)
-
Upload
brit-schumacher -
Category
Documents
-
view
214 -
download
0
Transcript of 1 Deutscher Amateur-Radio-Club e.V. Arduino Mikrocontrollerkurs Axel Tüner (DF9VI)
1
Deutscher Amateur-Radio-Club e.V.
Arduino Mikrocontrollerkurs
Axel Tüner (DF9VI)
Arduino MikrocontrollerEine 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 wichtigstenelektronischen 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ßendmodifizieren. Nach und nach werden alle wichtigen Kommandos erklärt. Später ist einselbstständiges Arbeiten anzustreben, wobei natürlich Teamarbeit immer wünschenswertist. Die Übungen werden in der Folge immer anspruchsvoller. Zum Abschluss eines jeden Abends sollten „Hausaufgaben“ gegeben werden, um die Teilnehmer zumWeiterarbeiten 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
Tutorials
http://www.arduino.cc/http://www.arduino-tutorial.de/Youtube: Arduino Tutorial http://www.arduino.cc/playground/Deutsch/HomePage
Händlerwww.komputer.de/http://jeelabs.net/projects/hardware/wiki/http://www.watterott.com/http://elmicro.com/
Interessante Seiten
http://wiring.org.co/learning/tutorials/http://www.freeduino.de/http://fff2.at/drupal/content/arduino-projekte
4
Leuchtdioden
Das Steckboard
Übungen mit dem Steckboard
5
Leuchtdioden
Übungen mit dem Steckboard
6
Leuchtdioden
U=
I=
Übungen mit dem Steckboard
7
Schaltungsvarianten
Übungen mit dem Steckboard
8
Diode
Übungen mit dem Steckboard
9
Transistor
Messen mit dem Ohmmeter:Farben vertauschen! Plus wird zu Minus und Minus zu Plus!
Übungen mit dem Steckboard
10
Transistor
Übungen mit dem Steckboard
11
Kondensator
Übungen mit dem Steckboard
12
Wechselblinker
Übungen mit dem Steckboard
13
Lautsprecher
Übungen mit dem Steckboard
Der Arduino
15
void setup() { pinMode(2, OUTPUT); }
void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); }
LED-blinken
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
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
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
Blinklicht
Nach einmaligem Betätigen des Tasters sollen die LED´s abwechselnd blinken
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
void setup() { Serial.begin(9600);}
void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue, DEC);}
Analog-Eingang
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
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
void setup() { }
void loop() { int sensorReading = analogRead(A0); int ton = map(sensorReading, 400, 1000, 100, 1000);
tone(9, ton, 10);
}
Töne
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
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
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 HelligkeitsensorMax = Ergebnis bei größter Helligkeit
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
30
LC-Display Typ „Batron“ BT240052x40 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!");}
LCD Arduino1 GND2 +5V 3 1KO nach GND4 (RS) 75 GND 6 (E) 6
LCD Arduino11 212 313 414 5A 5,0 Ohm nach +5VK GND
Arduino
7 6 5 4 3 2
31
32
LC-Display Typ 16022x16 Zeichen
LCD Arduino1 +5V2 GND 3 GND4 55 GND 6 4
LCD Arduino11 012 113 214 315 (A) 5,0 Ohm nach +5V16 (K) GND
1
#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!");}
16
15
33
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 Arduinolcd.setCursor(0, 0);lcd.print(millis()/1000);
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()); }}
LCD-Befehle
35
//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.home(); lcd.print ("AUS"); }}
// 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); }}
LCD - Beispielprogramme
Taster an Pin 9Mit dem Taster zwischen Anzeige „Ein“ und „Aus“ umschalten
Mit dem Taster höherzählenund auf dem LCD anzeigen
36
#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); }
Programme mit dem LDR
#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); }
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 demLCD ausgeben, oder in Töne umsetzen
37
#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();}
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
#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 Variableint 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 wirddelay(1000);}
„Messen“ von Temperaturen
39
Programme mit dem NTC
#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); }
#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 auf dem LCD anzeigen
Temperatur als Ton ausgeben
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 ungenauerTemperaturbereich: -55 bis + 150 °CMesskurve: 10mV/°CGenauigkeit: +/ -0,25 Grad im Raumtemperaturbereich +/- 0,75 Grad über den gesamten Messbereich
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 Widerstandfloat Widerstand;
void setup(){Serial.begin(9600);Serial.println("Widerstand ausmessen");Serial.println();}
void loop(){//5 Messungen machen und Mittelwert bildenMesswert=0;for(int i=0;i<5;i++){Messwert+=analogRead(AnalogPin);}Messwert=trunc(Messwert/5);
//Spannung berechnenSpannungR2=(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
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
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
Ausgabe von analogen Werten
int ledPin = 9; pinMode(ledPin, OUTPUT);Output von 0 - 255
PWM-Ausgänge: 3, 5, 6, 9, 10, and 11..
Schreibe ein Programm, in dem die Helligkeit der LED sich kontinuierlich verändert