This is an arduino project to visualise ocean data wave height/swell period & local wind from any surfing location on magicseaweed
/*
Simple Client Parsing sketch
Arduino 1.0 version
*/
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
Servo swell;
Servo period;
Servo wind;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char serverName[] = "festivalnet.co.uk";
EthernetClient client;
int swellval,periodval;
String readString = String(3);
void setup()
{
Serial.begin(9600);
swell.attach(6);
period.attach(7);
wind.attach(8);
if(Ethernet.begin(mac) == 0) { // start ethernet using mac & IP address
while(true) // no point in carrying on, so stay in endless loop:
;
}
delay(2000); // give the Ethernet shield 2 second to initialize
}
void loop()
{
client.println("Refresh: 86400");
if (client.connect(serverName, 80)>0) {
client.println("GET http://magicseaweed.com/syndicate/rss/index.php?id=1&unit=uk ");//If a connection is made get in the desired page
//client.println("GET http://festivalnet.co.uk/surf.rss");
}
if (client.connected()) {
if(client.find("Swell :: ")){//look for first rating and store the result to day1
swellval = client.parseInt();
swellval = map(swellval,0,12,0,180);
swell.write(swellval);
}
if(client.find("@ "))
{//look for second rating and store the result to day2
periodval = client.parseInt();
periodval = map(periodval,0,14,0,180);
period.write(periodval);
}
if(client.find("mph"))
{//look for third rating and store the result to day3
char c = client.read();
if(readString.length()<3)
{
readString.concat(c);
}
if (readString.indexOf("NNE")>=0)
{
wind.writeMicroseconds(1062);
}
if (readString.indexOf("NE")>=0)
{
wind.writeMicroseconds(1125);
}
if (readString.indexOf("ENE")>=0)
{
wind.writeMicroseconds(1187);
}
if (readString.indexOf("E")>=0)
{
wind.writeMicroseconds(1250);
}
if (readString.indexOf("ESE")>=0)
{
wind.writeMicroseconds(1312);
}
if (readString.indexOf("SE")>=0)
{
wind.writeMicroseconds(1375);
}
if (readString.indexOf("SSE")>=0)
{
wind.writeMicroseconds(1437);
}
if (readString.indexOf("S")>=0)
{
wind.writeMicroseconds(1500);
}
if (readString.indexOf("SSW")>=0)
{
wind.writeMicroseconds(1562);
}
if (readString.indexOf("SW")>=0)
{
wind.writeMicroseconds(1625);
}
if (readString.indexOf("WSW")>=0)
{
wind.writeMicroseconds(1687);
}
if (readString.indexOf("W")>=0)
{
wind.writeMicroseconds(1750);
}
if (readString.indexOf("WNW")>=0)
{
wind.writeMicroseconds(1812);
}
if (readString.indexOf("NW")>=0)
{
wind.writeMicroseconds(1875);
}
if (readString.indexOf("NNW")>=0)
{
wind.writeMicroseconds(1937);
}
if (readString.indexOf("N")>=0)
{
wind.writeMicroseconds(2000);
}
}
else {
client.stop();//else disconnect
delay(1000);
}
}else{
digitalWrite(13,HIGH);
}
client.stop();//Disconnect
}
Here is the illustrator file for the gauges that im planning to be laser engraved https://www.dropbox.com/s/kqlo390j8pi5dgo/guages.ai?dl=0
To test the design I printed the dials onto t-shirt transfer paper and ironed them on to some 18mm MDF that i had lying around.
I also added a LED to blink once optimum surfing conditions are happening
Rear view of the mdf showing cutouts for the 3 x Tower Pro micro 9g servos, the wind direction indicator is a FSR90 continuous servo to allow 360 rotation.
It is still in development and ill update progress here
https://github.com/Make-Magazine/DataDialDisplay






