Arduino Yún

Ciao a tutti.. ho un progetto iniziato con tanto di topic sul forum!

Traendo spunto da qualcosa di simie già fatto, ho messo "on-line" a casa mia un sistema di controllo dei consumi in grado di poter staccare alcune sezioni di casa per evitare il distacco del tanto (da me) odiato contatore Enel!!!
Per il mio progetto, visto che era la prima cosa in cui mi cimentavo, ho utilizzato un Arduino UNO al quale ho collegato (prima uno) e ora 3 sensori di corrente (sct-013-030), vari led, un lcd, un buzzer e una scheda relè per gestire i contattori (e quindi le sezioni di casa da poter staccare)...

Oggi mi ritrovo con la "fantasia" di crearmi una pagina web visualizzabile da internet (con apposite protezioni) che mi permetta di vedere il consumo ed eseguire le operazioni di distacco/riallaccio che già posso fare interagendo manualmente con dei bottoni collegati all'attuale Arduino. Per dirla tutta, avrei anche il desiderio di collegare un altro sensore di corrente per monitorare un'altra sezione ancora, ma mi trovo con TUTTI i pin (sia digitali che analogici) in uso...

Quindi attualmente, niente 4° sensore e soprattutto niente shield WIFI!

Leggendo qua e la, ho scoperto l'esistenza di Yùn e volevo capire se può fare al caso mio, avendo la necessità di un collegamento a internet senza sacrificare PIN!
Potete darmi qualche consiglio ? Vado incontro a qualche possibile problema di compatibilità con il mio progetto secondo voi?

Cordiali Saluti
Salvo

a livello hardware la yun fa per te, sia perche' ha il wi-fi integrato, sia perche' hai piu' pin a disposizione della UNO (la yun monta il 32u4 non il 328)
non so cosa intendi per incompatibilita' con il tuo progetto, il lavoro e' diverso, perche' dovrai creare un serverweb lato linux,
e' un qualcosa di completamente diverso rispetto ad aggiungere la wi-fi shield alla UNO.

Ciao Salvo,
per vedere la compatibilità via software puoi fare una veloce prova.
Apri il tuo sketch nell'IDE, seleziona come scheda Arduino Leonardo e prova a compilare.
Se va a buon fine hai ottime possibilità che il tuo sketch giri sulla YUN poiche usa lo stesso micro (lato Arduino) della Leonardo.
In effetti sulla YUN i micro sono 2, il 32U4 e l'AR9331.
L'AR è quello che si occupa del WiFi, della Ethernet, della SD, e della USB (grande). La micro usb è invece collegata al 32U4.

Sulla YUN, quindi sull'AR dove gira linux (Linino per l'esattezza) puoi caricarci anche il php per creare siti dinamici caricabili da SD.
Purtroppo, e ci sono vari topic nel forum, non ho ancora capito il passaggio di valori tra Arduino e Web Browser su Linino.
Ma prima o poi approfondisco.

Testato:
a livello hardware la yun fa per te, sia perche' ha il wi-fi integrato, sia perche' hai piu' pin a disposizione della UNO (la yun monta il 32u4 non il 328)

Il layout è lo stesso, ma il numero di pin aumenta perché la ISP non usa i pin 11, 12 e 13.
Se invece nel tuo progetto non hai usato i pin ISP, il numero di pin rimane identico. :sweat_smile:
Attenzione: la I2C usa il pin 2 e 3 e non A4 e A5 come sulla UNO, quindi se usi l'I2C devi liberare i due pin ma puoi occupare gli altri.
Visto che potresti perdere i pin 2 e 3 se usi l'I2C, per gli interrupt, nel caso ti servissero puoi usare il 7, ma scendi ad un solo interrupt.

Insomma devi un po stravolgere il tuo sketch.
I pin 0 e 1 sono usati per comunicare con con l'AR9331 quindi non si possono usare.

Comunque liberando il pin 2 e 3 e usando l'I2C puoi spostare LED e Buzzer su un expander recuperando molti pin.
Sappi che la YUN come la Leonardo ha un numero maggiore di pin analogici, quindi più sensori di corrente collegabili.

Il discorso di gestire il lato "connessione a internet" e "webserver" tramite linux (linino) l'avevo letto e non so se sbaglio ma me lo immagino come un discorso positivo.. nel senso che resterebbe appunto da capire come passare i dati letti da YUN al secondo processore che dovrebbe poi usarli nella pagina web visualizzata da remoto..
Ho letto dell'esistenza della libreria bridge che mette in comunicazione le due parti, ma non ho approfondito..

Per il discorso dei pin in più, la descrizione di Yùn mi confonde perché dice di avere 20 pin digitali, ho trovato in rete una foto di Yùn in cui si vedono i pin dal lato in cui ci sono i classici analogici A0 - A5 e i vari 5v 3,3v GND etccc ma dal lato dei digitali vedo solo la foto dall'alto con 20 pin di cui non so se alcuni come nella scheda UNO, siano GND e AREF e/o altro...
Inoltre alcuni dei pin digitali, possono essere forse utilizzati dalle librerie di connessione con la parte linuxiana e quindi essere "indisponibili" per i normali usi in arduino ?

