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

I semafori di Lugano

Il futuro è intorno a noi, ma da un’altra parte. Riprendo il discorso sul thingsourcing per segnalare che il progetto dei semafori di Lugano che si parlano tra di loro è iniziato nel settembre 2007 ed è descritto in dettaglio nel rapporto GIT – Gestione Informatizzata del traffico, di affascinante lettura. Quote of note:

I punti cardine del nuovo sistema di regolazione semaforica del Polo luganese sono i seguenti:

  • sarà costruito sulla base della nuova rete stradale del Luganese (piano della viabilità);
  • lungo tutta la corona del polo vengono definite delle porte di ingresso regolate con impianti semaforici;
  • tutti i semafori appartenenti alla rete stradale del polo saranno collegati e dovranno interagire tra di loro;
  • dovrà offrire una gestione coordinata dei diversi modi di trasporto senza trascurare gli utenti più vulnerabili (pedoni e ciclisti);
  • dovrà essere flessibile per adattamenti futuri effettuati direttamente dal gestore degli impianti sulla base di modifiche alla rete viaria o alle mutate condizioni del traffico;
  • dovrà offrire standard industriali e tecnologici indipendenti dal costruttore;
  • permetterà l’effettuazione di conteggi e censimenti del traffico direttamente dalla centrale;
  • permetterà una distinzione e totale integrazione tra fornitura hardware (apparecchi di comando, calcolatore) e programmazione (tramite parametrizzazione e linguaggi standard);
  • dovrà poter essere aggiornabile seguendo l’evoluzione tecnologica;
  • dovrà offrire una integrazione della gestione dei diversi mezzi di trasporto e sistemi informativi;
  • dovrà poter essere gestito in continuazione da un ufficio/ente apposito sovracomunale o con competenza tale;
  • dovrà garantire una gestione semplificata sia dal lato operativo che concettuale.

Inoltre il funzionamento del sistema dovrà tener conto dei seguenti aspetti:

  • la programmazione dei singoli nodi dovrà essere in grado di “leggere” il traffico presente e determinare, nell’ambito di parametri minimi e massimi prefissati, l’assegnazione dei verdi;  la microregolazione avviene quindi in funzione del numero di veicoli che impegnano l’incrocio e delle eventuali code presenti;
  •  la gestione tra i diversi incroci (smaltimento code, coordinamento) potrà avvenire con un dialogo diretto tra i regolatori dei nodi interessati o tramite un algoritmo gestito dalla centrale;
  • compito della centrale sarà anche di evitare un eccessivo afflusso di traffico dall’esterno oltre le porte (funzione di dosaggio e eliminazione di code interne) favorendo un deflusso rapido dall’interno;
  • dovrà essere possibile la rilevazione dei veicoli tramite sistemi video (su strade rettilinee è possibile rilevare la lunghezza di code fino a 100/150 metri);
  • i protocolli di nuova generazione (OCIT-Open communication interface for road traffic control systems) dovranno essere adottati, i linguaggi di programmazione scelti in funzione delle esigenze tra quanto presente sul mercato o costruiti ad hoc e comunque indipendenti dalle scelte hardware;
  • la gestione del trasporto pubblico dovrà essere effettuata con sistemi via radio (boe di posizionamento, GPS ecc.) e essere in grado di elaborare priorità in funzione del tipo di corsa e del rispetto dell’orario (anticipo/ritardo);
  • dovrà essere possibile l’uso di semafori (lanterne) a LED abbassando così i costi di manutenzione e gestione.

Riassumendo, la nuova regolazione semaforica del Luganese dovrà:

  • sentire il traffico;
  • elaborare una strategia;
  • intervenire in modo coordinato e rapido;
  • produrre degli effetti misurabili.

Appunti dal #RomagnaCamp

E’  ormai tradizione che io faccia un intervento al RomagnaCamp senza PowerPoint, a piedi nudi e con il costume ancora bagnato. Non riesco a immaginare niente di più informale e rilassato di così: è il bello di un barcamp in spiaggia.

Nei pochi minuti a disposizione ho chiesto alla platea se qualcuno aveva idee sul futuro di internet, e a che punto avremmo potuto finalmente dichiarare matura questa tecnologia.

Riprendendo l’esempio fatto prima di me da Lorenzo Viscanti sul crowdsourcing e sull’aggregazione dei dati provenienti dai checkin di Foursquare, ho proposto che il punto debole oggi è la troppa manualità richiesta al singolo utente, e ho ipotizzato un futuro in cui gli oggetti siano tutti connessi alla rete e comunichino autonomamente tra di loro, permettendoci poi di estrarre significato “live” dai dati aggregati. Per dirla con uno slogan:

dal crowdsourcing al thingsourcing.

Chiacchierando con Matteo (Bloggo Intestinale) durante il viaggio di ritorno, mi ha fatto il calzante esempio dei semafori di Lugano che hanno passato varie fasi di evoluzione della temporizzazione:

  • fissa;
  • variabile a seconda delle ore della giornata;
  • dipendente dai sensori di traffico dell’incrocio.

C’è già un progetto per fare in modo che i semafori siano tutti collegati in tempo reale a una centrale che non solo reagisce alle congestioni ma le previene regolando i flussi di tutta la rete stradale. Il passo successivo potrebbe essere la disseminazione di queste informazioni in diretta ai navigatori dei singoli veicoli, e l’inglobamento dei dati di traffico dei singoli veicoli nel programma di gestione dei flussi.

Questo è solo uno dei tantissimi esempi possibili del giorno in cui ogni singolo oggetto sarà anche un server web collegato a internet.

Durante la discussione è stata sollevata la ragionevole obiezione: come preservare la privacy in questo nuovo mondo? Al momento non ho la minima idea, vedremo. Ma sospetto che se davvero stiamo andando verso il villaggio globale, dobbiamo in qualche modo venire a patti con l’idea che nel villaggio tutti sanno tutto di tutti. Potrebbe anche darsi che l’idea di privacy sia un artefatto della società industriale di massa, e che questa idea vada in qualche modo superata.

Chiudo ringraziando pubblicamente tutti quelli che c’erano e che hanno avuto la gentilezza di fare due chiacchiere con me, ma devo salutare con particolare affetto e riconoscenza due donne speciali: Elena e Alessandra. Al prossimo RomagnaCamp.