Sto creando un MOSTRO

Multi Output System for Termal Operation - Prima Puntata

« Older   Newer »
 
  Share  
.
  1. masterlegnano
     
    .

    User deleted


    Naturalmente scherzo...................

    Però che sia un mostriciattolo in crescita è quasi vero

    Un minimo di descrizione:

    In casa ho un impianto complesso (nel senso matematico del termine, gira di 90 gradi sull'asse immaginario e sparisce nella 4 dimensione)

    due idropellet, una caldaia a metano di soccorso

    un impianto solare termico per ACS, con seconda serpentina come termoboiler

    due condizionatori con pompa di calore
    Solare fotovoltaico e accumulo per il fotovoltaico

    Naturalmente tutto questo AmbaAradam è dotato di tutti i suoi automatismi (termostati e similia)

    ma l'integrazione dei sistemi è carente, molto carente
    In pratica è più facile mandare un uomo sulla Luna che capire se avrò acqua calda per la doccia stasera :-)

    e quindi mi sto ingegnando per "domotizzare" il tutto

    Perché sto scrivendo tutto questo?

    per ringraziarvi, tutti, collettivamente
    singolarmente siete tanti, troppi
    quello che sto facendo lo sto facendo grazie a quello che fate giorno per giorno rispondendo e scambiando le vostre conoscenze su questo forum

    e grazie a voi adesso posso imbastire il mio Mostro

    Quindi un Magnifico

    GRAZIE VOI TUTTI

    per la vostra pazienza e per il vostro spirito di condivisione

    E dopo i doverosi ringraziamenti....

    un minimo di roadmap (come a dire obbiettivi)

    vorrei realizzare un sistema:
    basato su Arduino
    a logica distribuita (= una scheda Arduino per ogni apparecchio)
    che accenda, spenga e supervisioni le due macchine a pellet
    che accenda, se serve, la macchina a metano come soccorritore
    che accenda e spenga, nella mezza stagione, le due pompe di calore
    che accenda e spenga, in estate, i condizionatori
    con interfaccia web
    con due termosonde esterne (a sud e a nord) per una regolazione PRO-attiva delle potenze erogate
    con una scorta di cialde tale da potermi fare il caffè fino a Natale (no, qui scherzo)
    comandabile da una APP android (no, questo mi rifiuto)

    e sopratutto che mi dica se avrò acqua calda per la doccia :-)
     
    Top
    .
  2.  
    .
    Avatar

    SUPERNOVA

    Group
    Super Moderatore
    Posts
    9,757
    Location
    Roma

    Status
    Anonymous
    Complimenti, seguirò il tread. Anche io volevo creare un automatismo con arduino per evitare di dover aprire e chiudere le valvole quando passo dal pannello solare ACS all'accumulo ACS dell stufa a pellet e lo scalda acqua a metano.
    Anzi, come la vedete se apro una sezione del forum proprio ad Arduino per rendere automatici i sistemi di riscaldamento con multigeneratori ?
     
    Top
    .
  3. masterlegnano
     
    .

    User deleted


    Non sarebbe male, anche perché con un sapiente uso della ricerca, le informazioni si trovano, come le ho trovate io

    ma quanta fatica....

    ci tengo però a sottolineare che la mia per ora è solo una road map

    sto provando le varie tecniche necessarie, per ora la parte PC -> Arduino -> Stufa sembra che vada
     
    Top
    .
  4.  
    .
    Avatar

    SUPERNOVA

    Group
    Super Moderatore
    Posts
    10,616
    Location
    Copparo (FE)

    Status
    Offline
    Perchè due termostufe?
     
    Top
    .
  5. masterlegnano
     
    .

    User deleted


    Perché due idro pellet?

    sono storie lunghe, legate all'evoluzione della casa e della famiglia

    diciamo che in origine erano in due parti e adesso no

    se mi permetti una battuta

    queste non sono le stufe che state cercando
    QUESTI NON SONO I DROIDI CHE STIAMO CERCANDO
    possiamo andare
    POTETE ANDARE

    Invece un quesito, per qualcuno più esperto di me:

    allora:
    il PC dialoga con la stufa, con un adattatore che ho costruito trovando qui in giro le info
    Arduino anche dialoga con la stufa
    l'accensione e la lettura vanno abbastanza bene
    lo spegnimento NO
    ovvero se metto la stufa in spegnimento via seriale rimane in pulizia finale per sempre
    qualcuno di voi ha la soluzione?
    Appena posso provo a passare da pulizia finale a stop in maniera esplicita, ma mi scoccerebbe doverlo fare da codice

    OPS, scusate

    la macchina in oggetto è una nordika elisir idro

    una cosa per volta, adesso automatizzo questa
     
    Top
    .
  6.  
    .
    Avatar

    SUPERNOVA

    Group
    Super Moderatore
    Posts
    10,616
    Location
    Copparo (FE)

    Status
    Offline
    Bella domanda...

    (per me troppo difficile...)

    ...c'è chi ne sa più di me...
     
    Top
    .
  7. masterlegnano
     
    .

    User deleted


    Ieri sera non ci sono riuscito, a provare

    comunque per la proposta di wroclaw per una sezione Arduinica ++

    stasera descrivo con maggior precisione quello che ho fatto finora, e quello che spero di fare in futuro, così magari chi è più esperto di me mi fa da "bussola"
     
    Top
    .
  8. masterlegnano
     
    .

    User deleted


    OK, è il momento di restituire qualcosa a questo magnifico forum

    cosa sono riuscito a scoprire ed a fare finora:

    Primo:

    la scheda ha una porta seriale non molto standard, 4 fili, solo 3 usati
    ma uno è il +20V, non ci serve
    la scheda comunica in Half duplex con livelli TTL
    serve un adattatore per passare in Full Duplex e livelli adatti
    io ho spezzato la cosa in due:
    un adattatore per portare la comunicazione in Full Duplex e livelli TTL
    per Arduino ci si ferma qui, i livelli TTL vanno bene
    L'adattatore è questoadattatore

    Niente, non mi riesce di allegare un immagine, come posso fare?
    Il suo schema fidocad è il seguente:
    CODICE
    [FIDOCAD]
    MC 60 30 0 0 200
    MC 80 60 1 0 280
    MC 80 45 0 0 115
    FCJ
    TY 90 55 4 3 0 0 0 * 10K
    TY 90 50 4 3 0 0 0 *
    MC 95 30 0 0 000
    FCJ
    TY 105 40 4 3 0 0 0 * Tx
    TY 105 35 4 3 0 0 0 * Tx
    MC 95 75 0 0 000
    FCJ
    TY 105 85 4 3 0 0 0 * Rx
    TY 105 80 4 3 0 0 0 * Rx
    LI 35 30 60 30 0
    LI 75 30 95 30 0
    LI 80 60 80 55 0
    LI 80 45 80 30 0
    LI 50 75 50 30 0
    LI 90 75 95 75 0
    LI 70 75 50 75 0
    SA 80 30 0
    SA 50 30 0
    LI 35 30 33 30 0
    EV 33 32 29 28 0
    TY 30 35 5 3 0 0 0 * RTx

    Qualsiasi transistor NPN per piccoli segnali va bene (io BC337)




    Se volgiamo collegarci ad un PC serve un adattatore da TTL a Seriale, se il PC ha una seriale, altrimenti un adattatore verso USB

    si trovano facile sulla baia, basati sul CHIP 2102, e basta per non fare pubblicità


    Come si collegano:
    dalla stufa, porta seriale, cercate i due fili che hanno tra loro una tensione di circa 5 Volt, è facile, uno non è collegato, una ha 20Volt, rimangono solo 2
    Quello al più è il TRx, quello al meno è Gnd
    Occhio a non fare corto con i puntali del tester misurando le tensioni

    il mio consiglio è provare a collegarvi prima al PC, con il CP2102

    RX su Rx dell'adattatore, Tx sul Tx, GND sul Gnd

    usate un programma per la comunicazione seriale, io ho Linux, non Windows, quindi uso Moserial
    i parametri sono 1200 Bps, 8 bit Nessuna parità e 2 bit di stop

    Occhio a togliere l'handshacking: moserial di default fa handshacking Hardware, quindi non trasmette
    Mettere No handshaking

    I parametri da trasmettere sono in esadecimale, quindi serve cambiare il modo di funzionamento di moserial e spippolare un po' con la calcolatrice,
    se me lo chiedete (e me lo insegnate) posto qualche schermata

    Adesso cena, si va avanti alla prossima puntata

    Edited by masterlegnano - 15/3/2017, 20:31
     
    Top
    .
  9. masterlegnano
     
    .

    User deleted


    Importantissimo, pericolo di danni

    me ne sono accorto per caso

    Usate solo PC che hanno l'alimentatore "sicuro": bene a terra, senza correnti di dispersione

    oppure solo portatili a batteria

    dicevo, me ne sono accorto per caso
    usavo il portatile, mi si stava scaricando la batteria, ho connesso l'alimentatore
    la stufa ha cominciato a sbagliare le letture di temperatura
    Questo significa che l'alimentatore ha una piccola corrente di dispersione
    e questa corrente, attraverso il Gnd della USB e poi della seriale arriva alla scheda della stufa
    falsando le misure, se siamo fortunati
    bruciando qualcosa, se siamo sfortunati

    Vi ho avvisati appeno lo ho scoperto
    quindi: Occhio al PC
     
    Top
    .
  10. masterlegnano
     
    .

    User deleted


    Avanti con le puntate di questa quasi infinita storia

    a parte che è finito l'inverno mentre io sto ancora aspettando le radio dalla Cina

    vabbeh, pazienza

    la stufa accetta una comunicazione seriale a 1200 baud, 8 bit di dati, nessuna parità e due bit di stop

    Arduino non può gestire una comunicazione del genere, almeno non "nativamente"

    dato che io voglio creare delle "stazioni" con Arduino, tra loro collegate via radio, una stazione per ogni "macchina"
    servono 2 porte seriali, una per comunicare con la stufa, una per comunicare tra le stazioni (e lasciamo stare che questa parte mi prenderà il suo bel tempo)
    Inoltre l'unica seriale dell'arduino uno serve per la programmazione, provoca il riavvio dell'arduino quando si apre, e vorrei tenerla per poter fare eventualmente i debug

    Per fortuna sull'arduino è possibile creare delle seriali software, che sono meno performanti e coode di quella nativa, ma per i nostri scopi vanno bene

    quindi serve dichiararle:


    CODICE
    #include <SoftwareSerial.h>


    // Gestione stufa
    // step 1: solo echo verso un PC
    // step 2: formattazione dei dati

    const byte rxPin = 2;
    const byte txPin = 3;
    const byte r2Pin = 4;
    const byte t2Pin = 5;


    Come vedete mi son portato avanti ed ho già dichiarato anche la seconda seriale (per la radio)
    per quanto riguarda invece l'uso, bisogna prima inizializzarle:

    CODICE
    SoftwareSerial ser1(rxPin, txPin); // serve per la stufa
    SoftwareSerial ser2(r2Pin, t2Pin); // serve per la comunicazione



    e poi usarle coi metodi print(), println(), write(), read(), ed available()

    per leggere un valore dalla stufa serve trasmettere due byte che sono:
    primo byte, 0 oppure 32 (in esadecimale si scrive: 0x00 oppure 0x20)
    per le due aree di memoria della stufa chiamate RAM (0x00) oppure EEPROM (0x20)

    secondo byte: un numero da 0 a 255 (0x00 - 0xff) per dire quale valore vogliamo leggere
    la stufa risponde con una coppia di byte, che sono:
    primo byte: il checksum (alzi la mano chi non sa cos'è un checksum) tra il risultato e l'ultimo byte ricevuto
    secondo byte: il valore richiesto

    quindi una funzione che legga il valore della stufa deve:
    -aprire la comunicazione seriale
    -trasmettere 0x00 se vogliamo un valore in RAM oppure 0x32 (EEPROM)
    -trasmettere l'indirizzo che vogliamo leggere

    e qui ci si sbizarrisce sugli indirizzi, dato che non ci sono due post che dicono la stessa cosa
    comunque alcuni punti fermi l ho raggiunti:

    0x00 0x03 è la temperature dell'acqua (in mezzi gradi, dovete dividere per due)
    0x00 0x21 è lo stato della stufa (da 0 = spento a 7= pulizia finale)
    0x00 0x32 è il tempo che manca alla pulizia braciere

    dopo trasmessi i due byte bisogna:
    -passare in ascolto
    -aspettare il tempo necessario per ricevere la risposta
    -calcolare il checksum e se i conti non tornato ripetere l'operazione
    -se invece i conti tornano, il secondo byte ricevuto è il numero che ci serve

    naturalmente ho scritto la parte di progrmma che fa tutto questo

    CODICE
    byte doma_nda(byte msb , byte lsb)
    {
     char stringa[3];

     

     // trasmette alla stufa il codice e restituisce il risultato//
     // non esegue il test di integrità
     // step 2 esegue il test di integrità

     digitalWrite(led, HIGH);
     //un ciclo, prova tre volte, se ricevuto OK fa break, altrimente restituisce default
     for (int j = 0; j < 3; j++)
     {
       ser1.write(msb);
       ser1.write(lsb);
       ser1.listen();
       //ok adesso 1/3 secondo di ascolto

       delay(300);

       for (int i = 0 ; ser1.available() > 0 ; i++)
       {
         stringa[i] = ser1.read();
       }
       ser2.listen();
       // effettuo il test
       if (msb + lsb + stringa[1] == stringa[0])
       {
         //test OK

         return stringa[1];
         break;

       }
       else
       {
         return 0;
       }
       digitalWrite(led, LOW);
     }

    }


    a questo punto basta solo porre la domanda giusta :-)

    CODICE
    doma_nda(00, 33))


    per ricevere di ritorno lo stato della stufa

    magari anche stamparlo sul monitor seriale
    CODICE
    Serial.print(F("Stato della stufa: "));
    Serial.println(doma_nda(00, 33));


    e con questo oggi vi lascio
    grazie per l'attenzione
     
    Top
    .
  11. masterlegnano
     
    .

    User deleted


    Il vero problema del frammento di programma di ieri .....

    a proposito: non arrabbiatevi se ogni tanto parlo di codice
    per i programmatore il codice è il programma, frammento di codice è un pezzetto di programma, magari usato come esempio, come nel mio precedente post,

    dicevo, che il vero problema di questo frammento di programma è che la seriale della stufa funziona a 2 bit di stop, e tutte le seriali di arduino (sia HW che SW) funzionano a 1 bit di stop

    in teoria siccome i bit di stop sono Space (come a dire lo stato di riposo dell'interfaccia seriale) basterebbe aggiungere un piccolo ritardo dopo la trasmissione e attendere un piccolo tempo durante la ricezione

    purtroppo ho provato, e la comunicazione diventa erratica
    insomma si capisce che la trasmissione avviene, e circa una volta su due avviene OK, ma spesso si ricevono valore errati, e non voglio nemmeno sapere cosa succede alla stufa se li riceve LEI i valori errati.......


    insomma così non va bene

    grazie agli amici del forum di arduino.cc sono riuscito a modificare la libreria softwareserial per adattarla alle nostre esigenze

    si tratta di fare due semplici modifiche aggiungendo i ritardi dei quali ho appena scritto sulle routine di ricezione e trasmissione della softwareserial

    e per soprammercato ho aggiunto anche la possibilità di escluderlo se vogliamo creare due istanze della software serial, una con 2 bit di stop per la stufa e una con un bit di stop per la comunicazione tra i vari nodi del M.O.S.T.R.O.

    riassumendo le modifiche fatte sono:

    aggiungere un parametro in più alla funzione nel file softwareserial.h
    aggiungere un parametro in più alla funzione nel file softwareserial.cpp
    sempre nel file .cpp aggiungere due condizioni (al parametro) che raddoppiano l'ultimo bit trasmesso

    in righe di codice diventa:

    dentro in SoftwareSerial.h
    CODICE
    uint16_t _inverse_logic:1;
     //mxc
     uint16_t _dual_bit:1;


    e più avanti

    CODICE
    public:
     // public methods
     //mxc
     SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false, bool dual_bit=false);


    invece in SoftwareSerial.cpp:

    CODICE
    // skip the stop bit
       tunedDelay(_rx_delay_stopbit);
       DebugPulse(_DEBUG_PIN1, 1);




    //mxc aggiunto secondo stop bit
       if(_dual_bit)
         tunedDelay(_rx_delay_stopbit);





       // Re-enable interrupts when we're sure to be inside the stop bit
       setRxIntMsk(true);
    al(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false, bool dual_bit=false);


    //omissis





    //
    // Constructor
    //
    SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic , bool dual_bit) :



     _rx_delay_centering(0),
     _rx_delay_intrabit(0),
     _rx_delay_stopbit(0),
     _tx_delay(0),
     _buffer_overflow(false),
     _inverse_logic(inverse_logic),


     _dual_bit(dual_bit)




    //omissis

     SREG = oldSREG; // turn interrupts back on
     tunedDelay(_tx_delay);



    // mxc aggiunto secondo stop bit in trasmissione
     if (_dual_bit)
       tunedDelay(_tx_delay);




     return 1;


    Spero che sia abbastanza chiaro, casomai chiedete

    con queste modifiche alla softwareserial è possibile aprire una seriale soft con un parametro in più, che permette di specificare il doppio bit di stop


    CODICE
    SoftwareSerial ser1(rxPin, txPin, false, true); // serve per la stufa
    SoftwareSerial ser2(r2Pin, t2Pin); // serve per la comunicazione

    notare i due parametri in più sulla prima seriale creata, in particolare il primo serve se si vuole invertire i livelli logici
    il secondo è quello aggiunto da me, serve per aggiungere il secondo bit di stop

    per soprammercato la cosa funziona anche per velocità differenti e per ogni condizione della softserial, è quindi una feature ri-usabile anche in altri progetti


    dopo questa modifica la comunicazione con la stufa viaggia diritta come un fuso

    ed anche per oggi basta, buona giornata a tutti

    Ho appena editato i listati, per separare bene le righe da me aggiunte, così risaltano di più

    Edited by masterlegnano - 22/3/2017, 17:46
     
    Top
    .
  12. claudio_co
     
    .

    User deleted


    Mi intrometto, scusate.
    Intanto l'adattatore per le stufe deve essere una cosa SERIA, perché se bruciate la scheda sono augelli per diabetici.
    In secondo luogo avevo anche io ipotizzato l'uso di Arduino, ma poi l'ho scartato a favore di oggetti magari più complessi ma di costo ancora inferiore.
    La ragione è semplice: come adattatore locale Arduino è più che adeguato, ma come gestore fa decisamente pena.
    CONFERMO INVECE che tutti i dispositivi devono avere una OTTIMA alimentazione (sia che si adoperi Arduino sia che si adoperi altro).
    E comunque il progetto è molto interessante.
    Ciao a tutti
    Claudio
     
    Top
    .
  13. masterlegnano
     
    .

    User deleted


    E quindi come HW cosa mi consigli?

    faccio ancora in tempo a dirottare il progetto
     
    Top
    .
  14. claudio_co
     
    .

    User deleted


    Beh io i sistemi di riscaldamento li controllo con qualcosa di simile al RaspberryPi, magari con WIFI integrato che renda più semplice la connessione e non imponga tanti fili in giro per casa.
    Il problema infatti è LA MOGLIE, in questo caso.
     
    Top
    .
  15. masterlegnano
     
    .

    User deleted


    Per claudio_co

    scusami, mi sembrava di aver capito che avevi usato HW meno costoso per la stufa
    alla fine mi terrò il mio arduino, credo....

    ah..., e poi

    hai notato anche tu strani "tempi" comandando la stufa da seriale?
    perché a me sembra che i tempi di accensione e di pulizia finale non siano molto giusti, comandando da seriale

    Edited by masterlegnano - 22/3/2017, 17:40
     
    Top
    .
40 replies since 13/3/2017, 19:38   2000 views
  Share  
.