Arduino Mikrocontrollerkurs

Slides:



Advertisements
Ähnliche Präsentationen
Organisatorisches Die * bzw. ** Aufgaben müssen gelöst werden, da sie später wieder gebraucht werden. Musterlösungen werden zwei Wochen nach den Übungsblättern.
Advertisements

Klassen - Verkettete Liste -
4. Attiny-Veranstaltung
LCDisplay Anschluss des LCDisplays Aufbau der LCDisplay-Platine
Forschungszentrum caesar
Sortieren I - Bubblesort -
10. Grundlagen imperativer Programmiersprachen
Anwendungen von Halbleitern
V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)
Die (neuen) Sensoren des Lego Mindstorms NXT Systems
Zusammenfassung Vorwoche
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Wie macht man ein Sudoku? Transformations-Methode:
Fachkunde Quiz.
Einbau eines MP3-Players im Pkw
Sie wollen das Internet
Peripheriegeräte Erkennen und Funktionsweise
Windows Befehlsskript
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Bastelprojekt MAGIC SOUND LIGHT
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Einführung in die Programmiersprache C 4
Informatik 1 Übung 4.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Elektronischer Würfel
Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Aus-drücke, arithmetische Operatoren.
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Arduino Kurs Abend 2.
Ultraschall Funktionsprinzip des Sensors (1)
LEGO NXT Roboter in Java programmieren
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
LCD-Optionsboard CP1W-DAM01
BMEVIEEA100 Grundlagen der Programmierung
Sensoren und Aktoren.
Vorkurs Programmierungstechnik Einführung in Pascal Michael Gellner Lehrstuhl für Softwaretechnik am Institut für praktische Informatik der Universität.
Der Transistor Eine Einführung.
… erste Schritte mit einem programmierbaren Mikrocontroller
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Übung 6 - MdMT Methoden der Medizintechnik Übung zur Vorlesung Folge 6 – Bilder in Matlab Einlesen, Erzeugen.
Cyberspeed Web SolutionsCyberspeed Web Solutions © 2005© 2005 Christof Barth Thomas Müllegger MIRO 1.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Ausgabe von analogen Werten
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Messübungen Kfz-Elektrik Giesler, BBS Winsen (Luhe)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Entfernungsmessung mit Ultraschall
Übung 10 - MdMT Methoden der Medizintechnik Übung zur Vorlesung Folge 10 – Smarter mit LEGO Objektorientierte.
Roboter programmieren
Alltägliche Unterrichtssprache
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Java Programme nur ein bisschen objektorientiert.
Messung des Widerstands Widerstände gibt es überall Einige sind messbar Andere nicht Alle sind nützlich Schon Ohm hat das erkannt Dünne Drähte werden schneller.
Markus Heller, M.A. (DL8RDS)Datum: Folie Nummer 1 File: Einsatz von Mikrocontrollern in Amateurfunkprojekten Microcontroller in Selbstbauprojekten.
Simulieren und Stecken
Ausgabe von analogen Werten
C / C++ für das Internet der Dinge und Hausautomatisierung Arduino Uno / Nano / … Input, Interrupts, Timer, Sleepmode Hochschule Fulda – FB AI Sommersemester.
LCDisplay Anschluss des LCDisplays Aufbau der LCDisplay-Platine
I2C beim Attiny Was ist I2C? I2C-Befehle Das PCF8574-Modul
Programmieren in C / C++ Software Serial, Bluetooth
Uhr mit 7-Segment-Anzeige SCHALTUNG UND BAUTEILE
Unser Mikrocontroller – Der Arduino
Uhr mit 7-Segment-Anzeige
Projektmodul DM Kurze Einführung Arduino und Arduino-Programmierung
X Verwendungshinweise:
ESP32 Arduino Herzlich willkommen zum Edison Quickie. „ESP32-Blink“
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
LED und Pin Projekt INGOLSTADT.
 Präsentation transkript:

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

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.

Youtube: Arduino Tutorial Tutorials http://www.arduino.cc/ http://www.arduino-tutorial.de/ Youtube: Arduino Tutorial http://www.arduino.cc/playground/Deutsch/HomePage Interessante Seiten http://wiring.org.co/learning/tutorials/ http://www.freeduino.de/ http://fff2.at/drupal/content/arduino-projekte Händler www.komputer.de/ http://jeelabs.net/projects/hardware/wiki/ http://www.watterott.com/ http://elmicro.com/ 3

Übungen mit dem Steckboard Leuchtdioden Das Steckboard 4

Übungen mit dem Steckboard Leuchtdioden 5

Übungen mit dem Steckboard Leuchtdioden I= U= 6

Übungen mit dem Steckboard Schaltungsvarianten 7

Übungen mit dem Steckboard Diode 8

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

Übungen mit dem Steckboard Transistor 10

Übungen mit dem Steckboard Kondensator 11

Übungen mit dem Steckboard Wechselblinker 12

Übungen mit dem Steckboard Lautsprecher 13

Der Arduino

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 7 6 5 4 3 2 LCD Arduino GND +5V 1KO nach GND (RS) 7 (E) 6 LCD Arduino 2 3 4 5 A 5,0 Ohm nach +5V K GND 30

31

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) 5,0 Ohm nach +5V 16 (K) GND 32

33

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

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

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

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

„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

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

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 + 150 °C Messkurve: 10mV/°C Genauigkeit: +/ -0,25 Grad im Raumtemperaturbereich +/- 0,75 Grad über den gesamten Messbereich

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

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

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

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