From f11ad293b4377a81d5b0763240eb64a2d8b22186 Mon Sep 17 00:00:00 2001
From: uvok cheetah
Date: Sun, 19 May 2019 14:39:30 +0200
Subject: Continue migrating posts
Ubiquity, added deprecation paragraph
Identica
Arduino project, migrated code and images
---
...09-04-talk-to-me-ein-kleines-arduino-projekt.md | 240 +++++++++++++++++++++
1 file changed, 240 insertions(+)
create mode 100644 _posts/2010-09-04-talk-to-me-ein-kleines-arduino-projekt.md
(limited to '_posts/2010-09-04-talk-to-me-ein-kleines-arduino-projekt.md')
diff --git a/_posts/2010-09-04-talk-to-me-ein-kleines-arduino-projekt.md b/_posts/2010-09-04-talk-to-me-ein-kleines-arduino-projekt.md
new file mode 100644
index 0000000..fa49350
--- /dev/null
+++ b/_posts/2010-09-04-talk-to-me-ein-kleines-arduino-projekt.md
@@ -0,0 +1,240 @@
+---
+layout: post
+title: "[WIP] Talk to me - Ein kleines Arduino-Projekt."
+date: '2010-09-04T14:45:00.005+02:00'
+author: uvok
+tags:
+- arduino
+modified_time: '2010-10-28T17:29:33.408+02:00'
+thumbnail: https://1.bp.blogspot.com/_iYx36V-6wFY/TIkfJI4BEaI/AAAAAAAAABI/ufuH0QHoFvI/s72-c/ardu.png
+blogger_id: tag:blogger.com,1999:blog-3402054131713474507.post-5167631921540516517
+blogger_orig_url: https://uvok.blogspot.com/2010/09/talk-to-me-ein-kleines-arduino-projekt.html
+---
+
+*Update vom 19.05.2019 (Datum der Migration): Links zum Code wurden in den Post integriert.
+An dieser Stelle gilt ein riesiger Dank der
+[Wayback Machine vom Internet Archive](https://web.archive.org){:target="_blank"}{:rel="noreferrer"},
+ohne deren Hilfe der Code nicht mehr verfügbar wäre.*
+
+(last edit : 28.10.2010)
+
+(Anmerkung: Zur Zeit ist das wirklich nur eine
+sehr kurze Anleitung, die ich zu einem späteren Zeitpunkt hoffentlich noch
+ausbauen kann) Vor kurzem habe ich ein Arduino-Board erworben. Da ich noch
+zusätzlich ein LCD hatte, wollte ich natürlich auch damit arbeiten. Nach einiger
+Einarbeitung kam ich auch zum Beispiel "Texte per serieller Schnittstelle an das
+Arduino-Board senden". Da war auch schon die Idee da: Ich lasse mir übers
+Internet Nachrichten ans LCD schicken.
+
+Neu ist die Idee nicht, ich hab das schon irgendwo mal gesehen. Dennoch
+wollte ich das mal probieren. Da ich kein Ethernet-Shield habe, muss das Board
+per USB am PC bleiben, die Kommunikation erfolgt per serieller Schnittstelle.
+Das Board muss also die ganze Zeit am USB hängen. Da ich eigentlich an meiner
+Belegarbeit arbeiten müsste, nur eine (ganz kurze) Projektvorstellung: Was wird
+benötigt?
+
+## Hardware
+
+Erstmal braucht man ein Board. Ich verwende das Arduino Duemilanove. Wer das
+ältere Diecimila benutzt, ist sogar besser dran - siehe weiter unten, warum.
+Weiterhin
+braucht man ein LCD (jedes sollte funktionieren, sofern es sich per
+LiquidCrystal-Bibliothek ansteuern lässt), evtl. eine Diode (ich hab hier eine
+1N4007). Ein Potentiometer zur Kontrasteinstellung sollte auch vorhanden sein.
+Wer ein Board mit Autoreset hat, braucht auch einen 110~120 Ohm Widerstand. (2x
+220 Ohm parallel tun es natürlich auch). (edit, 09.09.2010)
+
+Fritzing sei dank kann ich euch meine
+Schaltung zur Verfügung stellen:
+
+
+
+Für den Aufbau der Schaltung siehe obige Abbildung.
Weiterhin verweise ich
+hier auf
+https://arduino.cc/en/Tutorial/LiquidCrystal
+und auf
+https://www.ladyada.net/learn/lcd/charlcd.html.
+Lest zur Pinbelegung des LCD auf jeden Fall das Datenblatt. Meins LCD
+verträgt z.B. nur 4,2 Volt am Eingang des Backlight-Pins. Daher brauch ich die
+Diode, um die Spannung von 5V auf 4,3 V runterzubekommen. (Wenn Ihr wollt, könnt
+ihr auch einen Spannungsteiler mit einem 2. Poti aufbauen, damit ihr die
+Helligkeit regeln könnt).
+
+Nochmal zum Autoreset: Wenn ihr per echo Daten an
+/dev/ttyUSB0 sendet, resettet sich das Board, Das führt dazu, dass die Nachricht
+am Ende nicht auf dem LCD angezeigt wird. Deshalb muss der Reset-Pin über einen
+110 Ohm-Wiederstand mit 5V verbunden werden. Ist der Widerstand größer, resettet
+sich das Board trotzdem, ist er kleiner, zerschießt ihr evtl. euer Board (danke
+an die Leute vom arduino.cc Forum) DAS führt natürlich dazu, dass Arduino(IDE)
+das Board beim Programmieren nicht automatisch resettet. Also den Wiederstand
+beim Programmieren entfernen oder manuell resetten. (Ich muss sowieso den
+5V-Stecker beim Programmieren entfernen, da der Programmer sonst nicht
+erreichbar ist.) Wie oben erwähnt: Die älteren Diecimila haben kein
+Autoreset und brauchen das nicht.
+
+## Software
+
+Ich gehe hier nur auf Linux ein. Ich hab keine Ahnung, wie man unter Windows
+Daten direkt an nen COM-Port per Kommandozeile schickt. Vll. kann ja jemand was
+dazu beitragen.
Weiterhin solltet ihr auf eurem PC einen Webserver mit
+PHP-Unterstützung haben. Ich hab hier Lampp laufen.
Arduino-Entwicklungsumgebung
+sollte installiert sein, wenn ihr wisst wie, könnt ihr auch direkt in Emacs
+rumhacken, das ganze per avr-gcc kompilieren und dann mit avrdude brennen
+(Arduino-Entwicklungsumgebung macht nichts anderes). Hier der Code von der
+Sketch:
+
+~~~ c
+// include the library code:
+#include
+
+// initialize the library with the numbers of the interface pins
+LiquidCrystal lcd(2, 3, 8, 9, 10, 11);
+int count=0;
+
+void setup(){
+ // set up the LCD's number of rows and columns:
+ lcd.begin(16, 2);
+ // initialize the serial communications:
+ Serial.begin(9600);
+ lcd.print("Send serial data");
+}
+
+// Scrolling *very* long messages results in error (line jumping etc).
+// This function *should* prevent it
+void overflow() {
+ // Autoscroll schonmal aus, brauchen wir dann bis zum "neuen" 32. Chr eh nicht mehr
+ lcd.noAutoscroll();
+
+ // lass den Nutzer noch zu Ende lesen
+ delay(1500);
+
+ // Loeschen und zur ersten Position
+ lcd.clear();
+
+ // Counter wieder auf 0
+ count=0;
+}
+
+void loop()
+{
+ // when characters arrive over the serial port...
+ if (Serial.available()) {
+ // wait a bit for the entire message to arrive
+ delay(100);
+ // clear the screen
+ lcd.clear();
+ // read all the available characters
+ while (Serial.available() > 0) {
+ // display each character to the LCD
+ count++;
+ lcd.write(Serial.read());
+
+ // wechsele in die naechste Zeile
+ if(count==16) lcd.setCursor(0,1);
+
+ // Autoscroll an und warten bis der Nutzer die Displayanzeige gelesen hat
+ if(count==32) { lcd.autoscroll(); delay(2000); }
+
+ //Und los geht das scrollen
+ if(count>=32) delay(500);
+
+ // Bevor der Pufferueberluf (?) beginnt
+ if(count==54) overflow();
+ }
+ lcd.noAutoscroll();
+ }
+ count = 0;
+}
+~~~
+
+Ich hab hier ein 16x2 LCD mit meiner Anschlussbelegung. Wie das
+LCD-Objekt initialisiert werden muss, steht auch auf der arduino.cc Seite.
Wenn
+ihr ein 4-zeiliges LCD habt, könnt ihr den Quelltext natürlich anpassen.
+
+Bash-Skript:
+
+~~~ bash
+#Pfad zur Text-Datei anpassen
+FILE="/opt/lampp/htdocs/test/text.txt"
+LASTMOD=`stat -c '%Y' $FILE`
+
+while [ 1 ]; do
+NOWMOD=`stat -c '%Y' $FILE`
+if [ $NOWMOD -ne $LASTMOD ]; then
+ LASTMOD=$NOWMOD;
+ cat $FILE > /dev/ttyUSB0
+ #Zusätzliches Nachrichtenlog
+ cat $FILE >> /home/user/arduino/newslog.txt
+ echo >> /home/user/arduino/newslog.txt
+fi
+~~~
+
+Das Bash Skript prüft die Text-Datei, in die per PHP die Nachrichten geschrieben
+werden.
Das Bash-Skript muss evtl noch ergänzt werden, sodass zu Beginn der
+/dev/ttyUSB-Port mit einer Baud von 9600 initialisiert wird. Dazu wird der
+Befehl stty -F /dev/ttyUSB0 9600 als erstes ausgeführt werden. Falsche
+Baud führt jedenfalls zu falschen Zeichen auf dem Display Zuletzt noch die
+Seiten für den Webserver:
Das Formular:
+
+~~~ html
+
+~~~
+
+Und die Seite, die die Eingaben verarbeitet:
+
+~~~ php
+= 43 ) {
+ echo "Nachricht zu lang!";
+ exit;
+}
+
+if ( strlen($text) == 0 ) {
+ echo "Keine Nachricht eingegeben!";
+ exit;
+}
+
+if ( $text <> "" ) {
+ $handle = fopen ( "text.txt", "w" );
+ fwrite ( $handle, $text );
+ fclose ( $handle );
+ echo "Nachricht wurde gespeichert: " . $text;
+ exit;
+}
+?>
+~~~
+
+Es empfiehlt sich ggf, das Formular mit einem Captcha zu schützen oder andere
+Schutzmaßnahmen einzubauen. Ansonsten kann es passieren, dass man zugespammt
+wird. Mit curl ist es z.B. möglich, Daten an Formulare (sowohl POST als auch
+GET) zu senden. Sollte ich in meiner Eile was vergessen haben, sagt Bescheid
+^^
Hier noch ein Bild vom Ergebnis. Hier kann man auch gleich etwas von der
+Verkabelung erkennen, der +Pin ist 5V, der -Pin logischerweise auf GND
+
+
+
+
--
cgit v1.2.3