Jürgens Arduino Tutorial

 

 

Das erste Programm "Blink"

Programm Anforderung:
Eine LED welche an PIN 13 und GND angeschlossen ist, soll im Sekundentakt ein- und ausgeschaltet werden.

Material:

  • 1 Arduino mit USB Kabel
  • 1 LED (rot, grün oder gelb)

Download Programm: Blink_.ZIP

Pinbelegung:
Das LED wird mit der Anode (das lange Beinchen) an den Arduino PIN D13 angeschlossen und die Kathode des LEDs an den Arduino PIN GND.

Den Arduino mit dem USB Kabel an den PC anstöpseln und die arduino Software (Arduino.cc Downloads) starten.
Überprüfen ob der richtige Arduino und COM Port voreingestellt sind.

Eine kurze Übersicht der Werkzeugleiste in der Arduino Software:

Von links nach rechts:

  • Häkchen = Das Programm compilieren ("übersetzen" also in eine für den Arduino verarbeitbare Form bringen)
  • Pfeil nach rechts = Das compilierte Program auf den Arduino laden (Das Programm wird vor dem hochladen automatisch compiliert)
  • Dateisymbol = neue Programmdatei
  • Pfeil nach oben = Programmcode öffnen
  • Pfeil nach unten = Programmcode speichern
  • Lupensymbol = Serial Monitor (Ein Monitor mit dem man direkt mit dem am USB Port angeschlossenen Arduino kommunizieren kann. Hier können Informaionen vom Arduinoprogramm ausgebeben werden, oder Eingaben an das Arduinoprogramm gesendet werden).

Nun den folgenden Programmcode eingeben:
INFO: Die grau geschriebenen Teile sind Kommentare und beeinflussen nicht den Programmablauf.

/*
Blink
Das wahrscheinlich einfachste Programm am Arduino, mit dem einer der vielen Aus/Eingange geschaltet wird.

Pinbelegung
-----------
Arduino Pin D13 -> LED Pin Anode + (langes Beinchen)
Arduino Pin GND -> LED Pin Kathode - (kurzes Beinchen)
*/

// Die "setup Funktion" wird vom Programm nur einmal durchlaufen.
// In der Setup Funktion passiert üblicherweise die Initialisierung.
void setup() {
    pinMode(13, OUTPUT); // Initialisiere den digitalen Pin 13 als Ausgang
}

// Die "loop Funktion" wird vom Programm unendlich oft durchlaufen.
// Die Porgrammteile welche in der loop Funktion angeführt sind werden also immer und immer wieder ausgeführt.
void loop() {
    digitalWrite(13, HIGH); // schaltet PIN D13 HIGH also legt Spannung an
    delay(1000); // warten für 1000 ms also 1 Sekunde
    digitalWrite(13, LOW); // schaltet PIN D13 LOW also schaltet die Spannung ab
    delay(1000); // warten für 1000 ms also 1 Sekunde
}

 

Jetzt das fertige Programm an den Arduino senden. Wenn der Programmcode fehlerfrei ist und die LED korrekt angschlossen ist, sollte die LED im Sekundentakt blinken.

Am Arduino Uno sollte es in etwa so aussehen:

 

Zum Seitenanfang

LCD - Anzeige am Display

Eine LCD Anzeige ist eine sinnvolle Erweiterung für den Arduino. Es gibt verschiedene LCDs am Markt. Am einfachsten zu programmieren ist ein Display mit I2C Interface.

In diesem Programmbeispiel wird eine 16 Zeichen 2 Zeilen LCD Anzeige mit I2C Interface programmiert.

Programm Anforderung:
Auf einem 16x2 LCD Display soll die Hintergrundbeleuchtung eingeschaltet werden, dann soll in der ersten Displayzeile "LCD Test" ausgegeben werden.
Nach einer kleinen Pause soll in der ersten Zeile "Hallo" und in der zweiten Zeile "Welt!" angezeigt werden.
Die beiden Worte sollen jeweils abwechselnd an der ersten und vierten Stelle beginnen, und endlos "hin- und her" springen.

