0174-5 Conrad Arduino Lernpaket_09.indd 1 14.07.
Impressum © 2015 Franzis Verlag GmbH, Richard-Reitzner-Allee 2, 85540 Haar www.elo-web.de Autor: Uli Sommer ISBN 978-3-645-10174-5 Produziert im Auftrag der Firma Conrad Electronic SE, Klaus-Conrad-Str. 1, 92240 Hirschau Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien.
INHALT Arduino™-Lernpaket mit LC-Display................................................................................... 5 1 CD-ROM zum Lernpakett ........................................................................................................ 6 1.1 Inhalt der CD-ROM ..................................................................................................... 6 1.2 GPL (General Public License) ................................................................................... 6 1.
6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 .noBlink() ................................................................................................................... 37 .noDisplay() ............................................................................................................... 37 .display()....................................................................................................................38 .scrollDisplayLeft() .....................................................
ARDUINO™-LERNPAKET MIT LC-DISPLAY Dieses Lernpaket richtet sich an die Arduino™-Programmierer, die bereits die Grundlagen von Arduino™ und der Mikrocontrollertechnik erlernt haben und nun mehr aus ihrem Arduino™-Mikrocontroller herausholen wollen. Wir zeigen Ihnen anhand kleiner Beispiele mit ausführlichen Erklärungen, wie LC-Displays, kurz LCDs, funktionieren und Sie sie mit Arduino™ ansteuern und in der Praxis verwenden. Zudem erfahren Sie, wie Sie zwischen PC und Arduino™ mithilfe kleiner VB.
1 CD-ROM ZUM LERNPAKET Diesem Lernpaket liegt eine CD-ROM bei, die verschiedene Programme und Beispiele enthält. Die CD-ROM erleichtert Ihnen das Arbeiten mit diesem Buch. Die hier abgedruckten Beispiele sind auf der CD-ROM enthalten. 1.1 | Inhalt der CD-ROM 쎲 Arduino™-Entwicklungsumgebung (IDE) 쎲 Beispielprogrammcode zum Lernpaket 쎲 VB.NET-Programme 1.2 | GPL (General Public License) Sie können Ihre eigenen Programme mit anderen Anwendern über das Internet austauschen.
1.3 | Systemvoraussetzung Ab Windows 7/8/8.1, 32 und 64 bit oder höher, Linux 32 und 64 bit, Mac OS X, CD-ROM-Laufwerk, Java Hinweis Dieses Lernpaket enthält VB.NET-Programme, die nur unter Windows funktionieren. Die grundlegenden Arduino™-Programme zu diesen Experimenten funktionieren auch auf anderen Betriebssystemen. Nur die .NET-PC-Programme benötigen zum Experimentieren ein Windows-Betriebssystem mit .NET Framework. 1.4 | Updates und Support Arduino™ wird ständig weiterentwickelt.
2 INHALT DES LERNPAKETS Das Lernpaket enthält alle Bauteile, die Sie für die Experimente benötigen. Bitte kontrollieren Sie die Bauteile auf Vollständigkeit, bevor Sie mit den Experimenten beginnen! Hinweis Die Arduino™-UNO-Mikrocontrollerplatine ist nicht im Lieferumfang enthalten. Da es sich um ein Lernpaket handelt, das sich an den fortgeschrittenen Arduino™-Programmierer richtet, sollte ein Arduino™ UNO oder MEGA bereits auf dem Arbeitsplatz vorhanden sein.
Beachten Sie bitte die folgenden Sicherheitsregeln! 쎲 Vermeiden Sie metallische Gegenstände unter der Platine oder isolieren Sie die gesamte Unterseite mit einer nicht leitenden Schutzplatte oder Isolierband. 쎲 Halten Sie Netzteile, andere Spannungsquellen oder führende Leiter mit mehr als 5 Volt (V) von der Experimentierplatine fern. 쎲 Schließen Sie die Platine nach Möglichkeit nicht direkt an den PC, sondern über einen Hub an. Dieser enthält meist eine zusätzliche wirksame Schutzschaltung.
3 DIE BAUTEILE UND IHRE FUNKTION Die Bauteile des Lernpakets werden an dieser Stelle vorgestellt und die jeweilige Funktion wird kurz erklärt. Aber erst die folgenden Experimente vermitteln die praktischen Erfahrungen mit der Schaltungstechnik der Elektronik. 3.1 | Steckbrett Auf dem Steckbrett (engl. Breadboard) können Sie Ihre Schaltungen ohne Lötarbeiten aufbauen. Unser Steckbrett besteht auch 17 Spalten und 5 Zeilen.
3.2 | Steckbrücken Dem Lernpaket liegen mehrere fertig konfektionierte Steckbrücken bei. Mit ihnen werden die Verbindungen zwischen dem Steckbrett und der Arduino™-Platine hergestellt. Die Steckbrücken besitzen auf beiden Seiten einen kleinen Stift, der sich leicht in das Experimentierboard sowie in die Arduino™-Platine stecken lässt. Seien Sie aber trotzdem vorsichtig dabei, damit Sie keinen Stift versehentlich abbrechen oder verbiegen! Abb. 3.2: Steckbrücken 3.
3 | Die Bauteile und ihre Funktion 3 Es gibt Taster, die bei Betätigung den Stromkreis schließen, und solche, die den Stromkreis öffnen. Man bezeichnet die Taster, die den Stromkreis schließen, oft mit »N. O.« (normaly open) und solche, die den Stromkreis öffnen, mit »N. C.« (normaly close). Die Abbildung zeigt einen Taster, der dem Lernpaket beiliegt. Er schließt bei Betätigung den Stromkreis und der Strom kann von Kontakt 1 nach 2 fließen.
3.4 | Widerstände 13 Abb. 3.4: Der Widerstand und sein Schaltzeichen Widerstände mit einer Toleranz von +/-5 % gibt es in Werten der E24-Reihe, wobei jede Dekade 24 Werte mit etwa gleichmäßigem Abstand zum Nachbarwert enthält.
3 | Die Bauteile und ihre Funktion 3 Abb. 3.6: Tabelle für Widerstände mit vier Farbringen Tipp Im Internet findet man unter dem Suchbegriff »Widerstandscode Rechner« viele Widerstandsfarbcoderechner, z. B. unter http://www. ab-tools.com/de/software/widerstandsrechner// oder http://www. dieelektronikerseite.de/Tools/Widerstandsrechner.htm. Es gibt auch eine altmodische Variante, wie in der Abbildung unten zu sehen.
3.5 | Temperatursensor 15 3.5 | Temperatursensor Zum Erfassen der Temperatur liegt ein NTC-Temperatursensorr bei. Die Bezeichnung NTC steht für »negativerr Temperaturkoeffizient« und besagt, dass der Widerstand bei zunehmender Erwärmung sinkt. Es handelt sich somit um einen Heißleiter. Der im Lernpaket enthaltene NTC besitzt einen Widerstand von 4,7 kΩ bei 25 °C/298,15 K (Kelvin). Abb. 3.8: Der NTCTemperaturfühler und sein Schaltzeichen 3.
3 | Die Bauteile und ihre Funktion 3 3.7 | LC-Display Der Hauptakteur dieses Lernpakets ist das blau-weiße LCD. Für das Lernpaket wurde ein LCD mit zwei Zeilen und 16 Spalten mit je 5 x 8 Dots (Punkten) verwendet. Diese Displays sind mittlerweile auch einzeln in jedem gutem Elektronikfachgeschäft oder Internetshop für wenige Euros erhältlich. Farblich gibt es sie in Grün, Blau, Bernsteinfarben, Gelb und ein paar Sonderfarben, die jedoch meist teurer sind. In unseren Fall ist ein blaues LCD verbaut.
3.7 | LC-Display 17 Abb. 3.11: Fertig eingelötete Stiftleiste 10174-5 Conrad Arduino Lernpaket_09.indd 17 14.07.
4 ERSTER FUNKTIONSTEST Verdrahten Sie den ersten Versuch so, wie in der Abbildung gezeigt. Seien Sie dabei vorsichtig, um die Pins der Steckbrücken nicht zu verbiegen oder gar abzubrechen. Abb. 4.1: Experimentier-Grundbeschaltung mit dem LCD 10174-5 Conrad Arduino Lernpaket_09.indd 18 14.07.
Kontrollieren Sie am Ende die Schaltung noch einmal sorgfältig auf Richtigkeit, um keine Bauteile zu beschädigen. Abb. 4.2: Der Schaltplan zur LCDGrundschaltung Info Sollten Sie zum ersten Mal mit Arduino™ arbeiten, müssen Sie zuvor die Arduino™-Entwicklungsumgebung herunterladen. Sie finden sie auf der offiziellen Arduino™-Website http://www.arduino.cc. Hier können Sie Ihr Betriebssystem auswählen und bestimmen, ob Sie die Installer- oder die Zip-Version haben möchten.
4 | Erster Funktionstest 4 Das Programm lässt einen Text und eine Art Zähler auf dem LCD erscheinen und eignet sich, da es sehr klein und übersichtlich ist, gut als erster Funktionstest, um zu kontrollieren, ob alles ordnungsgemäß funktioniert. Beispielcode: LCD 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 // LCD-Library einbinden #include
4 | Erster Funktionstest 21 derfile mit ein und Arduino™ kennt nun automatisch alle LCD-Funktionen. In der nächsten Zeile teilen wir Arduino™ mit, mit welchen Pins das LCD an der Arduino™-Platine angeschlossen ist. 001 LiquidCrystal lcd(11, 10, 2, 3, 4, 5) Mit dem nächsten Kommando bestimmen wir, wie hell unsere Displayhintergrundbeleuchtung leuchten soll. Die LED des LCD ist mit dem Arduino™-Digital/PWM-Port D9 verbunden.
4 | Erster Funktionstest 4 lieren« genannt, woher dieser Aufruf kommt und welche Klasse dafür zuständig ist. Wenn Sie sich schon mit der Programmiersprache C++ beschäftigt haben, erkennen Sie an der Endung *.cpp, dass es sich um C++-Klassen handelt. Arduino™ basiert im Grunde auf C++. Das ist eine gute Möglichkeit, eigene Klassen oder Librarys zu programmieren und anderen Arduino™-Anwendern zur Verfügung zu stellen. Nach diesem kurzen C++-Ausflug wieder zurück zu unserem Beispiel.
4 | Erster Funktionstest 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 23 // LCD Ausgabe lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("**ARDUINO LCD**”); lcd.setCursor(0, 1); lcd.print("TIME DIFF: "); } void loop() { diff = millis(); // Mein Programm Start lcd.setCursor(11, 1); lcd.print(diff – time_diff); delay(100); // Mein Programm Ende time_diff = diff; } Der Beispielcode zeigt, wie man die Programmdurchlaufzeit ermittelt.
5 AUFBAU UND FUNKTIONSWEISE DER LC-DISPLAYS LCDs finden Verwendung in vielen elektronischen Geräten, etwa in der Unterhaltungselektronik, in Messgeräten, Mobiltelefonen, Digitaluhren und Taschenrechnern. Auch Head-up-Displays und Videoprojektoren arbeiten mit dieser Technik. In der folgenden Abbildung ist das LCD aus dem Lernpaket abgebildet. Es handelt sich um ein Standard-5x8-Dot-Matrix-Display mit 2 Zeilen zu je 16 Zeichen. Abb. 5.
z. B. weitere 90° gedreht: Der Analysator versperrt dem Licht den Weg, das LCD ist undurchsichtig geworden. 5.1 | Polarisation von Displays Unter Polarisation versteht man bei LC-Displays nicht die Polung der Spannungsversorgung, sondern es handelt sich hier um den Glas-, Flüssigkeitsund Filteraufbau des Displays. Die meisten LCDs sind TN-Displays (engl. Twisted-Nematic-Displays). Sie beinhalten eine Flüssigkeit, die die Polarisationseben des Lichts um 90° dreht.
5 | Aufbau und Funktionsweise der LC-Displays 5 5.3 | Blickwinkel 6 Uhr/12 Uhr Jedes LC-Display besitzt eine sog. Vorzugsblickrichtung. Von dieser Richtung aus betrachtet hat das Display einen optimalen Kontrast. Die meisten Displays werden für den 6-Uhr-Blickwinkel (auch engl. bottom view, BV) produziert. Dieser Blickwinkel entspricht dem auf einem Taschenrechner, der flach auf dem Tisch liegt. 12-Uhr-Displays (engl. top view, TV) baut man am besten in die Frontseite eines Tischgeräts ein.
5.6 | So wird das Display vom Displaycontroller angesteuert 27 5.6 | So wird das Display vom Displaycontroller angesteuert Die folgenden Abbildungen zeigen, wie der Displaycontroller (KS0066) mit dem Display verbunden ist. Diese Verschaltungen müssen Sie nicht vornehmen, da sie bereits auf dem LCD-Modul gegeben sind. Die Controller sind mit den Displays teils unterschiedlich verbunden und je nach Hersteller auch anders beschaltet.
5 | Aufbau und Funktionsweise der LC-Displays 5 kann man davon ausgehen, dass ein Display ohne Beleuchtung 14 Pins und ein Display mit Beleuchtung 16 Pins besitzt. 5.7 | Die Kontrasteinstellung des Displays Wie bei anderen Bildschirmen können wir auch bei den LCD-Modulen den Kontrast einstellen. Das geschieht z. B. mit einem 10-kΩ-Potenziometer, das als variabler Spannungsteiler verschaltet ist.
5.8 | Der Zeichensatz 29 weichen davon ab), müssen wir den Vorwiderstand etwas abändern. Praktische Werte liegen im Bereich zwischen 10 und 22 kΩ. Abb. 5.4: Temperaturkompensierte Kontrasteinstellung (Quelle: Datenblatt Electronic Assembly) Setzen wir das Display außerhalb des normalen Temperaturbereichs ein (0 bis 40 °C), ist es empfehlenswert, die Beschaltung wie im obigen Schaltplan durchzuführen. Diese Schaltung gleicht den Kontrast auf die Umgebungsbedingung an.
5 | Aufbau und Funktionsweise der LC-Displays 5 Abb. 5.5: Zeichensatz des LCD (Quelle: Datenblatt Samsung) Machen wir ein Experiment mit dem LCD-Zeichensatz. Der folgende Programmcode zeigt, wie Sie die Zeichen der Zeichentabelle auf das Display schreiben können. Sonderzeichen wie das Gradsymbol oder das Ohmzeichen können nicht über eine Stringausgabe erfolgen. Da es sich um den erweiterten Zeichensatz des LCD handelt, müssen wir das über die Zeichentabelle erledigen. 001 lcd.
5.9 | Pinbelegung der gängigen LCDs 31 So setzen sich die oberen und unteren 4 Bits für das Omega-Zeichen zusammen: 001 upper 002 lower = = 1111 0100 Versuchen Sie, auch andere Zeichen auszugeben, und sehen Sie dazu in der Zeichentabelle nach. Upload Das Experiment benötigt die LCD-Grundbeschaltung, wie wir Sie beim Funktionstest aufgebaut haben.
5 | Aufbau und Funktionsweise der LC-Displays 5 Lernpaket enthaltene verwenden, empfehlen wir, zuvor einen Blick in das dazugehörige Datenblatt zu werfen, um das LCD nicht zu beschädigen. Abb. 5.6: Gängige Pinbelegung von Standard-LCDs ohne Beleuchtung (Quelle: Datenblatt Electronic Assembly) Bei LCD-Modulen mit Beleuchtung ist immer etwas Vorsicht geboten. Manche Hersteller legen die LED-Hintergrundbeleuchtungskontakte nicht an Pin 15 und 16, sondern an Pin 1 und 2.
5.9 | Pinbelegung der gängigen LCDs 33 auf Diodentest eingestellt ist, die Polung ermitteln. In Durchlassrichtung müssen Sie dann eine Durchlassspannung zwischen 2 und 4 V messen. Eine weitere Möglichkeit wäre, die LED-Pins sowie die Polung zu identifizieren, wenn Sie mit einen Netzgerät oder einer Batterie von ca. 5 V und einem relativ großen Vorwiderstand (ca. 1–4,7 kΩ) die LED zum Leuchten bringen. Durch den großen Vorwiderstand ist die Gefahr einer Zerstörung des LCD relativ gering. Abb. 5.
6 DIE ARDUINO™ LIQUITCRYSTAL LIBRARY Wie wir bereits beim Funktionstest erfahren haben, besitzt die Arduino™ LiquitCrystal Library eine ganze Reihe von Funktionen, die speziell für die Ausgabe auf dem LCD bestimmt sind. Nun lernen Sie die LCD-Funktionen genauer kennen. 6.1 | LiquidCrystal LiquidCrystal legt fest, mit welchen Arduino™-Pins das LCD verbunden ist. Das LCD kann im 4- oder 8-Bit-Modus konfiguriert werden.
6.2 | .begin() initialisiert das LCD mit den angebenden Zeilen und Spalten. Unser LCD besitzt 2 Zeilen und 16 Spalten. Die Parametrierung muss deshalb wie folgt sein: .begin() Arduino™-Syntax 001 lcd.begin(16, 2) 6.3 | .clear() .clear() löscht die angezeigten Zeichen und positioniert den Cursor in der Ecke links oben. Arduino™-Syntax 001 lcd.clear() 6.4 | .home() positioniert nur den Cursor in der Ecke links oben. Es werden keine Zeichen gelöscht. .home() Arduino™-Syntax 001 lcd.home() 6.5 | .
6 | Die Arduino™ LiquitCrystal Library 6 6.6 | .write() .write() schreibt ein einzelnes Zeichen auf das LCD. Hiermit können wir auch Sonderzeichen aus der Zeichentabelle ausgeben oder den ASCIICode für das Zeichen angeben. Arduino™-Syntax 001 lcd.write(64) Das Zeichen @ besitzt im ASCII-Code die Dezimalzahl 64. Einzelne ASCII-Zeichen werden mit einen Apostroph gekennzeichnet. Wir könnten auch wie folgt schreiben: Arduino™-Syntax 001 lcd.write('@') 6.7 | .print() Mit .
6.8 | .cursor() 37 6.8 | .cursor() schaltet den Cursor ein. Falls der Cursor ausgeschaltet war, wird er jetzt wieder sichtbar. .cursor() Arduino™-Syntax 001 lcd.cursor() 6.9 | .noCursor() .noCursor() schaltet den Cursor aus (nicht sichtbar). Arduino™-Syntax 001 lcd.noCursor() 6.10 | .blink() .blink() schaltet den Cursor ein und lässt ihn blinken. Arduino™-Syntax 001 lcd.blink() 6.11 | .noBlink() .noBlink() schaltet den Cursor aus und beendet das Blinken. Arduino™-Syntax 001 lcd.noBlink() 6.12 | .
6 | Die Arduino™ LiquitCrystal Library 6 6.13 | .display() .display() schaltet das LCD nach einem .noDisplay() wieder ein. Die letzten Werte werden wiederhergestellt. Arduino™-Syntax 001 lcd.display() 6.14 | .scrollDisplayLe () .scrollDisplayLeft() scrollt bei jedem Aufruf den Displayinhalt um ein Zeichen nach links. Arduino™-Syntax 001 lcd.scrollDisplayLeft() 6.15 | .scrollDisplayRight() .scrollDisplayRight() scrollt bei jedem Aufruf den Displayinhalt um ein Zeichen nach rechts.
6.18 | .leftToRight() 39 6.18 | .le ToRight() legt die Ausgaberichtung der Zeichen fest. Es wird von links nach rechts geschrieben. .leftToRight() Arduino™-Syntax 001 lcd.leftToRight() 6.19 | .rightToLe () legt die Ausgaberichtung der Zeichen fest. Es wird von rechts nach links geschrieben. .rightToLeft() Arduino™-Syntax 001 lcd.rightToLeft() 6.20 | .createChar() Mit .createChar() können wir eigene Zeichen erstellen.
7 LCD-FUNKTIONEN Das folgende Beispiel fasst die zuletzt erklärten LCD-Funktionen in einem größeren Beispiel zusammen. Sehen Sie sich dazu den Programmcode an und ändern Sie ein paar der eben beschriebenen Parameter, um die Funktionsweise zu verinnerlichen. Upload Das Experiment benötigt die LCD-Grundbeschaltung, wie wir sie beim Funktionstest aufgebaut haben.
032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 lcd.setCursor(0, 0); lcd.blink(); delay(1500); lcd.setCursor(15, 0); delay(1500); lcd.setCursor(0, 1); delay(1500); lcd.setCursor(15, 1); delay(1500); // Cursor on/off lcd.noBlink(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("cursor on/off"); delay(1000); lcd.clear(); lcd.home(); lcd.
7 | LCD-Funktionen 7 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 } lcd.setCursor(0, 0); lcd.print("FRANZIS ARDUINO IST MEGA SPITZE!"); delay(350); } delay(1500); for(i = 0; i < 16; i++) { lcd.scrollDisplayRight(); lcd.setCursor(0, 0); lcd.print("FRANZIS ARDUINO IST MEGA SPITZE!"); delay(350); } delay(1500); Neu ist, dass wir den Pin für die Hintergrundbeleuchtung mit #define Backlight angeben.
7 | LCD-Funktionen 43 Tipp Mehr zum Thema Präprozessorr finden Sie unter: http://www.mikrocontroller.net/articles/C-Pr%C3%A4prozessor Eine Möglichkeit, Zeichen einzeln wie auf einer alten Schreibmaschine auszugeben, zeigt folgende Programmstelle: 001 002 003 004 005 006 char txt[6] = {"HALLO"}; for(i = 0; i < 5; i++) { lcd.print(txt[i]); delay(500); } Hier wird ein Array mit 6 Zeichen angelegt und mit dem String »HALLO« vorbelegt.
8 EIGENE ZEICHEN ERSTELLEN Das Erzeugen eigener Zeichen, wie eben bereits mit .createChar() beschrieben, wird oft bei der Verwendung von Dot-Matrix-LCDs benötigt, denn viele in der Praxis benötigte Zeichen sind in der Zeichentabelle des LCD nicht enthalten. Dafür gibt es aber die Möglichkeit, eigene Zeichen Punkt für Punkt zu erstellen und anzuzeigen. Wer z. B. einen Smiley benötigt, kann ihn sich über ein Array definieren und an das LCD senden.
Upload Das Experiment benötigt die LCD-Grundbeschaltung, wie wir sie beim Funktionstest aufgebaut haben. Beispielcode: EIGENE_ZEICHEN 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 // LCD-Library einbinden #include
9 BACKLIGHT DIMMEN Das folgende Experiment zeigt, wie wir die LCD-Beleuchtung automatisch heller oder dunkler einstellen können. Durch das Ändern des PWM-Werts an Pin D9 wird die Helligkeit der Hintergrundbeleuchtung stufenlos verstellt. Wird der PWM-Wert größer gewählt, leuchtet die LED heller. Wird er kleiner gewählt, wird die Beleuchtung dunkler. Indem wir den PWM-Wert ändern, verändern wir das Puls-Pausen-Verhältnis zwischen der Ein- und Ausschaltdauer des 5-V-Signals an D9.
017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 analogWrite(Backlight, 0); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.
10 DOT-MATRIX-LCDUHR In vielen Anwendungen wird eine Uhr zur Programmsteuerung benötigt – sei es eine einfache Zeitschaltuhr, eine Steuerung, die einen genauen zeitlichen Ablauf einhalten soll, oder ein Betriebsstundenzähler. Die Anwendungen, bei denen eine Uhr benötigt wird, sind zahlreich. Das Experiment zeigt, wie wir uns eine sehr einfache Uhr selbst programmieren können. Das Programm läuft in der Loop()-Funktion endlich und zählt dabei im 10-ms-Takt den Zähler hoch.
Mit diesen Variablen stellen Sie die Uhr ein: 001 Sekunde = 12 002 Minute = 0 003 Stunde = 0 Tipp Mehr zum Thema Uhrenquarz finden Sie unter: http://de.wikipedia. org/wiki/Uhrenquarz Upload Das Experiment benötigt die LCD-Grundbeschaltung, wie wir sie beim Funktionstest aufgebaut haben. Beispielcode: RTC 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 // LCD-Library einbinden #include
10 10 | Dot-Matrix-LCD-Uhr 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 } 10174-5 Conrad Arduino Lernpaket_09.indd 50 if(cnt == 100) { digitalWrite(LED, HIGH); lcd.setCursor(3, 0); if(Stunde < 10) lcd.print("0"); lcd.print(Stunde); lcd.print(":"); if(Minute < 10) lcd.print("0"); lcd.print(Minute); lcd.print(":"); if(Sekunde < 10) lcd.print("0"); lcd.
10 | Dot-Matrix-LCD-Uhr 51 Würden wir die Zählerstände eins zu eins auf das Display ausgeben, wäre die Darstellung bei Zählerständen kleiner 10 etwas seltsam, da die führende Null nicht angezeigt würde. Damit die Uhr die bekannte »00:00:00«Formatierung erhält, prüfen wir vor der Ausgabe, ob der Wert kleiner als 10 ist. 001 if(Sekunde < 10) lcd.print("0") Ist der Wert kleiner als 10, wird mit einer einfachen Ausgabe nur z. B. »12:1:8« angezeigt werden.
11 KAPAZITÄTSMESSGERÄT Messgeräte mit geringsten Mitteln selbst zu bauen ist immer interessant und spannend. Mit Arduino™ können wir mit geringsten Kosten und Aufwand ein Kapazitätsmessgerät für kleine Kondensatoren im Bereich von 1 nF bis zu ca. 100 μF für unser Hobbylabor programmieren. So funktioniert unser Kapazitätsmesser mit Autorange-Funktion: Zu Beginn der Messung wird die Variable C_time mit Null initialisiert.
11.1 | Aufbau des Kondensatormessgeräts An Pin D12 und GND wird der Kondensator eingesteckt. Achten Sie darauf, dass Sie den Kondensator vor dem Einstecken in die Arduino™-Platine zusätzlich entladen, indem Sie die beiden Drähte des Kondensators zusammenhalten. Auch wenn das Programm den Kondensator vor Beginn der Messung entlädt, kann es vorkommen, dass der von Ihnen ausgewählte Kondensator zuvor mit einer höheren Spannung als 5 V betrieben wurde.
11 11 | Kapazitätsmessgerät Beispielcode: CAPA 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 // LCD-Library einbinden #include // LCD-Pins festlegen // RS, E, D4, D5, D6, D7 LiquidCrystal lcd(11, 10, 2, 3, 4, 5); #define Backlight 9 int messPort=12; float c_time=0.0; float kapazitaet=0.0; void setup() { analogWrite(Backlight,200); lcd.begin(16, 2); lcd.
11.2 | So kalibrieren Sie Ihr Kondensatormessgerät 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 } 55 if(kapazitaet<999) { lcd.setCursor(0,1); lcd.print(kapazitaet); lcd.print("nF "); } else { lcd.setCursor(0,1); lcd.print(kapazitaet/1000); lcd.print("uF "); } delay(1000); 10174-5 Conrad Arduino Lernpaket_09.indd 55 14.07.
12 ZUFALLSZAHLEN – DER LOTTOZAHLENGENERATOR Beim Schreiben von Mess-, Steuer-, Regel- oder Spielprogrammen ist es oft von Nutzen, Zufallszahlen zu generieren, z. B. wenn in einem Haus zu unterschiedlichsten Zeiten die Lichter an- und ausgehen sollen, um einen Anwesenheitssimulator zu programmieren. Für diesen Zwecke kann man die Arduino™-random()-Funktion verwenden.
der C-Programmierung als NOT-Operator. Da bekanntlich eine If()-Abfrage auf TRUE prüft, wird alles andere auf FALSE interpretiert. Würde ohne diesen Operator die If()-Abfrage durchgeführt, wäre die Bedingung immer TRUE, also »wahr«. Sie würde dann bereits ausgeführt, wenn der Taster noch gar nicht von Ihnen gedrückt wurde. Mit dem NOT-Operator kehren wir den Status des Tasters um. Aus 1 wird 0 und aus 0 wird 1 und die If()-Abfrage ist nun erst TRUE, wenn der Taster auch tatsächlich gedrückt wurde. Abb.
12 | Zufallszahlen – der Lottozahlengenerator 12 A - tag Beispielcode: LOTTO 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 // LCD-Library einbinden #include
12 | Zufallszahlen – der Lottozahlengenerator 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 } 59 if(!digitalRead(TASTER)) { delay(50); if(!digitalRead(TASTER)); { lcd.clear(); lcd.setCursor(0, 0); lcd.print("IHRE LOTTOZAHLEN"); lcd.setCursor(0, 1); for(i=0;i
13 BARGRAFANZEIGE Bargrafanzeigen werden oft in der Messtechnik verwendet. Man bezeichnet sie auch als Balkenanzeige. Sie stellen einen visuellen/tendenziellen Messwert dar. Bei Einstellarbeiten an elektronischen Schaltungen ist eine Bargrafanzeige eine deutliche Erleichterung, da hier die Tendenz auf max. oder min. einfacher abzulesen ist, als das mit der digitalen Zahlenwertanzeige der Fall ist. Auch bei Computerprogrammen kennen wir diese Anzeige als Fortschrittsanzeige, z. B.
007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 #define LCD_LENGHT 16.
13 13 | Bargrafanzeige 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 B11100, B11100, }; byte MyChar4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110, }; byte MyChar5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; void draw_bargraph(byte percent) { byte i, c1, c2; 10174-5 Conrad Arduino Lernpaket_09.indd 62 lcd.
13 | Bargrafanzeige 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 63 for(i = 0; i < 16 – (c1 + (c2 ? 1 : 0)); ++i) { lcd.write(byte(0)); } } void setup() { analogWrite(9,200); lcd.createChar(0, lcd.createChar(1, lcd.createChar(2, lcd.createChar(3, lcd.createChar(4, lcd.createChar(5, MyChar0); MyChar1); MyChar2); MyChar3); MyChar4); MyChar5); lcd.
13 13 | Bargrafanzeige bis 1.023 abdeckt. Der Zählerwert wird in Prozent umgerechnet und der Funktion draw_bargraph() übergeben. In der draw_bargraph()-Funktion wird es spannend. Hier erfolgt das Zusammensetzen und Anzeigen der Bargrafanzeige. Bei jedem Aufruf der Funktion wird der Cursor an die Position (0, 0) gesetzt. Das ist die Startposition, um die Anzeige neu zu zeichnen. In der ersten Zeile geben wir den prozentualen Wert der Variablen percent aus und schreiben ein Prozentzeichen dahinter.
13 | Bargrafanzeige 65 in ihr nur eine 8 abgespeichert. Modulo 5 aus 43 ergibt 3, was drei Teilstriche bedeutet. Wenn der Wert wieder kleiner wird, müssen wir die überflüssigen Zeichen vom LCD löschen. Es kommt eine neue Operation hinzu, die sich bedingter Ausdruck oder auch ternärer Auswahloperator nennt. Im Grunde können wir das Ganze wie eine If-Else-Anweisung betrachten, es stellt lediglich eine verkürzte C-Schreibweise dar.
14 LICHTMESSER – DAS FOTOMETER Ein Fotometer ist ein Messgerät zum Ermitteln der Leuchtdichte oder Lichtstärke. Es wird z. B. bei Fotografen als Belichtungsmesser verwendet oder in der Astronomie zur Ermittlung der Helligkeit der Himmelskörper eingesetzt. Abb. 14.1: Aufbau des Fotometers; die LCD-Beschaltung ist so aufgebaut, wie sie bereits in der Grundschaltung verwendet wird. Die Schaltung wurde um einen Fototransistor und einen 10-kΩ-Widerstand erweitert. 10174-5 Conrad Arduino Lernpaket_09.
In der Chemie wird es zur Bestimmung von Konzentrationen verwendet. Haben wir im letzten Experiment eine Bargrafanzeige programmiert, können wir nun statt des Up/Down-Zählers eine echte physikalische Größe übergeben und uns einen einfachen Lichtmesser programmieren. Abb. 14.2: Schaltplan zum Betrieb eines Fototransistors des Typs PT331C am Arduino™-Board Der Schaltplan zeigt, wie der Fototransistor am Analogeingang (ADC) des Arduino™-Boards angeschlossen ist.
14 14 | Lichtmesser – das Fotometer Beispielcode: PHOTOMETER 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 // LCD-Library einbinden #include // LCD-Pins festlegen // RS, E, D4, D5, D6, D7 LiquidCrystal lcd(11, 10, 2, 3, 4, 5); #define LCD_LENGHT 16.
14 | Lichtmesser – das Fotometer 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 69 }; byte MyChar3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100, }; byte MyChar4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110, }; byte MyChar5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; int adc_AVG(byte chan
14 14 | Lichtmesser – das Fotometer 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 void draw_bargraph(byte percent) { byte i, c1, c2; lcd.setCursor(0, 0); lcd.print("Brightness: "); lcd.print(percent); lcd.print("% "); lcd.setCursor(0, 1); percent = map(percent, 0, 100, 0, 80); c1 = percent / 5; c2 = percent % 5; for(i = 0; i < c1; ++i) lcd.write(byte(5)); lcd.
14 | Lichtmesser – das Fotometer 71 Wenn Sie die Schaltung aufgebaut und den Beispielcode auf das Arduino™-Board übertragen haben, wird bei heller Umgebung ein Wert nahe der 100 % auf dem LCD angezeigt und der Balken des Bargrafen füllt die untere Zeile des LCD fast aus. Verdunkeln Sie nun den Fototransistor, wird der Wert niedriger bis nahe Null. Sehen Sie sich dazu die Schaltung genauer an.
15 ALARMANLAGE Das Fotometer lässt sich auch als Alarmanlage verwenden, die schon auf kleinste Lichtänderungen reagiert. Zu Beginn des Alarmanlagenprogramms wird die aktuelle Lichtstärke am Analogeingang A0 ermittelt, der als Referenzpunkt für die Messung dient. Wird der Spannungswert bei der fortlaufenden Messung durch eine Lichtänderung (z. B. eine vorbeigehende Person) größer oder kleiner und somit die vorgegebene Schwelle unter- oder überschritten, löst der Alarm aus.
fortlaufenden Messwerts, der alle 5 ms aufgenommen wird, wird in diesen Programmzeilen vorgenommen. Zum Testen können Sie in einem normal beleuchteten Zimmer mit der Hand in einer Entfernung von ca. 50 cm über den Fototransistor streifen und der Alarm wird auslösen. Das Ganze können Sie auch sehr schnell durchführen. Der Detektor wird Sie sofort erfassen, solange die Verdunkelung durch Ihre Hand mehr als 5 ms beträgt.
15 15 | Alarmanlage 027 028 029 030 031 032 033 034 035 036 cnt++; if(cnt > 2000) { cnt = 0; value=analogRead(PHOTOTRANSITOR); } if(analogRead(PHOTOTRANSITOR) > (value + Schwelle) || analogRead(PHOTOTRANSITOR) < (value – Schwelle)) { lcd.setCursor(1, 1); lcd.print("<<< ALARM >>>”); delay(2000); value=analogRead(PHOTOTRANSITOR); } else { lcd.setCursor(0, 1); lcd.print(" "); } 037 038 039 040 041 042 043 044 045 046 047 048 049 delay(5); 050 051 } 10174-5 Conrad Arduino Lernpaket_09.indd 74 14.07.
15 | Alarmanlage 10174-5 Conrad Arduino Lernpaket_09.indd 75 75 14.07.
16 DIGITALVOLTMETER MIT BARGRAFANZEIGE UND USBSCHNITTSTELLE Mit dem bereits Erlernten können Sie nun einen digitales Voltmeter mit analoger Bargrafanzeige programmieren. Die Bargrafanzeige leistet wertvolle Dienste bei Einstellarbeiten. So erkennt man auf einer analogen Anzeige wesentlich genauer, wo z. B. das Maximum oder das Minimum ist als auf einer digitalen Anzeige mit einer reinen Zahlendarstellung.
Abb. 16.1: Der Aufbau des Digitalvoltmeters arbeiten vorgenommen werden. Auf PC-Seite wird schon bei der Installation der Arduino™-Platine ein virtueller Comport erzeugt. Dieser wird bereits zum Programmieren benutzt. Wir können ihn nun auch ganz einfach zur Datenübertragung an den PC verwenden. Dazu müssen wir im Programm nur die UART-Schnittstelle initialisieren. Diese wird mit Serial.begin() konfiguriert. Der Parameter 19200 zwischen den Klammern steht für die Übertragungsgeschwindigkeit.
16 16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle Baud ist die Einheit für die Symbolrate in der Nachrichten- und Fernmeldetechnik. 19200 Baud bedeutet, dass 19.200 Symbole pro Sekunde übertragen werden. Die Symbolrate kann je nach Codierung unterschiedlich viele Bits enthalten und muss auf der Sender- und der Empfängerseite gleich eingestellt werden, um eine Übertragung zu ermöglichen.
16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle 79 Beispielcode: VOLTMETER 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 // LCD-Library einbinden #include // LCD-Pins festlegen // RS, E, D4, D5, D6, D7 LiquidCrystal lcd(11, 10, 2, 3, 4, 5); #define LCD_LENGHT 16.
16 16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 B11000, B11000, }; byte MyChar3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100, }; byte MyChar4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110, }; byte MyChar5[8] = { B11111, B11111, B11111, B11111, B11111, B1
16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 81 void draw_bargraph(byte percent) { byte i, c1, c2; lcd.setCursor(0, 1); percent = map(percent, 0, 100, 0, 80); c1 = percent / 5; c2 = percent % 5; for(i = 0; i < c1; ++i) lcd.write(byte(5)); lcd.write(c2); for(i = 0; i < 16 – (c1 + (c2 ? 1 : 0)); ++i) lcd.
16 16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 } lcd.print(voltage, 2); lcd.print(" V "); percent = voltage / 5.0 * 100.0; draw_bargraph(percent); Serial.flush(); highbyte=adc_raw/256; lowbyte=adc_raw%256; Serial.write(highbyte); Serial.write(lowbyte); crc=170^highbyte^lowbyte; Serial.write(crc); delay(20); Abb. 16.2: Das VB.Net-Programm in Aktion Um das PC-Programm zu starten, müssen Sie nur im Ordner ...
16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle 83 001 Imports System.IO.Ports.SerialPort 002 Imports System.Text.Encoding Zuerst importieren wir die für die serielle Schnittstelle und die Codierung benötigten Funktionen. Ohne den Import der Encoding Library können wir z. B. keine Werte größer als 128 auswerten, da wir die Schnittstelle sonst nicht auf das Format UTF-8 umschalten können.
16 16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle Mit der Funktion Button_Disconnect_Click() schließen wir die Schnittstelle wieder. Sie steht dann wieder für andere Programme wie die Arduino™-IDE zur Verfügung. Wenn Sie also Programmänderungen oder andere Programme auf Ihr Arduino™-Board übertragen wollen, müssen Sie das Programm zuvor beenden oder Disconnectt klicken, um die Schnittstelle wieder freizugeben. 001 Private Sub SerialPort1_DataReceived(sender As Object , e As System.IO.
16.1 | Erweitern des Messbereichs 85 data(2) 036 037 038 039 If crc = crc_ok Then ' High und Low Byte wieder zusammensetzen data_Word = ((HighByte * 256) + LowByte) voltage = data_Word * (5.0 / 1024.0) 040 041 042 043 044 045 046 047 048 049 050 051 052 053 ' RAW Wert umrechen und als Spannung Anzeigen Label1.Text = Format(voltage, "0.00 V") End If End If Catch ex As Exception End Try End Sub In der Funktion SerialPort1_DataReceived() erfolgt nun der interessanteste Teil des VB.NET-Programms.
16 16 | Digitalvoltmeter mit Bargrafanzeige und USB-Schnittstelle nen Sie den Eingangsspannungsbereich beliebig erweitern. Man beachte aber, dass mit zunehmendem Eingangsspannungsbereich auch die Auflösung sinkt. Bei unserem Experiment, das für eine Eingangsspannung von 5 V ausgelegt ist, haben wir eine Auflösung von 0,00488 V oder 4,88 mV pro Wandlungsschritt. Unser digitalerr Wert des analogen Eingangs kann 1.024 Schritte auflösen, da er eine digitale Auflösung von 10 Bit besitzt.
16.1 | Erweitern des Messbereichs 87 Bei einer angelegten Spannung von 15 V wäre der Wert am ADC: 15 V / 120 kΩ = 0,125 mA 20 kΩ x 0,125 mA = 2,5 V Berechnen wir nun die Verlustleistung über die Widerstände bei maximaler Eingangsspannung: P = U x I 30 V x 0,25 mA = 7,5 mW Sie können sich nun selbst Ihren passenden Spannungsteiler berechnen und den Messwert im Programm anpassen, indem Sie ihn mit dem Spannungsteilerfaktor multiplizieren.
17 TEMPERATURANZEIGE IN GRAD UND FAHRENHEIT Dieses Experiment zeigt, wie Sie mit einem kostengünstigen Temperaturwiderstand wie dem hier verwendeten NTC (engl. Negative Temperature Coefficient Thermistor) ein einfaches LCD-Thermometer programmieren. Abb. 17.1: Aufbau des NTC-LCD-Thermometers; die Schaltung ist ähnlich wie die des Fotometers, nur dass statt des Fototransistors ein NTC verwendet wird. 10174-5 Conrad Arduino Lernpaket_09.indd 88 14.07.
Ein NTC ist ein Widerstand, der seinen Widerstandswert abhängig von seiner Temperatur verändert. Es handelt sich bei einem NTC um einen sogenannten Heißleiter. Das bedeutet, dass der Widerstand bei Erhöhung der Temperatur abnimmt. Abb. 17.2: Schaltbild der NTC-Temperaturmessschaltung Das Schaltbild zeigt den Aufbau genauer. Es handelt sich wieder um einen variablen Spannungsteiler, bestehend aus einem 10-kΩ-Festwiderstand und dem variablen NTC-Widerstand.
17 17 | Temperaturanzeige in Grad und Fahrenheit 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 float temp_celsius, temp_fahrenheit; int ADC_raw; float Grad_to_Fahrenheit(float grad) { return (9.0 / 5.0) * grad + 32; } void setup() { analogWrite(Backlight, 200); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("THERMO – ARDUINO"); Serial.begin(9600); delay(2000); lcd.
17 | Temperaturanzeige in Grad und Fahrenheit 91 Die Widerstandskurve des NTC ist nicht gerade linear und muss durch eine Berechnung angepasst werden. 001 temp_celsius = (580.0 – ADC_raw) / 10 Um die Ausgabe nicht nur in Grad Celsius zu erhalten, wird der Wert in Fahrenheit umgerechnet und auf dem LCD angezeigt. 001 float Grad_to_Fahrenheit(float grad) 002 { 003 return (9.0 / 5.
18 TEMPERATURPLOTTER MIT USBSCHNITTSTELLE Erweitern wir das Thermometer um ein VB.NET-Programm und ändern wir den Programmcode so ab, dass wir statt der Klartextausgabe wie im Vorgängerprogramm nur den Temperaturwert an den PC senden. Die Schaltung bleibt gleich, nur das Programm ändern wir wie folgt: 001 002 003 004 005 006 007 Serial.flush() highbyte=ADC_raw/256 lowbyte=ADC_raw%256 Serial.write(highbyte) Serial.write(lowbyte) crc=170^highbyte^lowbyte Serial.
Abb. 18.1: Der Temperaturplotter im Einsatz; der Temperaturabfall wurde mit Kältespray erzeugt und die Kurve zeigt deutlich, wie danach die Temperatur wieder auf ca. 25 °C ansteigt. 10174-5 Conrad Arduino Lernpaket_09.indd 93 14.07.
19 WEBSYNCHRONE UHR Eine Uhr haben wir in diesem Lernpaket bereits programmiert. Da sie nicht sonderlich genau ist und im Lauf der Betriebszeit einer sehr großen Abweichung unterliegt, programmieren wir nun mit den Kenntnissen um die serielle Übertragung zwischen PC und Arduino™ eine websynchrone Uhr. Websynchron deshalb, da standardmäßig die Windows-Uhrzeit mit einem Internetzeitserver automatisch im Hintergrund abgeglichen wird. In diesem VB.
006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 LiquidCrystal lcd(11, 10, 2, 3, 4, 5); #define Backlight 9 byte Stunde, Minute, Sekunde; void setup() { Serial.begin(9600); analogWrite(Backlight, 200); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ARDUINO PC-UHR”); Stunde = 0; Minute = 0; Sekunde = 0; } void loop() { if(Serial.
19 19 | Websynchrone Uhr 052 053 054 055 056 057 058 059 060 061 } if(Sekunde < 60) { if(Sekunde < 10) lcd.print("0"); lcd.print(Sekunde); } } Serial.flush(); delay(100); Die Grundstruktur des Programms entspricht der der normalen Uhr (RTC), die wir am Anfang des Lernpakets bereits kennengelernt haben. Diesmal empfangen wir im VB.NET-Programm keine Daten, sondern senden Daten vom PC an den Arduino™. Die Daten entsprechen Stunden, Minuten und Sekunden in Form von Bytes.
19 | Websynchrone Uhr 97 In der VB.NET-Timer-Funktion wird vor der eigentlichen Ausgabe sicherheitshalber geprüft, ob der serielle Anschluss geöffnet ist. Ist das der Fall, werden mit SerialPort1.Write() die Zeitdaten übertragen. Dazu verwenden wir die Funktion Now(). Sie enthält die Zeit und das Datum und kann mit den Parametern Hour, Minute und Second angewiesen werden, nur die gewünschten Stellen auszugeben.
20 ANHANG 20.1 | Elektrische Einheiten Man unterscheidet zwischen Spannung, Strom, Widerstand und den Einheiten, in denen die Größen gemessen werden (z. B. Volt oder Ampere). Jede Einheit hat eine Abkürzung, die in den Formeln verwendet wird. Die Abkürzungen ermöglichen eine kurze und übersichtliche Schreibweise. So schreibt man statt Strom gleich 1 Ampere nur I = 1 A. In allen Formeln im Buch werden diese Abkürzungen verwendet.
Zeichen dezimal hexadezimal binär Beschreibung DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US SP ! « # $ % & ‘ ( ) * + , .
20 20 | Anhang Zeichen dezimal hexadezimal binär J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 04A 04B 04C 04D 04E 04F 050 051 052 053 054 055 056 057 058 059 05A 05B 05C 05D 05E 05F 060 061 062 063 064 065 066 067 068
20.2 | ASCII-Tabelle 10174-5 Conrad Arduino Lernpaket_09.indd 101 101 14.07.
21 BEZUGSQUELLEN Conrad Electronic SE Klaus-Conrad-Straße 1 92240 Hirschau www.conrad.de Electronic Assembly GmbH Zeppelinstraße 19 82205 Gilching bei München www.lcd-module.de 10174-5 Conrad Arduino Lernpaket_09.indd 102 14.07.