Arduino al pomodoro

Per trasformare il mio Arduino in un conta-pomodori ho seguito le facili istruzioni di Mike Stok, grazie al quale ho scoperto l’esistenza di  Fritzing, un tool di prototipazione dedicato al mondo Arduino che mi permette di disegnare queste cose:

Per adesso mi limito ad accendere il led rosso per 25 minuti alla pressione del bottone, con lampeggio nel minuto finale e passaggio al giallo per i 5 minuti successivi; quindi il led verde.

Prossimi passi: regolare automaticamente l’intansità del led in base alla luminosità dell’ambiente. Il codice l’ho messo dopo il salto. Leggi tutto “Arduino al pomodoro”

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
  }
}