Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Auf der Froscon am letzten Wochenende habe ich mir „Praxiseinstieg Arduino“ von Thomas Brühlmann gekauft. Mit knapp 25 Euro dürfte es noch in den taschengeld-tauglichen Bereich fallen. Es gefällt mir sehr gut, ist aber meines Erachtens nichts für Leute, die noch nie etwas mit Elektonik zu tun hatten. An einigen Stellen fallen halt Fachbegriffe, die für mich sehr unbekannt sind und zu denen ich gern etwas mehr Erklärung gehabt hätte.
Davon abgesehen zeigt das Buch eine Menge interessanter Beispiele und Ideen, von denen ich einige in der nächsten Zeit umsetzen werde.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Mit dem LoL Shield gibt es eine einfache Möglichkeit, per Arduino ein LED Array zu steuern. Ich habe mein Shield am letzten Wochenende auf der Froscon (http://www.froscon.de) gekauft und unter sachkundiger Hilfe die fast 130 LEDs aufgelötet. Die Vorteile des Shields sind die schiere Masse an ansteuerbaren LEDs sowie die Tatsache, dass außer den LEDs selbst keine weiteren Bauteile zum Einsatz kommen.
Auf der Homepage des Schöpfers http://jimmieprodgers.com/kits/lolshield Beispiele für die Ansteuerung des Shields, hier zwei Beispiele (aufgenommen mit einer Canon 7D):
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Mit iProcessing gibt es jetzt ein Framework, das die Entwicklung von iPhone Anwendungen in Processing, der Sprache, in der auch der Arduino programmiert wird, ermöglicht.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Durch Zufall habe ich eben eine geniale Visualisierung von Geschichtsdaten gefunden, die mit Processing (Arduino lässt grüßen) umgesetzt wurde. Gezeigt wird der Niedergang der Weltreiche Großbritannien, Spanien, Portugal und Frankreich im 19. und 20. Jahrhundert.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Da die Temperatur-Daten jetzt in der Datenbank gespeichert werden, müssen wir sie auch auslesen:
<?phpecho"<h1>Temperaturen im Wohnzimmer</h1>";$link=mysql_connect("<server>",<user>", "<password>") or
die("Keine Verbindung möglich:" . mysql_error());
mysql_select_db("<Database>") or die("Auswahl der Datenbank fehlgeschlagen");
// Die letzten 10 Werte
$query = "SELECT * FROM temperature ORDER BY TIMESTAMP DESC LIMIT 1,10";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen:" . mysql_error());
while($row = mysql_fetch_object($result))
{
echo $row->Timestamp ."".$row->Temperature."<br/>";
}
mysql_close($link);
?>
<?php
echo "<h1>Temperaturen im Wohnzimmer</h1>";
$link = mysql_connect("<server>", <user>", "<password>") or
die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("<Database>") or die("Auswahl der Datenbank fehlgeschlagen");
// Die letzten 10 Werte
$query = "SELECT * FROM temperature ORDER BY TIMESTAMP DESC LIMIT 1,10";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
while($row = mysql_fetch_object($result))
{
echo $row->Timestamp ." ".$row->Temperature."<br/>";
}
mysql_close($link);
?>
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Von Fritzing ist schon vor einem knappen Monat Version 0.3.8. alpha erschienen. Mit Fritzing lassen sich elektronische Schaltungen im Arduino-Umfeld sehr gut und einfach darstellen.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Mein Arduiono hat bisher nur die Temperatur meines Wohnzimmers in einer Textdatei auf dem Server gespeichert, für Auswertungszwecke ist eine Datenbank natürlich besser. Daher hab ich den PHP-Code so erweitert, dass er eine der MySQL-Datenbanken meines Providers nutzt. Hier mal der Code für das setTemperature-Skript:
<?phpheader('Content-type: text/plain');echodate("d.m.Y-H:i:s")." Temperatur= ".$_GET['t'];$link=mysql_connect("<serverhost>","<username>","<password>") or die("Keine Verbindung möglich: ".mysql_error());mysql_select_db("<Datenbank>") or die("Auswahl der Datenbank fehlgeschlagen");$query="INSERT INTO temperature(`temperature`) values(".$_GET['t'].")";$result=mysql_query($query) or die("Anfrage fehlgeschlagen: ".mysql_error());mysql_close($link);?>
<?php
header('Content-type: text/plain');
echo date("d.m.Y-H:i:s") . " Temperatur= " . $_GET['t'];
$link = mysql_connect("<serverhost>", "<username>", "<password>") or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("<Datenbank>") or die("Auswahl der Datenbank fehlgeschlagen");
$query = "INSERT INTO temperature(`temperature`) values(" . $_GET['t'] . ")";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
mysql_close($link);
?>
Im nächsten Schritt baue ich noch eine passende Auswertung, die den Temperaturverlauf auch grafisch darstellt.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Mit der pChart (http://pchart.sourceforge.net) Bibliothek habe ich eine einfache Möglichkeit gefunden, die Temperaturen grafisch darzustellen. Hier ein erstes Beispiel, anhand einer Vorlage aus der pChart Bibliothek. War recht einfach abzuändern, hat mich nur wenige Minuten gekostet, die Anpassungen vorzunehmen.
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
Ausgehend von Mats Vanselows getTemperatur() Funktion (http://www.mats-vanselow.de/2009/03/25/temperaturen-messen-mit-arduino und einem Beispiel aus der Ethernet Library habe ich einen kleinen Client geschrieben, der alle 10 Minuten die Temperatur aus einem LM35 Sensor ausliest und per HTTP-Request an ein PHP-Skript auf meiner Homepage schickt. Da der LM35 nicht genau kalibriert ist und wohl sowieso maximal auf ein halbes Grad genau ist, habe ich mittels zwei anderer Thermometer (die wiederum selbst voneinander abweichen) die ungefähre Abweichung des LM35 bestimmt und ziehe die 2° Celsius einfach ab.
Hier der entsprechende Processing-Code:
#include <Ethernet.h>
bool connected = false;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 99 };
// IP-Adresse des Webservers
byte serverIP[] = {111,111,111,111};
Client client(serverIP,80);
int inPin = 5; // input pin 1
float inValTotal;
int i;
int runs = 5; // Anzahl der Durchläufe
int waittime = 20; // ms zwischen Durchläufen
int delayVal = 1000; // Intervall für Serial Output
float getTemperatur() {
inValTotal = 0;
for(i = 0;i<runs;i++){
inValTotal = inValTotal + analogRead(inPin);
delay(waittime);
}
inValTotal = inValTotal / runs / 2;
return(inValTotal-2);
}
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
Serial.println("setup done");
}
void loop()
{
Serial.println("Entered loop");
if (!connected){
Serial.println("Not connected");
if (client.connect()){
connected = true;
Serial.println("Connected to Server");
Serial.println("Sending request to server");
client.print("GET /storetemp.php?t=");
client.print(getTemperatur());
client.println(" HTTP/1.1");
client.println("Host: www.mydomain.com");
client.println("User-Agent: Arduino");
client.println("Accept: text/html");
client.println();
} else {
Serial.println("Cannot connect to server");
}
}
else {
delay(500);
while (client.connected() && client.available()) {
char c = client.read();
Serial.print(c);
}
Serial.println();
client.stop();
connected=false;
}
Serial.println("Done now");
delay(600000);
}
#include <Ethernet.h>
bool connected = false;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 99 };
// IP-Adresse des Webservers
byte serverIP[] = {111,111,111,111};
Client client(serverIP,80);
int inPin = 5; // input pin 1
float inValTotal;
int i;
int runs = 5; // Anzahl der Durchläufe
int waittime = 20; // ms zwischen Durchläufen
int delayVal = 1000; // Intervall für Serial Output
float getTemperatur() {
inValTotal = 0;
for(i = 0;i<runs;i++){
inValTotal = inValTotal + analogRead(inPin);
delay(waittime);
}
inValTotal = inValTotal / runs / 2;
return(inValTotal-2);
}
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
Serial.println("setup done");
}
void loop()
{
Serial.println("Entered loop");
if (!connected){
Serial.println("Not connected");
if (client.connect()){
connected = true;
Serial.println("Connected to Server");
Serial.println("Sending request to server");
client.print("GET /storetemp.php?t=");
client.print(getTemperatur());
client.println(" HTTP/1.1");
client.println("Host: www.mydomain.com");
client.println("User-Agent: Arduino");
client.println("Accept: text/html");
client.println();
} else {
Serial.println("Cannot connect to server");
}
}
else {
delay(500);
while (client.connected() && client.available()) {
char c = client.read();
Serial.print(c);
}
Serial.println();
client.stop();
connected=false;
}
Serial.println("Done now");
delay(600000);
}
Hier der Code des PHP-Skripts, es schickt als Antwort Zeit und erhaltene Temperatur zurück zum Arduino und speichert die Temperatur mit Zeitstempel in einer Textdatei. Im nächsten Schritt werde ich wohl sicher eine MySQL-Datenbank hintersetzen, für den Moment reicht es aber völlig aus.
<?phpheader('Content-type: text/plain');echodate("d.m.Y-H:i:s")." Temperatur= ".$_GET['t'];$myFile="testFile.txt";$fh=fopen($myFile,'a') or die("can't open file");fwrite($fh,date("d.m.Y-H:i:s")." Temperatur= ".$_GET['t']."\n");fclose($fh);?>
</php>
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.