P.s. intanto grazie per il consiglio di compilare per Leonardo... provo immediatamente e vi faccio sapere :slight_smile:

Anche la UNO ha 20 pin digitali.
Infatti anche i pin identificati come A0..A5 sono utilizzabili con i comandi digitalRead e digitalWrite.

La YUN, come la Leonardo, ha 20 pin disponibili. Questi pin sono 8 solo digitali e 12 digitali/analogici.
Quindi è più versatile.

Un discorso importante è sull'alimentazione.
Alla YUN deve essere fornita un tensione stabile a 5V. Non ha regolatore a bordo se non quello da 3V3.
Un carica cellulare con presa micro USB va benissimo.
Non puoi fornire tensioni diverse da 5V neanche al pin Vin: altrimenti bruci la scheda.

ok per i pin la tua spiegazione mi sta bene :stuck_out_tongue: Tutto chiaro!
Ho pure trovato questa foto (la condivido sperando possa servire a qualcuno):

Per il mio "dubbio" su eventuali pin inutilizzabili perchè già impegnati dalla connessione con linux invece ? Mi sai dire qualcosa ?

TWI: 2 (SDA) and 3 (SCL). Support TWI communication using the Wire library.
External Interrupts: 3 (interrupt 0), 2 (interrupt 1), 0 (interrupt 2), 1 (interrupt 3) and 7 (interrupt 4). These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details. Is not recommended to use pins 0 and 1 as interrupts because they are the also the hardware serial port used to talk with the Linux processor. Pin 7 is connected to the AR9331 processor and it may be used as handshake signal in future. Is recommended to be careful of possible conflicts if you intend to use it as interrupt.

Per l'alimentazione avevo già letto della mancanza del regolatore di tensione e che devo fornire io i 5v... Per il mio attuale progetto avevo preso un alimentatore switching che mi dava in uscita i 12v che passavo poi a Arduino Uno tramite il normale jack di alimentazione e tramite un 7808 seguito da 7805 mi ricavavo una 5v per alimentare il monitor lcd e la scheda relè (che preferivo non alimentare direttamente da arduino per limitare alti amperaggi sui pin...)
Potrei quindi alimentare la Yun dalla stessa 5v (o come dici tu usare un altro alimentatore direttamente @5v eliminando i 7808 e 7805 !!

Ho appena provato a compilare il mio sketch per Arduino Leonardo ed è andato tutto OK ! ;=)

Per l'alimentatore devi vedere se può fornire la corrente necessaria ad alimentare tutto.
Altrimenti ne devi mettere uno con capacità maggiori o due.
Fai due conti.

I pin che comunicano con l'AR sono: 0, 1 e 7 (attualmente non attivo su Linino) e poi quelli del connettore ICSP per la programmazione Wireless.

PaoloP:

Testato:
a livello hardware la yun fa per te, sia perche' ha il wi-fi integrato, sia perche' hai piu' pin a disposizione della UNO (la yun monta il 32u4 non il 328)

Il layout è lo stesso, ma il numero di pin aumenta perché la ISP non usa i pin 11, 12 e 13.
Se invece nel tuo progetto non hai usato i pin ISP, il numero di pin rimane identico. :sweat_smile:

La leonardo ha molti pin utilizzabili in piu' della UNO, pero' sono da interpretare diversamente ed un paio anche nascosti.
Diciamo che se ti servono piu' pin hai piu' trucchi a disposizione per trovarli.

  • Se usi ISP hai 3 pin in piu'
  • Se non usi ISP hai 3 pin in piu'
  • Se non usi ISP come master puoi liberare un 4 pin
  • infine il mio preferito, c'e' un quinto pin in piu' liberabile, vediamo chi indovina :grin:

32u4 "is meglio che" 328 :slight_smile:

?

PaoloP:
Per l'alimentatore devi vedere se può fornire la corrente necessaria ad alimentare tutto.
Altrimenti ne devi mettere uno con capacità maggiori o due.
Fai due conti.

I pin che comunicano con l'AR sono: 0, 1 e 7 (attualmente non attivo su Linino) e poi quelli del connettore ICSP per la programmazione Wireless.

L'alimentatore attuale tiene già tutto e penso pure sia sovradimensionato... Output: 12v 3,2A
Non so se Yun rispetto a Uno aumenta di tanto i consumi ?

Testato:

PaoloP:

Testato:
a livello hardware la yun fa per te, sia perche' ha il wi-fi integrato, sia perche' hai piu' pin a disposizione della UNO (la yun monta il 32u4 non il 328)

Il layout è lo stesso, ma il numero di pin aumenta perché la ISP non usa i pin 11, 12 e 13.
Se invece nel tuo progetto non hai usato i pin ISP, il numero di pin rimane identico. :sweat_smile:

