Arduino vejr station

Jeg kan bruge dagevis på at browse sider som f.eks hackaday.com hvor at der tit og ofte nævnes et programmerbart board kaldt Arduino. En dag hvor jeg sad og kiggede på let-elektroniks hjemmeside der sælger disse arduino boards (og meget andet) herhjemme opdagede jeg at de skulle afholde et kursus i sammenarbejde med Aalborg Tekniske Skole.

Straks meldte lysten til at lave ting der blinker og lyder som et gammelt modem sig, og jeg skulle knapt nok nævne det for min kammerat inden det gik afsted.

Første projekt, et trafiklys der forsøger at få flest mulige trafikanter til at køre sammen yey! Nok om det, i virkeligheden handler det om at skrive tekst på et display, og i og med det kan være svært at finde på noget fornuftigt at skrive hvorfor så ikke vejret?, så har man i hvert fald altid noget at snakke om :)

Først en stump arduino kode, der simpelt set tager input fra et serial device og skriver tegnene på lcd displayet:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(10, 11, 12, 13, 14, 15, 16);

void setup() {
	// set up the LCD's number of rows and columns:
	lcd.begin(16, 2);
	// Print a message to the LCD.
	lcd.print("Gimme some chars");
	//begin serial communication
	Serial.begin(9600);
}

void loop()
{
	if (Serial.available() > 0)
	{
		//clear display and set cursor at the start
		lcd.setCursor(0,0);
		lcd.clear();
		while(Serial.available() > 0)
		{
			char incomming = Serial.read();

			//newline char, changes line of display
			if(incomming == 0xA)
			{
				lcd.setCursor(0,1);
			}
			else
			{
				Serial.println(incomming);
				lcd.print(incomming);
			}
		}
	}
}

Hurra for Arduino’s SDK, det er næsten lidt for let at have med at gøre (selv når man som mig er vandt til højniveau sprog som PHP og JAVA). Når sketchen er uploaded til arduino boardet, vil man fra eksempelvis ubuntu kunne echo’e tekst ned i sin /dev/ttyUSB0 (eller hvilket nummer den måtte ha fået) og displayet vil vise chars’ne. (Vel og mærke, kun chars fra ascii tabellen). Men intet projekt uden lige at smutte over hvor hegnet er lavest, så koden til at fodre displayet med vejr informationer er skrevet i PHP :)

Selve dataerne er hentes fra google’s “secret weather service“, som jeg i øvrigt heller ikke har kunnet finde nogen dokumentation på fra googles side af, men den virker og spytter simpelt XML ud.

Her er eksempelvis vejret for aalborg, ved at requeste url’en

http://www.google.com/ig/api?weather=Aalborg

Dejlig nemt! Så er det bare at hive SimpleXML frem og hive de data man gerne vil vise :)

<?
file_put_contents("/dev/ttyUSB0", "Loading data..");

$weather = array();
$weather[] = simplexml_load_file("http://www.google.com/ig/api?weather=Aarhus");
$weather[] = simplexml_load_file("http://www.google.com/ig/api?weather=Aalborg");
$weather[] = simplexml_load_file("http://www.google.com/ig/api?weather=Randers");
$weather[] = simplexml_load_file("http://www.google.com/ig/api?weather=Hobro");

while(true)
{
	foreach($weather as $by)
	{
		$data = array();
		$name = (string)$by->weather->forecast_information->city['data'];
		$data[] = (string)$by->weather->current_conditions->temp_c['data'] . "C ";
		$data[] = (string)$by->weather->current_conditions->condition['data'];
		$data[] = (string)$by->weather->current_conditions->wind_condition['data'];
		$data[] = (string)$by->weather->current_conditions->humidity['data'];
		foreach($data as $display)
		{
			$u = "$name\n".$display;
			file_put_contents("/dev/ttyUSB0", $u);
			sleep(2);
		}
	}
}

Færdige resultat (og tilmed i super sløret highdef):

This entry was posted in Playground and tagged , . Bookmark the permalink.

One Response to Arduino vejr station

  1. Ja, formentlig sa det er

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>