Material:

  • Arduino Uno mit USB Kabel
  • 16x2 LCD Display mit I2C Schnittstelle
  • 4 Verbindungskabel (zB. Dupontkabel male-female)
  • Programmbibliothek "LiquidCrystal_I2C.h" (wire.h ist im Lieferumfang der Arduino Software)
    hier Downloaden: LiquidCrystal_I2C.ZIP

Was ist eine Programmbibliothek?
Ein vorgefertigter Programmteil der in ein neues Programm eingebunden werden kann.

Pinbelegung:
Am Display sind 4 Pins vorhanden GND, VCC, SDA, SCL
Wie folgt mit dem Arduino verbinden:

LCD -> Arduino
---------------
GND -> GND
VCC -> 5V
SDA -> PIN A4
SCL -> PIN A5

Hier eine kurze INFO wie man Bibliotheken zur Arduino Software hinzufügt:

  • Datei herunterladen (ZIP Datei)
  • Arduino Software öffnen - Datei - Einstellungen -> Sketchbook Speicherort
  • Den Pfad vom Sketchbook Speiceherot öffnen (normalerweise Eigene Dateien\Arduino)
  • Die Files vom ZIP Verzeichnis nun in den Pfad extrahieren
    (Bibliotheken nach libraries, Porgrammcodes nach source)
  • Nach Restart der Arduino Software stehen die Brogramme zur Verfügung.

Download Programm: LiquidCrystal_I2C.zip

Nun den folgenden Programmcode eingeben:

/*
LCD Test
I2C Serial Display 16x2

Pinbelegung
--------------
LDC -> Arduino
--------------
VCC -> 5V
GND -> GND
SDA -> A4
SCL -> A5
*/

#include <LiquidCrystal_I2C.h> // Programm Bibliothek für LCD
#include <Wire.h> // Programm Bibliothek für IC2 Interface (serielle Schnittstelle)

LiquidCrystal_I2C lcd(0x27,16,2); // LCD 16x2 - Setze LCD Adresse auf 0x27 für 16 Zeichen und 2 Zeilen Display

void setup() {

lcd.init(); // initialisiere LCD
lcd.clear(); // lösche LCD Anzeige
lcd.backlight(); // LCD Hintergrundbeleuchtung ein

lcd.print("LCD Test");
delay(3000); // warte 3 Sekunden

lcd.clear(); // lösche LCD Anzeige
lcd.noBacklight(); // LCD Hintergrundbeleuchtung aus
delay(1000); //warte 1 Sekunde
}

void loop() {

lcd.backlight(); // LCD Hintergrundbeleuchtung ein

lcd.setCursor(0,0); // Cursor auf Pos 1, Zeile 1
lcd.print("Hallo"); // Anzeige auf LCD
lcd.setCursor(3,1); // Cursor auf Pos 4, Zeile 2
lcd.print("Welt!"); // Anzeige auf LCD

delay(500); // warte 0,5 sek
lcd.clear(); // lösche LCD Anzeige

lcd.setCursor(3,0); // Cursor auf Pos 4, Zeile 1
lcd.print("Hallo"); // Anzeige auf LCD
lcd.setCursor(0,1); // Cursor auf Pos 1, Zeile 2
lcd.print("Welt!"); // Anzeige auf LCD

delay(500); // warte 0,5 sek
lcd.clear(); // lösche LCD Anzeige
}

 

Das fertige Programm an den Arduino senden.
Ist alles korrekt eingegeben und stimmt die Pinbelegung, wird am Display jetzt der programmierte Text abwechselnd angezeigt.

Hallo
   Welt!

 

Am Arduino sieht das etwa so aus:

 

Zum Seitenanfang

Uhrzeit, LCD, Hygrometer und Thermometer, Lichthelligkeit