La leonardo ha molti pin utilizzabili in piu' della UNO, pero' sono da interpretare diversamente ed un paio anche nascosti.
Diciamo che se ti servono piu' pin hai piu' trucchi a disposizione per trovarli.

  • Se usi ISP hai 3 pin in piu'
  • Se non usi ISP hai 3 pin in piu'
  • Se non usi ISP come master puoi liberare un 4 pin
  • infine il mio preferito, c'e' un quinto pin in piu' liberabile, vediamo chi indovina :grin:

32u4 "is meglio che" 328 :slight_smile:

Questa dei pin vorrei capirla meglio ? Io per ora nella Uno li uso tutti analogici e digitali (a sto punto però dico anche "credo") .. tranne 0 e 1 gli altri sono:

// Dichiaro i pin del display
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
//Dichiaro i pin del buzzer, dei led e dei relè
int buzzer = 6;
int verde1 = 2;
int verde2 = 3;
int rosso1 = 4;
int rosso2 = 5;
int bagni = 7;
int stanze = A1;
// Dichiaro il pin a cui sono collegati i bottoni e la variabile in cui viene memorizzato il valore letto dal pin
int buttonPin = A0;
int buttonValue = 0;
//Dichiaro i pin dei sensore di corrente, le variabili in cui saranno memorizzati i valori letti dai sensori e una variabile per i test di lettura all'avvio
int sensorTotPin = A4;
int sensorTotValue = 0;
int sensorCucinaPin = A3;
int sensorCucinaValue = 0;
int sensorStanzePin = A2;
int sensorStanzeValue = 0;
int sensorTest = 0;
//Dichiaro il pin usato per il controllo del voltaggio nel partitore di tensione che sarà quindi il mio offset e la variabile in cui sarà conservato
int offsetPin = A5;

Per l'alimentazione direi che se a posto. controlla bene i trasformatori 7808 e 7805 in modo da fornire un tensione costante di 5V alla YUN.
Anche per i piedini sono OK.
Potresti recuperarne qualcuno usando usando un LCD I2C. Si collega hai pin 2 e 3 della YUN, liberandoti i pin attuali 8, 9, 10 ,11, 12, 13 su cui dovrai spostare ad esempio verde1 e verde2.
Recuperi 4 pin.
Per usare gli LCD I2C devi utilizzare la libreria Liquidcrystal_I2C e un convertitore per LCD tipo http://www.ebay.it/itm/IIC-I2C-SPI-Serial-Interface-Modul-For-1602-2004-LCD-Display-Arduino-CP02012-G33-/281254824233?pt=Motoren_Getriebe&hash=item417c180929&_uhb=1

se usi LCD I2C COG riduci di molto l'elettronica e puoi usare la libreria che ho in firma, ci sono anche le foto di un paio di LCD compatibili, con l'ultima versione ho aggiunto il supporto ad un nuovo display

...oppure se hai un lcd standard, lo puoi aggiornare aggiungendo uno shift register e pilotarlo con 2/3 pin:
http://playground.arduino.cc/Code/LCD3wires
https://code.google.com/p/arduinoshiftreglcd/
(anche se da verificare, non son state aggiornate da molto :P)

oppure trasformarlo in un LCD seriale :

Diciamo che una volta che modifico mi piacerebbe mettere pure un display un po più grande...in modo da avere sott'occhio senza dover alternare i dati i consumi totali e delle 3 sezioni importanti!
Ho letto un qui: arduino + lcd 20x4 con 18 pin - Generale - Arduino Forum che ha avuto un po di problemi a far funzionare il suo 20x4 in i2c.. dite che è un caso isolato o rischio di imbrogliarmi in problemi che attualmente non ho ?

Per il discorso dei pin, sinceramente non so se eliminare i 4 led (2 verdi e 2 rossi) visto che lo stato delle linee gestite da arduino viene mostrato anche su LCD !!! libererei 4 digitali senza sforzo alcuno...

Sono cmq sempre più convinto di prendere la yun e buttarmi in questo progetto :slight_smile:

Via I2C puoi comandare anche 8 Led con un PCF8574 --> http://www.i2cchip.com/pcf8574.html
O leggere dei pulsanti.
Guarda il progetto dell'acquario di riciweb nella sezione Megatopic. Fa largo uso del bus I2C.

Per quanto riguarda la librerie per yun, con get & put a quanto ho capito, posso passare i valori letti dalla parte arduiniana sulla ram della parte linux!

Supponendo che in linux sia attivo un webserver e dal pc apro la pagina web, nel codice della pagina è possibile in qualche modo andare a leggere i valori che arduino ha salvato nella ram del processore linux ?

Questo non l'ho ancora capito.

nemmeno io,
le get/put non le fa la leonardo integrata nella yun, ma le fai tu via browser del client

per la seconda parte della domanda se un valore e' in ram lato yun e' normale che tu possa passarlo al webserver

no che non è normale, dipende in che processo sia.

In generale questa afferamzione non ha senso, è corretta in quanto ogni dato è in ram, ma a meno che non ne hai un riferimento e non faccia parte della tua applicazione, o tu non abbia un modo per interrogare il valore, non te ne fai nulla. Immagino che la get ritorna il carattere disponibile nel buffer, esattamente come lato arduino, e sta a te salvare il valore in una variabile e usarlo come vuoi