Controllo remoto via seriale

« Older   Newer »
 
  Share  
.
  1.  
    .
    Avatar

    infreddolito perso

    Group
    Member
    Posts
    16

    Status
    Offline
    Buongiorno a tutti,
    con l'obiettivo di gestire l'accensione e spegnimento da remoto con un sistema arduino creato appositamente, mi sono cimentato nell'implementazione del protocollo di comunicazione seriale messo a disposizione sulla scheda di potenza.
    la mia stufa è una Marocchi Rossana, clone della Nordika Extraflame Viviana, con la quale condivide la scheda di controllo Micronova, a parte alcune limitazioni lato firmware.
    Seguendo le preziose indicazioni rese disponibili da Uman in questo thread: https://stufapellet.forumcommunity.net/?t=53061907&st=45,
    ho creato un'interfaccia sperimentale basata su un MAX3232, come da disegno allegato

    interfacemax232


    il connettore a 4 poli presente sul retro della stufa è così cablato:
    1: GND
    2: comunicazione seriale
    3: +15V
    4: +5V

    connseriale

    La porta seriale RS232 deve essere settata a 1200bps, 8 bit di dato, nessuna parità e 2 bit di stop
    Per le prime prove può essere utilizzato un qualunque sw di terminale seriale, fra quelli free vi segnalo Realterm, compatibile con tutte le versioni Windows:
    rt1

    rt2

    rt3

    N.B:
    - molti dei componenti presenti sulla scheda di potenza sono posti a tensione di rete, quindi se il connettore seriale non è reso disponibile esternamente, prima di intervenire staccate il cavo di alimentazione
    - prima di collegare l'interfaccia, verificate con un tester la corrispondenza delle tensioni indicate

    Analizzando il dump dei banchi di memoria RAM ed EPROM, sono riuscito a mappare gran parte dei parametri di configurazione e delle informazioni di stato.
    I comandi di lettura sono così strutturati:
    - un byte per indicare il banco di memoria da leggere (0h per la RAM, 20h per la EPROM)
    - un byte per l'indirizzo da leggere (da 0h a FFh)
    la risposta è così composta:
    - un byte di CRC, come sommatoria fra i due byte di cui sopra ed il byte di valore restituito (vedi sotto), in modulo FFh
    - un byte contenente il valore richiesto

    La tabella che segue contiene tutte le informazioni che sono riuscito a mappare finora, non tutte sono riportate 'in chiaro' ma necessitano di una formula matematica per far corrispondere il valore letto via seriale con quello visibile a bordo macchina, più specificamente:
    [valore_stufa] = [ADD] + [RATIO] * [valore_memoria]

    Nota: Tutti i valori indicati in tabella, compresi gli indirizzi di memoria, sono espressi in decimale

    LOCAZIONI EPROM
    PARAM. IND. EPROM DESCRIZIONE ADD RATIO
    PG00 00 Intervallo pulizia 0 1
    PG01 01 Coclea accensione 0 25
    PG02 02 Coclea avviamento 0 25
    PG03 03 Coclea P1 0 25
    PG04 04 Coclea P5 0 25
    PG05 05 Fumi accensione 250 10
    PG06 06 Fumi avviamento 250 10
    PG07 07 Fumi P1 250 10
    PG08 08 Fumi P5 250 10
    PG09 09 Aria P1 60 5
    PG10 10 Aria P5 60 5
    PG11 11 Aria spegnimento 60 5
    PG12 12 Soglia aria 30 1
    PG13 13 Soglia compens. 30 1
    PG14 14 Delta T off 0 1
    PG15 15 Delta T on 0 1
    PF00 17 Tempo start 0 1
    PF01 18 Tempo accensione 0 1
    PF02 19 Tempo avviamento 0 1
    PF03 20 Precarica accensione 0 1
    PF04 21 Modula fumi 30 1
    PF05 22 Modula serbatoio 30 1
    PF06 23 Soglia 1 30 1
    PF07 24 Soglia 2 30 1
    PF08 25 Soglia on/off 30 1
    PF09 26 Cambio potenza 0 1
    PF10 27 Ritardo P1/P2 0 1
    PF11 28 Durata pulizia 0 1
    PF12 29 Fumi pulizia 250 10
    PF13 30 Coclea pulizia 0 25
    PF14 31 Pulizia esclusa 0 1
    PF15 32 Fumi avviamento 250 10
    PF16 33 Fumi spegnimento 250 10
    PF17 34 Fumi allarme 250 10
    PF18 35 Aria allarme 60 5
    PF19 36 Attesa fiamma 0 1
    PF20 37 Aspirazione attesa fiamma 250 10
    P100 54 Var coclea -45 5
    P101 55 Var aspirazione -45 5
    P102 56 Var flusso -45 5
    76 Crono abilitato 0 1
    77 Crono1 accensione [minuti] 0 10
    78 Crono1 spegnimento [minuti] 0 10
    79 Crono1 lunedì 0 1
    80 Crono1 martedì 0 1
    81 Crono1 mercoledì 0 1
    82 Crono1 giovedì 0 1
    83 Crono1 venderdì 0 1
    84 Crono1 sabato 0 1
    85 Crono1 domenica 0 1
    87 Crono2 accensione [minuti] 0 10
    88 Crono2 spegnimento [minuti] 0 10
    89 Crono2 lunedì 0 1
    90 Crono2 martedì 0 1
    91 Crono2 mercoledì 0 1
    92 Crono2 giovedì 0 1
    93 Crono2 venderdì 0 1
    94 Crono2 sabato 0 1
    95 Crono2 domenica 0 1
    97 Crono3 accensione [minuti] 0 10
    98 Crono3 spegnimento [minuti] 0 10
    99 Crono3 lunedì 0 1
    100 Crono3 martedì 0 1
    101 Crono3 mercoledì 0 1
    102 Crono3 giovedì 0 1
    103 Crono3 venderdì 0 1
    104 Crono3 sabato 0 1
    105 Crono3 domenica 0 1
    107 Crono4 accensione [minuti] 0 10
    108 Crono4 spegnimento [minuti] 0 10
    109 Crono4 lunedì 0 1
    110 Crono4 martedì 0 1
    111 Crono4 mercoledì 0 1
    112 Crono4 giovedì 0 1
    113 Crono4 venderdì 0 1
    114 Crono4 sabato 0 1
    115 Crono4 domenica 0 1

    INFORMAZIONI DI STATO
    PARAM. IND.MEM. DESCRIZIONE ADD RATIO
    RAM 01 Temperatura ambiente 0 2
    EPR 125 Temperatura impostata 0 1
    RAM 115 Temperatura aria aspirata 0 2
    RAM 90 Temperatura fumi 0 1
    RAM 13 Giri coclea 0 25
    RAM 55 Giri ventola fumi 250 10
    EPR 127 Potenza impostata 0 1
    RAM 101 Ora attuale 0 1
    RAM 102 Minuti attuali 0 1
    RAM 100 Giorno settimana 0 1
    RAM 103 Data 0 1
    RAM 104 Mese 0 1
    RAM 105 Anno 0 1
    RAM 33 Stato funzionamento 0 1
    (0 = spenta, 1/2=accensione, 3=avvio
    4=lavoro, 6=pul.finale)


    Gran parte di queste locazioni di memoria possono essere riscritte, al fine di poter realmente gestire la stufa da remoto, nonchè fare un backup/restore di tutti i parametri tecnici di configurazione.
    Il comando di scrittura è così composto:
    - un byte per indicare il banco di memoria da scrivere(80h per la RAM, A0h per la EPROM)
    - un byte per l'indirizzo da scrivere (da 0h a FFh)
    - un byte con il valore da scrivere
    - un byte di CRC, come sommatoria fra i tre byte di cui sopra

    In particolare la locazione 21h della RAM (in tabella indicata come RAM 33) consente di accendere e spegnere la stufa, inviando rispettivamente i comandi 80h 21h 01h A2h e 80h 21h 06h A7h

    Prima di passare definitivamente all'interfacciamento con un sistema Arduino, sto realizzando un sw per windows con cui acquisire, registrare e modificare tutti i parametri resi disponibili:
    stovectrl1


    Edited by laki05 - 15/3/2015, 08:37
     
    Top
    .
  2. esuez
     
    .

    User deleted


    grazie per la condivisione!
    vorrei poter impostare la potenza ma non so come gestire il byte di crc che rislulterebbe maggiore di 255....
    grazie molte se vorrai dare ulteriori indicazioni a beneficio degli smanettoni....:))
     
    Top
    .
  3. esuez
     
    .

    User deleted


    mi rispondo da solo, impara come si somma in modulo.....:) quindi per esempio 290 diventa 22
     
    Top
    .
  4. smemail74
     
    .

    User deleted


    ciao,
    questo era quello che volevo fare io.
    A me interessava solo accendere e spegnere la stufa ma controllata con Raspberry.
    Il problema è che la mia centralina è DUEPI EVO e sembra che manuali o software vari di gestione non si trovino :(
     
    Top
    .
  5. esuez
     
    .

    User deleted


    se non c'è modo di interagire un metodo più 'brutale' può essere programmare i timer a vari orari di accensione e da remoto dare corrente alla stufa, ovviamente solo per accenderla...
     
    Top
    .
  6. esuez
     
    .

    User deleted


    qualcuno ha capito se è possibile settare l'orologio? modificando l'ora in ram non funziona perchè poi viene riscritta di nuovo dall'rtc... :\
    magari un 'flag' in ram che comanda l'allineamento delll'rtc con l'ora in ram?? oppure scriverla in una certa locazione...
     
    Top
    .
  7.  
    .
    Avatar

    Napalm

    Group
    Member
    Posts
    5,523
    Location
    Rijeka,Croazia

    Status
    Anonymous
    Aggiornamento orologio:

    Prima sequenza per anno ( 2015 - F=15 )

    tx A0 FD 0F AC rx AC 0F
    tx 20 FD rx 2C 0F

    Poi la sequenza per mese (4), giorno (16 ), DOW ( giovedi=4 ) , ora ( 21 ) e minuti (06)

    Log dell TX da PC:

    A0 FD 0F AC

    20 FD

    A0 FC 04 A0

    20 FC

    A0 FB 10 AB

    20 FB

    A0 F8 04 9C

    20 F8

    A0 F9 21 BA

    20 F9

    A0 FA 06 A0

    20 FA
     
    Top
    .
  8.  
    .
    Avatar

    SUPERNOVA

    Group
    Super Moderatore
    Posts
    9,757
    Location
    Roma

    Status
    Anonymous
    @ laki05, stai mettendo a disposizione di tutti un utilissimo strumento. Bravissimo da tutto il forum
     
    Top
    .
  9. esuez
     
    .

    User deleted


    CITAZIONE (bmwmilos @ 28/11/2015, 07:43)
    Aggiornamento orologio:

    Prima sequenza per anno ( 2015 - F=15 )

    tx A0 FD 0F AC rx AC 0F
    tx 20 FD rx 2C 0F

    Poi la sequenza per mese (4), giorno (16 ), DOW ( giovedi=4 ) , ora ( 21 ) e minuti (06)

    Log dell TX da PC:

    A0 FD 0F AC

    20 FD

    A0 FC 04 A0

    20 FC

    A0 FB 10 AB

    20 FB

    A0 F8 04 9C

    20 F8

    A0 F9 21 BA

    20 F9

    A0 FA 06 A0

    20 FA

    grazie!!!
    spero di riuscire nell'intento di passare l'ora prelevata da server ntp con l'esp8266...
    mi unisco anche io ai complimenti e ringraziamenti ad Uman e laki05!
     
    Top
    .
  10. esuez
     
    .

    User deleted


    per chi smanetta con esp8266/arduino magari può interessare una routinetta che, utilizzando la libreria Time.h, passa l'ora alla stufa:

    esempio per passare anno e mese:

    byte stfyear[] = {0xA0,0xFD,tima(year()-2000),(0xA0+0xFD+tima(year()-2000)-256)};
    Serial.write(stfyear, sizeof(stfyear));

    byte stfmonth[] = {0xA0,0xFC,tima(month()),(0xA0+0xFC+tima(month())-256)};
    Serial.write(stfmonth, sizeof(stfmonth));

    int tima(int tim){
    if(tim>49 && tim<60)tim=tim+30;
    if(tim>39 && tim<50)tim=tim+24;
    if(tim>29 && tim<40)tim=tim+18;
    if(tim>19 && tim<30)tim=tim+12;
    if(tim>9 && tim<20)tim=tim+6;
    return tim;
    }


    saluti!!
     
    Top
    .
  11. dr.jekyll
     
    .

    User deleted


    buona sera, sono riuscito, attraverso un circuito simile a quello postato qui a comunicare con la stufa via seriale, riesco attraverso un modulo esp8266 ad inviare i bytes necessari per far accendere e spegnere la stufa, la cosa stana che accade, alla quale non so dare una spiegazione e per la quale chiedo il vostro aiuto, è che parte la sequenza di avvio ma la durata dello start dura di più ed il pellet comincia ad caricare dopo rispetto alla accensione attraverso il pulsante presente sul display della stufa, ma soprattutto la stufa si spegne con l'allarme di mancata accensione. questo accade solo se l'accendo attraverso la porta seriale. Sapreste dirmi quale è il problema.
     
    Top
    .
  12.  
    .
    Avatar

    infreddolito perso

    Group
    Member
    Posts
    54
    Location
    Valle Camonica

    Status
    Offline
    CITAZIONE (dr.jekyll @ 11/4/2017, 17:53) 
    buona sera, sono riuscito, attraverso un circuito simile a quello postato qui a comunicare con la stufa via seriale, riesco attraverso un modulo esp8266 ad inviare i bytes necessari per far accendere e spegnere la stufa, la cosa stana che accade, alla quale non so dare una spiegazione e per la quale chiedo il vostro aiuto, è che parte la sequenza di avvio ma la durata dello start dura di più ed il pellet comincia ad caricare dopo rispetto alla accensione attraverso il pulsante presente sul display della stufa, ma soprattutto la stufa si spegne con l'allarme di mancata accensione. questo accade solo se l'accendo attraverso la porta seriale. Sapreste dirmi quale è il problema.

    Che comando hai inviato per l'accensione ? 0x21 0x01 ?
    Anch'io ho riscontrato un comportamento strano ma con lo spegnimento, inviando 0x21 0x07 la stufa inizia un lungo ciclo di raffreddamento.
    Probabilmente la locazione 0x21 non è utilizzata per il normale comando di accensione/spegnimento, ma per la gestione di situazioni di errore.
     
    Top
    .
  13. dr.jekyll
     
    .

    User deleted


    ciao infreddolito perso, il comando è questo: 0x80, 0x21, 0x01, 0xA2, ma è giusto. Il problema era nello sketch, da quello che mi sembra di aver capito mandando il comando tramite browser mi entrava in una specie di loop che mandando più volte il comando di accensione faceva fare alla stufa un ciclo d'accensione sbagliato , mentre non c'era nessun problema se il comando lo mandavo tramite pc. Ora con uno sketch diverso tutto funziona alla perfezione.
     
    Top
    .
  14. Francesco Raschi
     
    .

    User deleted


    Ciao a tutti,
    visto questo schema pensavo di replicarlo sulla mia sideros (micronova i050), e successivamente aggiungere un esp8266 per controllare la stufa via wifi (poi vedrò se far gestire tutto all'ESP o usarlo solo come seriale-wireless).
    In linea di massima allo schema precedente va aggiunto l'esp8266 e un level-shifter (l'esp ha logica a 3,3v mentre presumo che l'uscita del max sia a 5v).
    Ora la domanda,
    Quanta corrente è possibile tirare dalla porta seriale della micronova?
    Con un AS1117 sarebbe possibile alimentare ESP (e dare Rv al level shifter) sempre attraverso la seriale della micronova, senza dover usare un alimentatore esterno.
    In linea di massima il level shifter farebbe max 5mA a canale (2 canali 10mA) e l'esp 170 in trasmissione, diciamo quindi 200mA.
    Il MAX se non erro fa sui 15mA, diciamo 250mA in totale per stare larghi... La micronova ce la farà?
    Altrimenti sarebbe sufficiente un caricabatterie usb con gnd in comune...
     
    Top
    .
  15. FM84
     
    .

    User deleted


    Ciao Francesco e ciao tutti.
    Io ho usato l'interfaccia fatta da laki05 (grazie) con la sola differenza che la mia stufa non porta fuori i 5V ma i 12V e quindi ho usato un LM7805 per generarmi i 5V dalla stufa. In questo caso l'assorbimento è bassissimo e nonostante l'uso di un convertitore lineare non ci sono problemi.
    Con tale interfaccia mi sono collegato con un portatile e ho comunicato con la stufa con immensa soddisfazione. Adesso però dovrei cambiare interfaccia per far parlare una raspberry con la stufa.
    E qui mi sono fermato perchè anch'io avevo valutato di prendere un ESP-01 a cui collegare un DC-DC power converter per generare i 3.3V dai 12V presenti nella stufa e alimentare quindi l'ESP. Usare quindi uno schema trovato qui nel forum per adattare la linea dati tx-rx TTL alla doppia linea tx e rx 3.3V dell'esp (non serve il MAX!). Secondo me questa era una bella soluzione perchè avrebbe permesso di avere un modulo plug-in senza avere doppie alimentazioni o altro però sinceramente ho un po abbandonato l'idea in quanto in rete ho trovato che l'ESP8266 in accensione assorbe 450mA. E' pur vero che rapportati ai 12V con un efficienza del DC-DC del'80% corrispondono a 150mA però non sono proprio pochi e visto che la scheda ufficiale che vendono per collegarsi in wifi l'hanno fatta con alimentazione esterna forse non è il caso. Considera che se tu hai 5V invece di 12V in accensione dovresti assorbire quasi 350mA... Se usi il Wemos D1 Mini hai già tutto pronto perchè lo si alimenta via USB e basta solo adattare le due seriali. Secondo me vai più tranquillo. Io però dal momento che ho abbandonato l'idea del modulo plug-in autoalimentato, e che dovrei vedere un cavo di alimentazione dietro la stufa, sto pensando di collegare la raspberry direttamente alla stufa dato che dista meno di 4 metri. Magari aprirò un nuovo post per questo perchè mi servirà un aiutino...
     
    Top
    .
105 replies since 15/3/2015, 07:51   25610 views
  Share  
.