Benvenuto in Moddingstudio.com.
Pagina 1 di 2 12 UltimaUltima

  1. #1
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy

    Primo Esperimento con Arduino YUN


    Introduzione:
    È una nuova serie di Board che combina le funzionalità e la semplicità di programmazione dei multicontrollori della serie AtMega con un vero e proprio Processore [Solo gli utenti registrati e attivati possono vedere i link ] Atheros AR9331.
    Infatti Arduino YUN in realtà è un Arduino Leonardo accoppiato ad un vero e proprio mini pc che lavora con una versione modificata di [Solo gli utenti registrati e attivati possono vedere i link ] chiamata [Solo gli utenti registrati e attivati possono vedere i link ] che dà finalmente la possibilità di gestire la board tramite internet. Questo significa che abbiamo la possibilità di collegarlo ed interagire con lui tramite rete. Lo YUN può essere collegato sia via ethernet che tramite modulo wifi.
    Avendo ora a disposizione un vero e proprio processore nasce la necessità di dover gestire il sistema oltre ad una diversa mole di dati. Per questo è stato messo a disposizione sullo YUN uno slot per microSD e una porta USB Host.

    I due sistemi (Soc ARM e microcontroller Atmega) comunicano tra loro tramite un Bridge usb, quindi si ha la possibilità di accedere alle periferiche e risorse da entrambe le parti.
    Con questa soluzione si aggira il problema che affliggeva gli Shield Ethernet dei vecchi Arduino, infatti abbiamo a disposizione un vero e proprio miniserver che interagisce con l' "Arduino Leonardo" integrato.

    Tralascio particolari e possibilità a livello di progettazione: voglio farvi vedere il mio primo esperimento fatto: la lettura della temperatura e dell'umidità in casa tramite arduino, ed il tutto portato su un grafico consultabile via internet da qualsiasi device.
    Chi mi segue su G+ ha già visto la prima immagine del risultato.

    La prima cosa da fare è configurare la rete Wireless (se si intende utilizzarla al posto del collegamento ethernet).
    Per fare ciò sarà inizialmente necessario configurare Ardunino Yun (dovremo collegarlo alla rete tramite il cavo ethernet) e interagire tramite browser con l'interfaccia [Solo gli utenti registrati e attivati possono vedere i link ], che gestisce linino.


    Una volta collegato l'Arduino YUN alla rete, digitate sul PC l'indirizzo "http://arduino.local" o l'indirizzo ip.
    Bisognerà inserire la password per avere la schermata di gestione dei moduli rete, ora basta cliccare su configure per settare i parametri base.
    Nel mio esperimento ho utilizzato le REST API, una serie di funzioni per comunicare tra i due sistemi, quindi è consigliato disattivare la protezione di autentificazione.
    Se invece intendete gestirlo anche via internet per evitare eventuali comandi di reset è meglio attivarla.
    Ora dobbiamo aggiungere alcuni pacchetti linux, anche se esiste una FUNZIONE sull'interfaccia Luci. Per comodità visto che utilizzo Linux ho usato un client ssh. Su Windows potete usare [Solo gli utenti registrati e attivati possono vedere i link ].

    Intendo utilizzare il server web uhttpd con l'interprete php, quindi basta digitare:
    Codice:
    opkg update
    opkg install php5 php5-cgi
    ora dobbiamo modificare il file di configurazione del server uhttpd per rendere attivo l'interprete
    Codice:
    uci set uhttpd.main.interpreter=".php=/usr/bin/php-cgi"
    uci set uhttpd.main.index_page="index.html index.htm default.html default.htm index.php"
    uci commit uhttpd
    sed -i 's,doc_root.*,doc_root = "",g' /etc/php.ini
    sed -i 's,;short_open_tag = Off,short_open_tag = On,g' /etc/php.ini
    ed ora basta riavviare il server web digitando:
    Codice:
    /etc/init.d/uhttpd restart
    Per problemi di memora ho aggiunto una microsd ed ho creato un collegamento con la cartella pubblica "/www/php"
    Codice:
    ln -s /mnt/sda1 /www/php
    Ora per avere accesso alla scheda sd dal pc in rete ho installato un server sftpd digitando:
    Codice:
    opkg install openssh-sftp-server
    Per programmare l'arduino si deve scaricare il nuovo IDE 1.5.5 che trovate nell'area [Solo gli utenti registrati e attivati possono vedere i link ] di Moddingstudio
    Ricordatevi di settare la giusta board e nel caso di windows e mac di installare i driver, fatto questo siamo pronti per il primo progetto.
    Come già detto, l'esperimento consiste nella rilevazione della temperatura e dell'umidità, visualizzandola poi via web.
    Arduino YUN non ha un sensore di umidità e temperatura integrato, quindi utilizzeremo il componente DHT11 (l'avevo già usato anche per l'automazione del mio terrario).
    Ecco lo schema per il montaggio:

    Materiale utilizzato:
    • Breadboard
    • Sensore DHT11
    • Resistenza 5K

    Realizzato il circuito si passa alla programmazione dell'AtMega.
    Prima di tutto aggiungiamo le librerie necessarie allo sketch:
    Codice:
    #include "DHT.h"
    Richiama le funzioni per la comunicazione con il sensore DHT11
    Codice:
    #include
    Richiama le funzioni per comunicare con linino
    Codice:
    #include 
    #include
    Richiama le funzioni per la creazione di un server per la visualizzazione dei dati raccolti.
    Codice:
    #define DHTPIN 2
    #define DHTTYPE DHT11
    Definisce il pin di arduino con cui comunica il sensore e il tipo di sensore, poi inizializzo le variabili globali che servono per il server e il sensore:
    Codice:
    YunServer server;
    DHT dht(DHTPIN, DHTTYPE);
    int h, t;
    La variabile "h" servirà per memorizzare la lettura dell'umidità e "t" per la temperatura, ora passiamo all'inizializzazione dell'hardware che ci serve:
    Codice:
    void setup() {
      Bridge.begin();
      server.listenOnLocalhost();
      server.begin();
      dht.begin();
    }
    Per semplificarmi la lettura ed eventuale correttura del codice mi creo delle funzioni.
    Codice:
    void process(YunClient client) {
      
      String command = client.readStringUntil('\r');
    
      if (command == "termo") {
        temp(client);
      }
    
      if (command == "idro") {
        idro(client);
      }
    }
    Avendo attivato le API ed inizializzato il server possiamo inviare delle richieste specifiche con il browser ([Solo gli utenti registrati e attivati possono vedere i link ]) che andremo a scrivere nella variabile "command", e tramite dei semplici controlli posso richiamare delle funzioni che mi scrivono sul browser il valore delle rilevazioni.
    Codice:
    void temp(YunClient client) {
      if (isnan(t)) {
        client.print(F("Error"));
      } else {
        client.print(t);
      }
    }
    
    void idro(YunClient client) {
        if (isnan(t)) {
          client.print(F("Error"));
        } else {
          client.print(h);
        }
    }
    Ora non resta che scrivere il ciclo principale "loop":
    Codice:
    void loop() {
    
      h = dht.readHumidity();
      t = dht.readTemperature();
      YunClient client = server.accept();
      if (client) {
        process(client);
        client.stop();
      }
      
      delay(50);
    }
    In pratica effettua la rilevazione della temperatura e dell'umidità ogni 50 ms e sta in attesa di una richiesta da parte di un browser per richiamare la funzione che processa il comando.
    Scritto il nostro sketch possiamo compilarlo ed inviarlo su Arduino YUN.
    Viste le potenzialità di Linino e prendendo le API Google per la creazione di grafici possiamo creare un programma che legge i valori di temperatura e umidità per poi scriverli su di un file nella microsd.
    Utilizzando linino potremo scriverle una funzione del genere in vari linguaggi... ma per renderlo alla portata di tutti ho deciso di scriverlo in php:
    Vi posto il risultato che ho ottenuto:
    Codice:
    01.Feb.2014 10:00|25|22
    01.Feb.2014 11:00|25|22
    01.Feb.2014 12:00|26|23
    01.Feb.2014 13:00|26|23
    01.Feb.2014 14:00|26|24
    01.Feb.2014 15:00|24|23
    01.Feb.2014 16:00|24|22
    01.Feb.2014 17:00|24|22
    01.Feb.2014 18:00|25|23
    01.Feb.2014 19:00|25|23
    01.Feb.2014 20:00|25|23
    01.Feb.2014 21:00|25|23
    01.Feb.2014 22:00|25|23
    01.Feb.2014 23:00|24|23
    Ora dobbiamo far eseguire il programma ogni ora, per fare questo sotto linux basta settare un crontab, quindi digitiamo da shell ssh il seguente comando:
    Codice:
    crontab -e
    ed inseriamo la seguente riga:
    Codice:
    0 * * * * /usr/bin/php-cgi /mnt/sda1/php/save.php
    Vi ricordo che si tratta di un editor "vi", quindi per scrivere bisogna prima cliccare sul tasto "insert" e per uscire e salvare bisogna prima premere "esc" e poi digitare ":quit!", ora ogni qualvolta i minuti sono a zero verrà eseguito il nostro programma "save.php".
    Per visualizzare il risultato ho creato un file "data.php" che legge il file che viene creato dal nostro crontab e assegna i valori a delle variabili in questo modo:
    Codice PHP:
     
    Per visualizzare i grafici ho utilizzato le [Solo gli utenti registrati e attivati possono vedere i link ]. Il file "index.php" lo trovate in un download in fondo a questo articolo.
    Ora andando a richiamare da browser digitando "http://ip_arduino_yun/php/index.php"
    avremo il seguente risultato


    P.S. Lo script php non è perfetto perchè quando i dati diventano troppi il grafico generato diventa quasi illeggibile quindi andrebbe migliorato, cosa che forse farò in futuro... oppure se volete potete farlo voi facendo liberamente esperimenti sul codice.

    [Solo gli utenti registrati e attivati possono vedere i link ]

    Avete delle migliorie da proporre? Fatevi avanti!
    Ultima modifica di RyujiAndy; 14-02-2014 alle 15:37
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  2. 2 utenti hanno ringraziato RyujiAndy per questo post:

    Destiny75 (14-02-2014), Savio1 (15-02-2014)

  3. # ADS
    Circuit advertisement


     

  4. #2
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Effattuata revisione sui problemi riscontrati quando i dati memorizzati diventano tanti, ho risolto il problema suddividendo in pagine la visualizzazione.
    Eccovi uno screen:

    ed eccovi il nuovo [Solo gli utenti registrati e attivati possono vedere i link ]
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  5. #3
    GioTheModder è offline
    • Registrato da Apr 2012
    • Messaggi: 752
    • Ha ringraziato: 37
      Grazie ricevuti: 18

      Visita il profilo Google+ di GioTheModder
    Prima o poi imparerò a usare l'Arduino!

  6. #4
    Savio1 è offline
    • Registrato da Nov 2010
    • Messaggi: 1,015
    • Ha ringraziato: 20
      Grazie ricevuti: 31

      Visita il profilo Facebook di Savio1
    @[Solo gli utenti registrati e attivati possono vedere i link ] volendo si possono fare le stesse cose con un Arduino UNO/Leonardo + Ethernet Shield? Perché stavo proprio pensando di comprarlo, ma dato che sono agli inizi volevo optare per uno dei due sopra.
    Se in qualche modo ti sono stato d'aiuto, se ti va puoi ringraziarmi cliccando sull'apposito pulsante, grazie!!






  7. #5
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Purtroppo no perché nella shield ci manca la macchina Linux.

    Gesendet von meinem GT-I9300 mit
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  8. #6
    Savio1 è offline
    • Registrato da Nov 2010
    • Messaggi: 1,015
    • Ha ringraziato: 20
      Grazie ricevuti: 31

      Visita il profilo Facebook di Savio1
    Citazione Originariamente Scritto da RyujiAndy Visualizza Messaggio
    Purtroppo no perché nella shield ci manca la macchina Linux.

    Gesendet von meinem GT-I9300 mit
    Il problema è che non si può generare la pagina html coi grafici, giusto? E se volessi hostare delle semplici pagine (magari con l'SD shield) da cui impartire comandi ad Arduino? Ad esempio una pagina html molto semplice, in cui cliccando su un pulsante viene impartito un comando alla board. E' fattibile?
    Se in qualche modo ti sono stato d'aiuto, se ti va puoi ringraziarmi cliccando sull'apposito pulsante, grazie!!






  9. #7
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Finché si lavora con die semplici link e si recuperano le informazioni con dei "GET" non CI sono problemi, ma non appena si cerca di inviare documenta HTML piú complessi il multicontattore si inceppa e non funziona il proggetto

    Gesendet von meinem GT-N8013 mit
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  10. #8
    Savio1 è offline
    • Registrato da Nov 2010
    • Messaggi: 1,015
    • Ha ringraziato: 20
      Grazie ricevuti: 31

      Visita il profilo Facebook di Savio1
    Citazione Originariamente Scritto da RyujiAndy Visualizza Messaggio
    Finché si lavora con die semplici link e si recuperano le informazioni con dei "GET" non CI sono problemi, ma non appena si cerca di inviare documenta HTML piú complessi il multicontattore si inceppa e non funziona il proggetto

    Gesendet von meinem GT-N8013 mit
    Ah, bene, bene... Grazie.
    Se in qualche modo ti sono stato d'aiuto, se ti va puoi ringraziarmi cliccando sull'apposito pulsante, grazie!!






  11. #9
    spyker10 è offline
    • Registrato da Nov 2010
    • Messaggi: 2
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    ma i file php dove vanno messi? non ho capito mi sfugge questa cosa

  12. #10
    RyujiAndy è offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Sulla micro sd

    Gesendet von meinem GT-I9300 mit
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Torna a inizio pagina
Moddingstudio.com - Powered by vBulletin
Copyright (c) 2011 vBulletin Solutions, Inc. All rights reserved.
Brown Editore S.r.l. - Capitale Sociale 1.087.500€ I.V. - P.Iva: 12899320159 - Viale Sarca, 336 Edificio 16 - 20126 Milano
Tutti gli orari sono GMT +1. Adesso sono le 00:53.