La mia lampadina twitta

“Tutto ciò che è alimentato elettricamente è anche connesso a internet.”

(Tom Igoe)

La lampada del mio comodino twitta automaticamente i suoi cambiamenti di stato, grazie a

  • Arduino 2009
  • Ethernet Shield
  • Sensore luce

Bisognarà che le crei un account dedicato su twitter. Se sei interessato al codice, è qui sotto.

Essendo una prova, tengo aperta la porta seriale per controllare dalla consolle quel che succede, ma in produzione i vari Serial.print vengono tolti.

Se trovi errori o difetti e vuoi segnalarmeli, te ne sarò grato.

/* 
Twitter Light Client 0.2  
created on jan 28 2012
modified on jan 30 2012
by Gaspar Torriero
with many thanks to the Arduino community
at http://arduino.cc/en/Tutorial/HomePage
*/

#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>

boolean oldStatus = 0;
boolean newStatus = 0;
int tPin = 0; // Temperature sensor pin
int lPin = 5; // Light sensor pin
float temp = 0.0; // Temperature in C°
int luce = 0; // light in Lux
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, XXX, XXX }; // IP address of your Arduino
byte gateway[] = { 
  192, 168, XXX, XXX }; // IP address of your router
byte subnet[] = { 
  255, 255, 255, 0 };
Twitter twitter("XXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); // Your Twitter API code
String stringOne="La luce sul comodino è stata spenta";
String stringTwo="La luce sul comodino è stata accesa";
char msg[140];

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  // Serial.begin(9600);
    luce = (analogRead(lPin) * 10000.0) / 1024.0; //Conversione voltaggio sensore in Lux
  if(luce < 201) {
    oldStatus=0;
    }
  else if(luce > 200) {
    oldStatus=1;
  }
}
void loop() {
  delay(50000);
  Serial.print(oldStatus);
  Serial.print(newStatus);
  Serial.println();
  Serial.println(luce);
  temp = ( 5.0 * analogRead(tPin) * 100.0) / 1024.0; // Conversione voltaggio sensore in temperatura
  luce = (analogRead(lPin) * 10000.0) / 1024.0; //Conversione voltaggio sensore in Lux
  if(luce < 201) {
    newStatus=0;
    stringOne.toCharArray(msg, 140);
  }
  else if(luce > 200) {
    newStatus=1;
    stringTwo.toCharArray(msg, 140);
  }
  if(newStatus != oldStatus) {
      Serial.println("connecting ...");
      if (twitter.post(msg)) {
        int status = twitter.wait(&Serial);
        if (status == 200) {
          Serial.println("OK.");
        } 
        else {
          Serial.print("failed : code ");
          Serial.println(status);
        }
      } 
      else {
        Serial.println("connection failed.");
      }
    delay(10000);
    oldStatus = newStatus;
    Serial.print(oldStatus);
    Serial.print(newStatus);
    Serial.println();
    Serial.println(luce);
  }
 }

Arduino: baby you can light my fire

Il mio Arduino è raggiungibile via web e adesso ti permette di accendere o spegnere la luce del mio comodino. Al pomeriggio batte il sole e quindi potresti non accorgerti della differenza.

Il codice  funziona ma non ancora bene, sospetto qualche problema di logica: se accedo dal PC accende e subito spegne; se accedo da telefono ci vogliono due clic per spegnere. Cosa sarà?

Dopo il salto, metto il codice che terrò aggiornato all’ultima versione. Se sei capace e hai qualche suggerimento da darmi, te ne sarò immensamente grato.

Leggi tutto “Arduino: baby you can light my fire”

Domotica spicciola con Arduino

Stimolato da questo incontro, ho preso qualche componente da Robot Italy (bravi e veloci), ho preso un DNS dinamico gratuito, e mi sono fatto la domotica più semplice e veloce possibile: il server della temperatura e della luce.

Il codice (che terrò aggiornato man mano che lo modifico):

/*
  Web Server Temp
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 modified 15 jan 2012
 by Gaspar Torriero
 
 */

#include <SPI.h>
#include <Ethernet.h>

int pagine = 0;
int inPin = 0; // Pin di lettura
int temp = 0; // variabile temperatura
int luce = 0; //variabile luce

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,30, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
  // start the Ethernet connection and the server:
  pinMode(9, OUTPUT);  
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  digitalWrite(9, LOW);    // set the LED off
  temp = ( 5.0 * analogRead(inPin) * 100.0) / 1024.0; // Conversione voltaggio sensore in temperatura
  luce = (analogRead(5) * 10000.0) / 1024.0; //Conversione voltaggio sensore in Lux
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<html><head><title>Gasparduino Web Server Ver. 0.3</title><meta http-equiv='Content-Type' content='text/html; charset=utf-8' ></head><body>");

          // output the value of analog input pins
          client.print("<h1>Gaspar Torriero gone Arduino</h1><hr />");
          client.println("<br />");
          client.print("Temperatura corrente: ");
          client.print(temp);
          client.print("°C");
          client.println("<br />");
          client.print("La luce è ");
          if (luce > 300) {
            client.print("accesa.");
          }
          else {
            client.print("spenta.");
          }
          client.println("<br />");
          pagine=pagine+1;
          client.print("Visite dall'ultimo riavvio: ");
          client.print(pagine);
          client.println("</body></html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    digitalWrite(9, HIGH);   // set the LED on
    delay(300);              // wait for a sec
    digitalWrite(9, LOW);    // set the LED off
    delay(300);              // wait for a sec
  }
}

Arduino a Lugano

Alle 18:00 di oggi presso la SUPSI di Canobbio si terrà un incontro con Tom Igoe dal titolo Quando il physical computing incontra il design e le arti multimediali. All’incontro sarà presente anche Massimo Banzi.

Mi chiedo se riuscitò a farmi autografare l’arduino.

 

Aggiornamento:

La presentazione di Tom Igoe si è incentrata sugli affascinanti lavori dei suoi studenti presso l’ITP. Quote of note:

if it is powered electrically, it has an internet connection by default

Quando l’ha detto, volevo abbracciarlo. Tra parentesi, il mio arduino è raggiungibile qui.