Die meisten kennen wohl das Spiel mit dem "heißen Draht".
Wer es noch nicht kennt:
Man muss eine Drahtschlinge einen gewundenen Draht entlang bewegen, ohne diesen zu berühren. Für jede Berührung bekommt man eine Strafzeit (15 sek.) aufgebrummt. Hat man das Ende erreicht, so wird die Anzahl der Drahtberührungen sowie die benötigte Zeit angezeigt.
Ein perfektes Projekt für den Arduino. Dafür kann man das "I2C LCD-Uhr"-Projekt benutzen. Zusätzlich kommt noch ein Piezosummer dazu und die "Hardware" für den Draht.
Alles andere erledigt die Software.
Die Schaltung sieht dann so aus:
In der Realität könnte das dann so aussehen:
Ich habe hier einen alten Lötkolben "ausgeschlachtet". Vorne eine Drahtschlinge befestigt und hinten mit einem Spiralkabel zum GND-Anschluß des Arduino geführt.
Der gewundene Draht ist ein übriggebliebenes Stück Erdungskabel, von dem ich die Isolierung entfernt habe. Zusätzlich habe ich im Start- und Endbereich ein Stück des Drahtes mit Hilfe von Schrumpfschlauch wieder isoliert. Da hätte ich eigentlich auch beim entfernen der Kabelisolierung dran denken können und die Enden nicht abisolieren sollen. Aber da war's schon zu spät.
Start und Ende sind zwei große Unterlegscheiben, die so befestigt sind, dass sie den gewundenen Draht nicht berühren.
Das Arduino-Programm sowie das Fritzing-Projekt befinden sich im Anhang.
Wobei hier das Uhrenprogramm weiter im Hintergrund läuft und die Anzeige auf dem LCD nur dann auf das Spiel umgeschaltet wird, wenn die Drahtschlinge vom Startpunkt weggenommen wird, das Spiel also beginnt. Wird die Drahtschlinge wieder auf den Startpunkt gelegt, wird wieder Datum und Uhrzeit angezeigt.
Um hier im Forum AutoIt-Scripte mit Syntax-Highlighting anzuzeigen, muss der "Einfügen"-Button angeklickt werden.
Dort dann "Programmcode" auswählen und als Beschreibung "autoit" eingeben.
Das Ganze sieht dann so aus:
#include <GUIConstantsEx.au3>
Example()
Func Example()
; Create a GUI with various controls.
Local $hGUI = GUICreate("Example")
Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)
; Display the GUI.
GUISetState(@SW_SHOW, $hGUI)
; Loop until the user exits.
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idOK
ExitLoop
EndSwitch
WEnd
; Delete the previous GUI and all controls.
GUIDelete($hGUI)
EndFunc ;==>Example
Bei längeren Quelltexten bitte zusätzlich noch den "Spoiler tag" benutzen. Der findet sich ebenfalls beim "Einfügen"-Button.
Hier ist die Beschreibung optional. In der Quelltext-Ansicht kann man die TAGs sehen!
Das sieht dann so aus:
Show ContentAutoIt-Programm:
#include <GUIConstantsEx.au3>
Example()
Func Example()
; Create a GUI with various controls.
Local $hGUI = GUICreate("Example")
Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)
; Display the GUI.
GUISetState(@SW_SHOW, $hGUI)
; Loop until the user exits.
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idOK
ExitLoop
EndSwitch
WEnd
; Delete the previous GUI and all controls.
GUIDelete($hGUI)
EndFunc ;==>Example
Ein kleines Arduino-Projekt, um einen Nano, ein I2C-LCD und ein DS3231-RTC-Modul zu einer Uhr zu verbinden.
Der Aufbau sieht so aus:
Wobei das "ZS-042" mit dem "DS3231" baugleich ist. Achtung!
Man sollte sich bei diesem RTC-Modul vergewissern, dass auch wirklich ein Akku ("LIR2032") in der Halterung steckt.
Eine baugleiche Batterie ("CR2032") würde durch das laden beschädigt werden und könnte explodieren!
Außerdem ist die interne Lade-Elektronik nicht optimal ausgelegt. Sie würde den Akku über die Ladeschlußspannung laden, weshalb ich den VCC-Anschluß über 2 Dioden an +5V angeschlossen habe. Damit bekommt das Modul nur ca. 3.6V, was eine Überladung des Akkus verhindert.
Diese RTC-Module besitzen einen Temperatur-Sensor, den man per Software auslesen kann. Das habe ich bei dem Programm mit eingebaut.
Auf dem 2-zeiligen Display wird in der oberen Zeile der Wochentag (2stellig), das Datum, sowie die Wochennummer angezeigt.
Auf der unteren Zeile wird die Uhrzeit (HH:MM:SS) sowie die Temperatur angezeigt. Als Besonderheit wird die Sommerzeit (MESZ) ermittelt und die eine Stunde automatisch addiert.
Mit der Funktion aus dem Anhang kann man ein Datum auf einem Kalenderblatt anzeigen lassen. Die Schriftfarbe ist frei wählbar.
Das Kalenderblatt wird als ein AutoIt-Pic-Control (GUICtrlCreatePic) erstellt und kann somit auch auf der Gui verschoben werden (mit GUICtrlSetPos).
Die Funktionen aus dem Anhang dienen dazu, die Anfangszeiten (Datum/Uhrzeit) der Jahreszeiten zu berechnen.
Man erhält dann ein Array mit folgenden Daten: