Arduino, raspberry e scheda relè

68 views
Skip to first unread message

Adalberto Carrera

unread,
Jun 20, 2016, 3:28:56 AM6/20/16
to Freedomotic - IoT and Smart Spaces Framework
buongiorno a tutti, mi chiamo Adalberto e mi sto appassionando alla domotica.

vorrei usare freedomotic per controllare una casetta in campagna, con queste necessità:

-scheda relè per accendere e spegnere utenze
-riuscire a creare un termostato associato ad un relè per accendere dei pannelli elettrici
-leggere delle sonde di temperatura (5) in locali diversi
(sono bravino nel renderizzare ambienti, se avete bisogno di immagini posso contribuire.)

Ho installato freedomotic su raspberry e collegato su porta seriale Arduino con collegato allo stesso un scheda a 8 relè collegati ai pin di arduino.
ho installato la plugin per arduino seriale, e il relè collegato sul pin 13 funziona perfettamente.

Purtroppo le mie capacità e conoscenze sulla programmazione di arduino sono zero, come faccio a "duplicare" il comando anche sugli altri rele?
un dubbio che mi è venuto è forse comeimpostare l'indirizzo su ogni singola luce comandata da rele sull'oggetto luce, ma non so come implementare correttamente la plugin che parla solo del pin 13.

scusate il modo....poco da programmatore ma proprio non ci capisco...:)

qualcuno può aiutarmi?

grazie buona giornata

Adalberto

Mauro Cicolella

unread,
Jun 20, 2016, 8:41:28 AM6/20/16
to Freedomotic - IoT and Smart Spaces Framework
Ciao Adalberto
e benvenuto nella nostra community (anche se noi ci siamo già sentiti in privato) !

Prima di tutto non preoccuparti minimamente. Non siamo ad Harvard e ma vogliamo condividere le nostre idee ed imparare reciprocamente.
Riguardo alla tua richiesta posso dirti in primo luogo che il plugin è un esempio di base per mostrare un minimo di interazione tra Arduino e Freedomotic.
Andrebbe rivisto e migliorato in particolare per quanto riguarda i feedback provenienti dalla scheda.
Cerco di sintetizzarti il funzionamento: il plugin si pone in ascolto sulla seriale e quando legge una stringa la processa per creare degli eventi.
Per i comandi ora scrive i caratteri 'a' e 'b' per l'on/off.

Per generalizzare il tutto bisognerebbe definire un semplice protocollo di comunicazione da implementare a livello di sketch Arduino. Tu hai già in mente qualcosa?
Ad esempio potremmo identificare i relè con R1,R2 ecc. e per i comandi usare ON, OFF oppure 0,1. Non fa molta differenza.
Scrivendo sulla seriale  R1,1 si potrebbe accendere il relè 1 e con R1,0 spegnerlo. Qualora ci fosse la necessità di gestire più schede dovremmo utilizzare anche un id per queste quindi avendo qualcosa del tipo S1,R1,1 dove accendiamo il relè 1 sulla scheda 1.

Viceversa per leggere lo status, a livello di sketch si dovrebbe inviare lo stesso tipo di stringa quando avvengono dei cambiamenti ad esempio accendendo o spegnendo da un interruttore fisico. 
Stesso discorso per le letture dei sensori di temperatura in cui si avrebbe qualcosa del tipo T1,23.0 ossia la sonda 1 legge 23.0 gradi.

Ricapitolando: il primo passo a mio avviso consiste nel definire questo protocollo seriale da implementare a livello di sketch, sulla base del quale adattare il plugin.

Spero di essere stato abbastanza comprensibile.
Per qualsiasi dubbio scrivi pure.

Mauro    

Adalberto Carrera

unread,
Jun 20, 2016, 9:31:31 AM6/20/16
to Freedomotic - IoT and Smart Spaces Framework
ciao Mauro, di massima ho capito quello che mi hai scritto.
userò al massimo i 8 rele su 8 pin di arduino.
mi va benissimo R1 R2..R8.  con 1,0 in risposta e
la mia necessità è di leggere 5 sonde e va benissimo T1 T2 ......
con lettura temperatura.
ho provato a modificare lo sketch ma sto andando a tentativi senza basi

una domanda:nelle proprietà dell'oggetto light a cui assegno il protocollo "arduinousb"  che indirizzo va messo?

Mauro Cicolella

unread,
Jun 20, 2016, 10:12:08 AM6/20/16
to Freedomotic - IoT and Smart Spaces Framework
L'indirizzo dovrà corrispondere a R1,R2 ecc oppure a T1,T2 ecc o qualsiasi altra stringa che lo rappresenti nel tuo protocollo.

Supponiamo che tu invii R1,1 per accendere il relè 1. Il tuo sketch dovrà fare il parsing della stringa letta da seriale ovvero separare le due parti <indirizzo>"R1" e <stato>"1" sulla base del carattere "," o di qualunque da te scelto e porre ad "high" (in questo caso) il pin corrispondente ad R1.

Quando al contrario dovrai inviare il valore della temperatura, diciamo di T1, dovrai costruire una stringa "T1,23.0" dove 23.0 è appunto il valore letto dal sensore e poi scriverla sulla seriale.
Forse è più conveniente inviare la temperatura come un intero a 3 cifre (230) dove l'ultima corrisponde al decimale e manipolarlo a livello di trigger.

Non hai già uno sketch di base per pilotare i relè e leggere la temperatura?


Mauro

Il giorno lunedì 20 giugno 2016 09:28:56 UTC+2, Adalberto Carrera ha scritto:

