Wollte lange schon mal, zur Erinnerung an schöne Urlaube eine Markierung auf der Weltkarte anbringen wo wir waren. Als IT-Berater muss es dann aber schon eine Micro-Computer gesteuerte Version sein. Ein roter Punkt reicht da nicht.
Also hier das Ergebnis als Video, und weiter unten dann die Details:
Also so sieht die Weltkarte von vorne aus:
Die Weltkarte in einem Bilderrahmen
Hier die Rückseite. Ein Arduino Mega wurde verwendet, weil der bis zu 60 Ausgänge hat, die einzeln angesteuert werden können.
Die ganze Rückseite, es fehlen noch die analogen Eingänge die als digitale Ausgänge geschaltet werden
An jedem besuchten Urlaubsort wurde ein 3 mm Loch gebohrt und eine LED reingesteckt. An einen Pin der LED wurde jeweils noch ein 220 Ohm Widerstand angelötet. Ja, es sieht etwas wild aus:
An jede LED kommt noch ein Widerstand
Eine Nahaufnahme des Arduino Mega.
Ein Reed-Kontakt habe ich noch an einem Interrupt-Eingang des Arduino geschaltet, so kann man von vorne mit einem Magnet über den Null-Meridian fahren, und schon leuchten unsere TOP 3 Urlaubsorte (Hawaii, Tokio, Seychellen) permanent.
Reed-Kontakt für die TOP 3 Urlaubsorte
Hier das C-Programm, welches in den Arduino geflasht wird und die Ansteuerung durchführt.
Das Java Magazin Ausgabe 9-2013 ist jetzt überall erhältlich (Inhalt). Das Magazin erscheint in einer Auflage von ca. 20000 Exemplaren und ist das am weitesten verbreitet Magazin für JAVA.
In der Ausgabe findet Ihr einen Artikel vom mir zum Thema „Ansteuerung von USB-Schnittstellen via javahidapi mit Java“ inkl. einem Eclipse Beispielprojekt zum downloaden.
Hier ein Foto meines Belegexemplares:
Java Magazin 9 2013
Wie findet Ihr den Artikel? Würde mich über Feedback freuen.
Nach dem Installieren von OpenWrt ist die Almquist-Shell (ash) installiert. Da die ash im Vergleich zu anderen modernen Shells sehr geringe Ansprüche an Speichergröße und Rechnergeschwindigkeit stellt, wird sie in OpenWrt und anderen Embedded-Linux-Systemen verwendet.
Welche Shell aktiv ist kann mit
echo $SHELL
auf der Konsole angezeigt werden. Obwohl der Befehl ja nur den Inhalt der Variable SHELL ausgibt, und die muss ja nicht immer richtig gesetzt sein.
Es reicht auch ein echo $0
welches dann -bash
oder je nach Shell einen Wert ausgibt.
So nun wollen wir die bash installieren weil sie komfortabler und gebräuchlicher ist. opkg update
opkg install bash
in /etc/passwd
in der ersten Zeile, der root Zeile die bash eintragen: root:x:0:0:root:/root:/bin/bash
dann eine Datei .bash_profile anlegen mit folgenden Inhalt:
echo ". $HOME/.bashrc" > /root/.bash_profile
dann eine eigene .bashrc Datei mit den User-Einstellungen anlegen, oder diese verwenden:
Das geht mit scp – Secure copy to copy files to/from a remote computer.
Zum Beispiel wenn im aktuellen Verzeichnis die Datei TWSerial.jar lieg und die in das Root Verzeichnis des WR703N kopiert werden soll.
Wobei der User: root und die IP des WR703: 192.168.2.122 ist (evl. noch anpassen):
scp TWSerial.jar root@192.168.2.122:/root
Das Ergebnis: TWSerial.jar 100% 170KB 169.8KB/s 00:00
Über den Paketmanager jamvm installieren (jamvm_1.6.0-git-2_ar71xx.ipk).
Dazu ja* eingeben und suchen klicken. Anschließend das Paket installieren:
Gui von OpenWrt – Luci – Paketverwaltung
Anschließend testen ob die Version richtig installiert ist mit: jamvm -version
es wird dann folgendes ausgebeben:
JamVM – Java VM – Ausgabe der Version mit: jamvm -version
Wie kann die Java VM verwendet werden: jamvm
ergibt folgendes:
Was kann die Ursache sein, das von OpenWrt kein Zugriff auf das Internet möglich ist?
Checken ob: ping wenzlaff.de geht, wenn nicht,
dann in der /etc/confi/network Datei überprüfen,
ob der folgende Eintrag mit dem DNS und Gateway vorhanden ist:
config interface ‚lan‘
option ifname ‚eth0‘
option type ‚bridge‘
option proto ’static‘
option ipaddr ‚192.168.2.122‘
option netmask ‚255.255.255.0‘
option ip6assign ’60‘ option dns ‚xxx.xxx.xxx.xxx‘ # IP-Adresse aus Router eintragen option gateway ‚192.168.2.1‘
Das Netzwerkkabel muss am Router angeschlossen werden und nicht an der Netzwerkkarte des Rechners.
Das Terminal-Programm minicom muss erste installiert werden.
Dann muss minicom auf den USB Port eingestellt werden.
Aufruf: sudo minicom -s
Dann unter Konfiguration – Einstellungen zum seriellen Anschluss den USB Port angeben z.B. bei mir: /dev/tty.usbserial-A501U7KD
Geschwindigkeit auf: 9600
Unter Konfiguration – Dateinamen und Pfade die Verzeichnisse für Download und Upload setzen.
Und alles speichern mit Konfiguration – Speichern als „dfl“
Minicom beenden.
Als User starten mit: minicom -C logdateiname.txt
Ab sofort wird die ganze Ausgabe in die logdateiname.txt geschrieben.
Beenden kann man die Ausgabe mit: Ctrl+A und dann Q
Hier ein Beispiel mit den gelesenen Luftdruck und Temperatur Parametern über den USB Port:
Mit dem Arduino kann leicht auch 230 Volt geschaltet werden. Dazu kann ein Relais an den digitalen Pin 7 und + VCC und – Masse verbunden werden.
In diesem Video kann man hören und sehen, wie das Relais alle 5 Sekunden an und wieder aus geschaltet wird.
Folgendes Sketch ist in den Arduino Nano hochzuladen. /*
TWRelais
Dieses Programm schaltet das Relais alle 5 Sekunden an und aus.
Thomas Wenzlaff 02.07.2013
Das Relais wir an den digitalen Pin 7 angeschlossen und VCC 5 V und Masse verbunden
Größe des compilierten Programm: 1108 Byte
*/
// An Pin 7 ist eine Relais angeschlossen,
const int RELAIS = 7;
// Die setup Methode wird nur einmal ausgeführt und bei reset
void setup() {
// Digitaler PIN 7 mit der RELAIS ist ein Ausgang
pinMode(RELAIS, OUTPUT);
}
Eine kurze Messung mit zwei an das Arduino-Board angeschlossene Temp.-Sensoren DS18B20 ergibt diese Daten.
Daraus läßt sich mit diesen gnuplot Befehlen
set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [26:28] # die y-Achse geht von:bis
set terminal png
set output "temperaturverlauf.png"
plot "temperatur.log" using 1:2 title "Innen Sensor" with lines, "" using 1:3 title "Aussen Sensor DS18B20" with lines
diese Grafik plotten:
gnuplot zweier Temperatursensoren
Die Sensoren sind mit +-0,5 Grad Celsius bei -10 bis +85 Grad angegeben.
Die Differenz beider Werte ergibt mit diesen gnuplot Befehlen:
set title "Temperatur Differenz zweier Sensoren"
set ylabel "Temperatur Differenz in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-1:1] # die y-Achse geht von:bis
set zeroaxis # die 0 Linie
set terminal png # erzeugt eine PNG Datei
set output "differenztemperaturverlauf.png" # Name der PNG Datei
plot "temperatur.log" using 1:($2-$3) title "Temperatur-Differenz" with lines
set terminal aqua # wieder auf Terminal
replot # nochmal in Terminal plotten
folgendes Ergebnis.
Differenz zweier Temperaturmessungen
Mit welchem gnuplot Befehl bekomme ich eine horizontale Linie bei 0,5 und -0,5 Grad hin, die mit min und max Beschriftet ist? Ok, hier die Lösung.
Habe mit dem Arduino und dem Temperatursensor DS18B20 mal zwei Stunden die Temperatur mit einem Java Programm gemessen.
Die erzeugte Logdatei hat folgenden Aufbau:
[Messzeitpunkt] [Gemessener Wert in Grad/Celsius]
Z.b.:
2013.06.22_17:56:18 29.25
2013.06.22_17:56:23 29.25
2013.06.22_17:56:29 29.25
# ...
2013.06.22_20:15:00 27.56
2013.06.22_20:15:06 27.56
2013.06.22_20:15:12 27.56
Folgende gnuplot Befehle sind nötig (guter Überblick zu gnuplot):
set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [27:30] # die y-Achse geht von:bis
set terminal png
set output "temp-verlauf.png"
plot "log-temp.txt" using 1:2 title "Sensor DS18B20" with lines
Um folgendes Ergebnis zu erhalten. Der peek am Anfang, ist entstanden, weil ich den Sensor kurz angefasst haben.
Mit gnuplot erstellt Grafik zum Temperaturverlauf eines DS18B20
Habe heute einen One-Wire DS18B20 Temperatursensor erhalten und ihn mit dem Arduino Nano verbunden. Der Messbereich des Sensors beträgt von -55°C bis +125°C bei ± 0,5°C Genauigkeit.
Das Programm (8038 byte) gibt zuerst die eindeutige ID des Sensors aus, (28-A2-9D-8A-04-00-00-2B) und dann jede Sekunde den neuen Messwert:
/* TWTemp Version 1.0 vom 14.06.2013
8038 bytes
Thomas Wenzlaff http://www.wenzlaff.de
Temperature Sensor DS18B20 an Digitalen Port Pin 2 wie folgt verbunden Links=Masse, Mitte=Data, Rechts=+5V, 3300 to 4700 Ohm Widerstand von +5V nach Data.
Es wird erst die Adresse des 1-Wire-Device ausgegeben und dann wird die Temperaturmessung gestartet.
/* TWBlink Beschreibung: Die rote Leuchtdiode (LED) auf dem Arduino Board blinkt alle 10 Sekunden kurz für 50ms auf. Dieses Beispiel ist Freeware und basiert auf dem Beispielprogramm Blink. Thomas Wenzlaff 12.05.2013 Größe des compilierten Binary: 1108 Byte */
// An Pin 13 ist eine LED angeschlossen, die auf den meisten Arduino Boards vorhanden ist constint LED = 13;
// Die setup Methode wird nur einmal ausgeführt und bei reset voidsetup() { // Digitaler PIN mit der LED ist ein Ausgang pinMode(LED, OUTPUT);
}
// Die Endlosschleife voidloop() { digitalWrite(LED, HIGH); // LED anschalten delay(50); // 50 ms warten digitalWrite(LED, LOW); // LED ausschalten delay(10000); // 10 Sekunden warten
}