In diesem Aufbau verwenden wir einen Arduino Nano und mehrere Komponenten zusammen. Es soll ein LCD mit 20 Zeichen und 4 Zeilen, eine RealTime Clock (Echtzeituhr), ein Hygro-Thermo Sensor, ein LDR (Lichtempfindlicher Widerstand.

Programm Anforderung:

  1. Es soll aus dem RTC 1307 Modul die aktuelle Zeit/Datum ausgelesen werden, diese soll in der ersten Zeile des 4 Zeiligen LCD 20x4 angezeigt werden.
  2. Dann soll aus dem Kombi Sensor DHT11 der aktuelle Luftfeuchtigkeitswert und die Temperatur ausgelesen werden und in der 2ten Zeile des LCD angezeigt werden.
  3. Außerdem soll der aktuelle Wert des LDRs ausgelesen werden und in der dritten Zeile des LCD angezeigt werden.
  4. Es soll auch abhängig von der aktuellen Lichthelligkeit ein LED ein- oder ausgeschaltet werden (Schwellwert = 250; wenn weniger als 250 dann Licht an).
  5. Es soll in der vierten LCD Zeile angezeigt werden ob das Licht an- oder aus ist.
  6. Der Abfrageintervall dieser Funktionen soll 1000ms (1 Sekunde) betragen.

Material:

  • 1 Stk. Arduino Nano inkl. USB Kabel
  • 1 Stk. 2004 (oder 20x4) LCD I2C Modul
  • 1 Stk. RTC1307 Modul
  • 1 Stk. DHT11 Sensor
  • 1 Stk. LDR Fotowiderstand 5mm ( GM5528)
  • 1 Stk. 10k Ohm Widerstand
  • 1 Stk. Steckbrett (Breadboard)
  • 5V Stromversorgung (zB. MB102 Breadboard Power Supply)
  • Verbindungskabel (zB. Dupontkabel male-female / male-male)
  • Programmbibliotheken: LiquidCrystal_I2C.ZIP RTClib.h DHT.h

Pinbelegung für Arduino Nano:

  • Serial Display 20x4
    --------------
    VCC - 5V
    GND - GND
    SDA - A4
    SCL - A5

  • RTC 1307
    --------
    VCC - 5V
    GND - GND
    SDA - A4
    SCL - A5

  • DHT 11 - Arduino
    (von der glatten Seite gesehen GND-,NC,D,VCC+)
    -----------------------------------------------
    VCC+ - 5V
    GND- - GND
    D - D3
    NC - not connected

  • LDR
    ----
    Arduino +5V -> PIN1 LDR
    PIN2 LDR -> Arduino PIN A1
    PIN2 LDR -> PIN1 R 10K
    PIN1 R 10k -> ArduinoGND

  • LED
    ---
    Anode - PIN 13
    Kathode - GND

Die Leitungsverbindungen zwischen Arduino Nano und den einzelnen Modulen und Sensoren mit Hilfe des Steckbretts entsprechend herstellen.

Dann den Programmcode eingeben:

/*
Real Time Clock, LCD, DHT, LDR
2015 Jürgen Lessner

Pinbelegung für Arduino Nano:

Serial Display 20x4 - Arduino
---------------------------
VCC - 5V
GND - GND
SDA - A4
SCL - A5

RTC 1307 - Arduino
------------------
VCC - 5V
GND - GND
SDA - A4
SCL - A5

DHT 11 - Arduino
(von der glatten Seite gesehen GND-,NC,D,VCC+)
-----------------------------------------------
VCC+ - 5V
GND- - GND
D - D3
NC - not connected

LDR
----
Arduino +5V -> PIN1 LDR
PIN2 LDR -> Arduino PIN A1
PIN2 LDR -> PIN1 R 10K
PIN1 R 10k -> ArduinoGND

*/

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>
#include <DHT.h>

#define DHTTYPE DHT11 // DHT 11
#define DHTPIN 3 // DHT Pin

// LCD 20x4 - Setze LCD addresse auf 0x27 für 20 Zeichen / 4 Zeilen Display
LiquidCrystal_I2C lcd(0x27,20,4);

// RTC 1307
RTC_DS1307 RTC;

// DHT11
DHT dht(DHTPIN, DHTTYPE);

// LDR
int LdrWert = 0; //eingelesener Wert vom LDR
int Dunkel = 250; // Schwellwert Dunkel-Hell LDR

void setup() {

Wire.begin();
RTC.begin();
dht.begin();
pinMode(13,OUTPUT); // LED als Licht
Serial.begin(9600); //starte Serielle Konsole zur Arduino Software

if (! RTC.isrunning()) {

Serial.println("RTC nicht OK");
// Zum Systemzeit setzen, falls Uhr nicht eingestellt ist
RTC.adjust(DateTime(__DATE__, __TIME__));

}

lcd.init(); // initialisiere LCD
lcd.clear(); // lösche Display
lcd.backlight(); // LCD Hintergrundbeleuchtung ein
lcd.print("Clock V1.0"); // Version anzeigen
lcd.setCursor(0,1); // Cursor Pos 1, Zeile 2
lcd.print("2015 J.Lessner"); // Ausgabe auf Display
delay(3000); // 3 Sekunden anzeigen
lcd.clear(); // lösche Display

}

void loop() {

DateTime now = RTC.now(); //aktuelle Zeit

float h = dht.readHumidity(); // declariere h lese Luftfeuchtigkeit aus
float t = dht.readTemperature(); // declariere t lese Temperatur aus

LdrWert = analogRead(A1); //liest LDR Wert
Serial.print("LDR: ");
Serial.println(LdrWert);

if (isnan(h) || isnan(t)) {

Serial.println("Vom DHT kann nicht gelesen werden.");
return;

}

lcd.setCursor(0,0); // Cursor auf Pos 1, Zeile 1

//Zeit ausgeben
lcd.print(now.hour());
lcd.print(":");
if(now.minute() < 10) {

lcd.print("0"); //0 voran stellen

}

lcd.print(now.minute());
lcd.print(":");

if(now.second() < 10) {

lcd.print("0");

}

lcd.print(now.second());
lcd.print(" ");
// Ende Zeitausgabe


// Datum ausgeben
if(now.day() < 10) {

lcd.print("0");

}

lcd.print(now.day());
lcd.print(".");

if(now.month() < 10) {

lcd.print("0");

}

lcd.print(now.month());
lcd.print(".");
lcd.print(now.year());
// Ende Datumausgabe

// Luftfeuchte und Temperatur
lcd.setCursor(0,1);
lcd.print("Hum: ");
lcd.print(h);
lcd.setCursor(7,1);
lcd.print("% Temp: ");
lcd.print(t);
lcd.setCursor(18,1);
lcd.print("\337C"); // Grad Zeichen ausgeben
// Ende H und T

// LDR Helligkeit
lcd.setCursor(0,2);
lcd.print("LDR: ");
lcd.print(LdrWert);

if (LdrWert > Dunkel) {

digitalWrite(13, LOW); // Licht aus
lcd.setCursor(0,3);
lcd.print("Hell -> Licht aus ");

}
else {

digitalWrite(13, HIGH); // Licht an
lcd.setCursor(0,3);
lcd.print("Dunkel -> Licht an");

}

delay(1000);// 1 Sek warten

}

Nicht vergessen! In der Arduino Software den passenden Arduino und COM Port einstellen.

Das fertige Programm an den Arduino senden.
Falls am RTC die Uhrzeit nicht korrekt eingestellt ist, wird sie automatisch an die PC Systemzeit angepasst. Dies wird in der Arduino Konsole angezeigt. Außerdem wird in der Arduino Konsole im Sekundentakt der aktuelle Wert vom LDR ausegegeben.

Am LCD sollte nun in etwas folgendes zu sehen sein und die LED sollte leuchten:

21:24:12 26.02.2015
Hum: 34% Temp: 22°C
LDR: 221
Dunkel -> Licht an

Fällt mehr Licht auf den LDR und der Wert steigt über 250, dann geht die LED aus.

21:27:18 26.02.2015
Hum: 34% Temp: 22°C
LDR: 263
Hell -> Licht aus

Der Aufbau sieht in etwa so aus:

 

Zum Seitenanfang