Adalberto Carrera

unread,
Jun 20, 2016, 10:22:17 AM6/20/16
to Freedomotic - IoT and Smart Spaces Framework
ho usato lo sketch che hai fatto tu trovato sul sito che comanda  il pin13.
per la temperatura non ho nulla, e non ho mai programmato nulla di arduino quindi purtroppo non riesco a capire cosa mi hai scritto.

:(

Adalberto

Adalberto Carrera

unread,
Jun 21, 2016, 3:32:43 AM6/21/16
to Freedomotic - IoT and Smart Spaces Framework
buongiorno Mauro, ho provato a modificare lo sketch che ho trovato sul sito  cosi:

void setup(){
  Serial.begin(9600);

  //Set all the pins we need to output pins

  pinMode(13, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop (){
  if (Serial.available()) {

    //read serial as a character
    char ser = Serial.read();

    //NOTE because the serial is read as "char" and not "int", the read value must be compared to character numbers
    //hence the quotes around the numbers in the case statement
    switch (ser) {
        case 'a':
        pinON(13);
        Serial.println("13;on");
        break;
        case 'b':
        pinOFF(13);
        Serial.println("13;off");
        break;
       }
    switch (ser) {
        case 'a':
        pinON(3);
        Serial.println("3;on");
        break;
        case 'b':
        pinOFF(3);
        Serial.println("3;off");
        break;
    }
  }
}

void pinON(int pin){
  digitalWrite(pin, HIGH);
}

void pinOFF(int pin){
  digitalWrite(pin, LOW);
}

La verifica dello sketch non da errori, l'ho caricato su arduino e ti allego come ho impostato le schermate di freedomotic.
Ho due luci Kitchen light e Livingroom light.
se clikko su una per accenderla, mi si accende anche l'altra e mi si attivano due rele diversi (3, 13)
Dove sbaglio?

ciao Adalberto
13.png
3.png

Mauro Cicolella

unread,
Jun 21, 2016, 4:13:26 AM6/21/16
to Freedomotic - IoT and Smart Spaces Framework
Ciao Adalberto
se osservi il codice dello sketch noterai che il controllo sul carattere letto (blocco switch) fa in modo che in corrispondenza di 'a' e 'b' vengano attivati/disattivati entrambi i pin.
Occorre sostituire 'a' e 'b' con 'c' e 'd' per il secondo pin (il 3) ma di conseguenza creare due nuovi command (che trovi nella cartella data/cmd del plugin) in modo da spedire sulla seriale 'c' e 'd' associando questi due nuovi trigger al secondo led.
In pratica apri con un editor di testi il turn-on.xcmd (ricordo se sia il nome corretto), cambia il nome, al posto di 'a' inserisci 'c' come comando inviato e salva con un nome differente.
Stesso discorso per turn-off.xcmd (attento a salvare con questa estensione e non con .txt) dove al posto di 'b' andrà 'd'.

Proprio per evitare tutto questo proliferare di cmd e di codice duplicato suggerivo l'altra soluzione basata sul parsing della stringa letta sulla seriale.

Ti suggerisco comunque di leggere qualche tutorial su Arduino, ce ne sono tanti e abbastanza comprensibili così hai un'idea più precisa di cosa fa lo sketch e sei in grado di muoverti autonomamente visto che comunque stai realizzando una soluzione DIY.

Se ci sono problemi fammi sapere
Mauro


Il giorno lunedì 20 giugno 2016 09:28:56 UTC+2, Adalberto Carrera ha scritto:

Adalberto Carrera

unread,
Jun 21, 2016, 5:23:21 AM6/21/16
to Freedomotic - IoT and Smart Spaces Framework
fantastico....sono riuscito grazie mille.!!!!!!!
ho usato la duplicazione dei cmd in quanto l'altra soluzione che dici (parsing della stringa sulla seriale) non riesco nemmeno a trovare info che riesco a capire..:)
non oso immaginare come fare per il termostato, o meglio, ho visto parecchi esempi di termostato fatti con arduino ma mi sa impresa difficilissima poi avere il termostato funzionante in freedomotic, sempre per le mie incapacità.

grazie ancora
Adalberto

Mauro Cicolella

unread,
Jun 21, 2016, 9:58:04 AM6/21/16
to Freedomotic - IoT and Smart Spaces Framework
Se ti abbatti così in fretta è finita :)

Come ti dicevo il punto di partenza è avere una conoscenza di base degli strumenti con cui lavori soprattutto se vuoi cimentarti con il fai da te.
Posso consigliarti l'ottimo sito del prof. Maffucci ed in particolare la guida ad Arduino http://www.maffucci.it/area-studenti/arduino/
E' realizzato da una persona molto competente in ambito didattico e quindi in grado di spiegare meglio di me i vari concetti.
Vedrai che passo dopo passo sarà tutto molto più chiaro.

Realizzare il termostato in fin dei conti non è una mission impossibile: si tratta di collegare un sensore di temperatura, saper fare delle letture e "pubblicarle" sulla seriale in modo che il plugin possa leggerle. Quindi a livello di Freedomotic si potrà impostare un'automazione per cui se la temperatura letta è maggiore o minore di una certa soglia attivi o disattivi il relè a cui è collegato il climatizzatore, la stufa o qualunque altra cosa.

Procedendo passo dopo passo riuscirai a fare questo e ben altro.
Comunque se hai bisogno chiedi pure


Mauro

Il giorno lunedì 20 giugno 2016 09:28:56 UTC+2, Adalberto Carrera ha scritto:
Reply all
Reply to author
Forward
0 new messages