Forum

   

Tutorial

   

Servizi

   

Sistema per il controllo remoto da Smartphone di un qualunque sistema elettronico

Valutazione attuale:  / 14
ScarsoOttimo 

Questo articolo presenta un sistema che permette di controllare da remoto qualunque progetto a microcontrollore, attraverso un pannello di controllo riconfigurabile visualizzato su uno smartphone, la cui grafica è decisa interamente dall'utente.
Il sistema è concepito per poter essere usato da tutti e non serve progettare alcuna applicazione dal lato Smartphone, né conoscere alcun protocollo di comunicazione wireless.
L'articolo si snoda in due parti, nella prima parte si introduce il sistema di controllo remoto chiamato miuPanel (Mobile Interactive Universal Panel), nella seconda parte è presentato un semplice esempio di controllo remoto di due relè attraverso una scheda Arduino UNO.


Introduzione al sistema miuPanel

Il sistema miuPanel permette di controllare un qualunque circuito o apparecchiatura, basata su qualunque microcontrollore, PIC, ATMEGA, ST, MSP430, ecc., da remoto, attraverso uno Smartphone. Una centralina meteo, un sistema d'allarme, l'impianto fotovoltaico, l'accensione di lampade, l'apertura di un cancello, il controllo di un robot... insomma, tutto ciò che si presta a essere controllabile e monitorabile. In Figura 1 è riportata una rappresentazione grafica di un sistema tipico realizzabile per mezzo  di miuPanel.

 

Figura 1: Esempio di sistema ottenuto per mezzo di miuPanel
Figura 1: Esempio di sistema ottenuto per mezzo di miuPanel.

Il sistema è composto da un modulo WiFi (che si collega al sistema a microcontrollore) e da un'applicazione gratuita. SCF Electronics (che ha sviluppato il sistema) ha deciso di lanciare il sistema utilizzando un modulo WiFi già diffuso, l'ESP-01 (basato sul SoC ESP8266). Questo ha permesso di mantenere i costi bassi ma al contempo di avere un prodotto ad alte prestazioni. Però, per sottolineare il fatto che il firmware del modulo è stato interamente riprogettato, hanno chiamato il loro modulo SCF-01. In Figura 2 è mostrato un dettaglio del modulo  SCF-01 montato su un adattatore.

Figura 2: Modulo  SCF-01 montato sull'adattatore 5V-3.3V ADP-01

Figura 2: Modulo  SCF-01 montato sull'adattatore 5V-3.3V ADP-01.

Semplificando al massimo, l'applicazione dal lato Smartphone, fornita gratuitamente, implementa un telecomando bidirezionale, la cui grafica (LED, pulsanti, slider, testo, immagini, grafici, sfondi, texture... ) è decisa interamente dall'utente.
Il sistema di controllo è definito "universale" proprio perché l'applicazione (sebbene molto complessa), dal punto di vista dell'utente, è come se fosse una lavagna vuota, e la grafica del telecomando da visualizzare sul telefono viene inviata dal microcontrollore attraverso un unico messaggio seriale molto compatto. E' proprio questa stringa di caratteri, definita e scritta dall'utente, che comunica all'applicazione i controlli da visualizzare e la loro disposizione sul pannello, rendendo dunque non necessaria la programmazione di un'applicazione dedicata, oltre a quella fornita gratuitamente.

L'applicazione, ricevuto il messaggio di definizione inviato dal microcontrollore, visualizza il telecomando corrispondente. Un esempio di telecomando molto semplice potrebbe essere composto da un LED e un interruttore, ottenibile inviando al modulo Wi-Fi la stringa seriale del tipo:

$P:L1G:0:Relay;/W1:0;

dove il "$P: identifica che il messaggio è di tipo definizione pannello e il ";" separa gli oggetti che è possibile inserire sul pannello. Quanto appena detto  è mostrato graficamente in Figura 3.

 

Figura 3: Sequenza per l'invio di un pannello dal microcontrollore allo SmartPhone


Figura 3: Sequenza per l'invio di un pannello dal microcontrollore allo SmartPhone.

Il linguaggio di descrizione grafica, sviluppato appositamente per questo sistema (chiamato HCTML), è stato concepito per essere quanto più compatto possibile. Per esempio, la precedente stringa di definizione dice: definizione di un LED (L) con id =1 (1) di tipo green (G) avente lo stato iniziale off (0) e visualizza il testo "Relay" (Relay), vai a capo (/), switch (W) di tipo (1) con stato iniziale off (0). Nella pagina Panel Design Simulator del sito miupanel, è possibile provare ad inserire la stringa di definizione del pannello e simulare l'effetto che produce sul telefono. Prova ad inserire:  

L1G:0:Relay;/W1:0;

Nota: Fate attenzione all'eventuale aggiunta di caratteri vuoti

Attualmente è possibile aggiungere al pannello i seguenti oggetti:

  • LEDS
  • BUTTONS
  • SWITCHES
  • TEXTS
  • MESSAGES
  • PICTURES
  • ANALOG BARS
  • SLIDERS
  • PLOTS
  • EDITS
  • DESKTOPS

Riprendendo l'esempio del telecomando precedente, con un LED e un interruttore: successivamente alla definizione del telecomando, il micro dell'utente può inviare al telecomando un messaggio di accensione del led che ha precedentemente creato sul pannello. Per esempio per accendere il LED con id uguale a 1, bisogna inviare la stringa: #L11 (maggiori dettagli si possono trovare sul sito miupanel, in fondo alla pagina di descrizione di ciascun oggetto, nella sezione "Object usage").
A sua volta, il micro può ricevere in tempo reale dal modulo che lo switch con id uguale ad 1 che aveva definito sul pannello è stato premuto ed è commutato allo stato ON; in questo caso il micro riceverà:

#W11

E' possibile ordinare la grafica di pannello inserendo gli oggetti all'interno di tabelle e sottotabelle (chiamate constructors). In fase di definizione del pannello, si possono anche specificare per ogni oggetto (o per ogni tabella) degli "stili" (dimensione, rotazione, sfondo, bordo, ombreggiatura, ecc.) e si possono fare altre cose avanzate.

Che succede se l'applicazione è chiusa? Il comando di "accendi LED" inviato all'applicazione dal microcontrollore dell'utente non arriva e quindi il sincronismo tra "stato del sistema" e "stato telecomando" si perde?
NO, nessun problema!
Il modulo WiFi memorizza nella sua RAM l'informazione e, appena l'applicazione viene aperta, visualizzerà il LED accesso.

Infatti, il microcontrollore dell'utente (per fissare le idee, pensiamo ad una scheda Arduino) invia tramite UART tutti i messaggi destinati al telecomando (o messaggi di configurazione destinati al modulo WiFi stesso) e poi, è il modulo WiFi che si occupa di interagire con il telecomando. E' il modulo WiFi che si occupa di gestire la connessione Internet tra modulo WiFi e Smartphone (diretta, o indiretta attraverso un router) e si occupa della sincronizzazione tra "stato del vostro sistema" e "stato visualizzato sul telecomando",  per cui è come se il vostro microcontrollore fosse direttamente collegato al telefono con un lungo cavo virtuale.

Riepilogando quanto detto;

Arduino (o qualunque altro micro) invia/riceve messaggi seriali, definizione grafica del telecomando, aggiornamento dello stesso, o comandi di settaggio del modulo Wi-Fi stesso.
I messaggi sono codificati nel linguaggio compatto HCTML, concepito appositamente per descrivere oggetti grafici da inserire sul "telecomando" visualizzato sull'applicazione.
L'applicazione è gratuita e riconosce solo i moduli WiFi che implementano il sistema miuPanel, disponibili direttamente sul sito miupanel.
Se il router a cui il modulo WiFi si connette ha un IP pubblico (sono la maggior parte), il sistema può essere controllato da qualunque parte del mondo.
L'aggiornamento del firmware dei moduli WiFi viene lanciato direttamente dall'applicazione e il processo di download e aggiornamento della nuova release avviene automaticamente on the fly.


Esempio: controllo remoto di due relay

L'obbiettivo è quello di costruire un semplice pannello di controllo che consenta il controllo di un modulo che ospita due relay elettromeccanici. Maggiori dettagli ed esempi possono essere trovati sul sito www.miupanel.com.

Gli oggetti grafici usati nel pannello sono:

  • Oggetto DESKTOP (carattere D)
  • Oggetto TESTO (carattere )
  • Oggetto LED (carattere L)
  • Oggetto SWITCH (carattere W)


La stringa di definizione del pannello usato è la seguente:


D!g11;/5T*25fb:Arduino Relay;=*16/30{mL1G:0;|*12W1:0;|T:Relay 1;}/{mL2G:0;|*12W2:0;|T:Relay 2;}/30*20T#FF0ht3,000:&#956Panel;

Magari a primo impatto sembra incomprensibile, ma scomponendola, è di facile interpretazione, soprattutto se in contemporanea aprite la pagina che descrive la sintassi di definizione dell'oggetto usato e la pagina che raccoglie analiticamente tutti i caratteri HCTML (pagina HCTML Symbols).

In particolare le varie componenti della stringa hanno il seguente significato:

D!g11; Oggetto "desktop" con sfondo l'immagine n.11 (riferita alla collezione immagini)
/5 Inserisci uno spazio verticale (ampiezza 5) e vai a capo
T*25fb:Arduino Relay; Oggetto "testo" con dimensione 25 (stile *) e font bold (fb) con testo "Arduino Relay"
= inserisce linea orizzontale
*16 Specifica la dimensione degli oggetti seguenti o contenuti nella tabella.
/30 Inserisci uno spazio verticale (ampiezza 30) e vai a capo
{ Apri un container (una tabella). Di default la tabella è 1x1
m Allinea il contenuto della tabella nel centro
L1G:0; Oggetto LED, con id=1, di tipo verde (G) e stato iniziale OFF (0).
| Inserisci colonna al container (la Tabella diventa 1x2)
*12 Specifica dimensione degli oggetti seguenti o contenuti nella tabella.
W1:0; Oggetto interruttore (W) con id=1 (1) e stato iniziale OFF (0)
| Inserisci colonna al container (la tabella diventa 1x3)
T:Relay 1; Oggetto "testo" (T) che visualizza sul pannello la stringa "Relay 1"
} Chiudi il container (}).

E cosi via...ottenendo il pannello di Figura 4.

Figura 4: Esempio di pannello con due LED e due interruttori


Figura 4: Esempio di pannello con due LED e due interruttori.

La scheda con i 2 Relay utilizzata consente di pilotare grossi carichi sia in DC che AC, mantenendo l'isolamento elettrico tra la logica di pilotaggio e il carico attraverso 2 optoisolatori, oltre ai Relay stessi. Ciascun azionamento è pilotabile in maniera indipendente dall'altro con un segnale logico a 5V. Grazie alla presenza dell'optoisolatore (che integra una coppia LED- fototransistor), il microcontrollore che pilota la scheda di fatto è come se pilotasse un LED.

Dal momento che molti dispositivi elettronici funzionano con tensione di 5 V (come la scheda Arduino UNO), nel kit miuPanel oltre al modulo WiFi SCF-01, è presente un utile adattatore (chiamato ADP-01) che permette di alimentare il modulo WiFi con 5 V anziché 3,3 V (che è la tensione richiesta dal modulo SCF-01).

 


Figura 5: Montaggio del sistema Arduino, il modulo SCF-01 e i Relay.

Nello sketch per Arduino, riportato di seguito, si riconoscono, nella routine di setup, le impostazioni preliminari della porta seriale del micro e il messaggio di definizione del pannello sul telefono.

Nel ciclo main (nell'ambiente Arduino chiamato "loop") il microcontrollore controlla continuamente se è arrivato un messaggio dal pannello remoto, terminano con il carattere \n, ed in caso affermativo passa ad analizzarlo. Identificato a quale dei due pulsanti si riferisce il messaggio, Arduino commuta il relativo relè e invia un messaggio all'applicazione per commutare il LED corrispondente sul pannello. In questo modo, vedendo il LED definito sul pannello commutare, avremo la certezza che il comando di accensione/spegnimento del relè è stato elaborato correttamente da Arduino.


void setup() {

  // Initialize Serial Port
  Serial.begin(57600);
 
  // Let uPanel start
  delay(3000);

  // Discharge old partial messages
  Serial.println("");
 
  // Send The Panel (A LED and a Switch)
  Serial.println("D!g11;/5T*25fb:Arduino Relay;=*16/30{mL1G:0;|*12W1:0;|T:Relay 1;}/{mL2G:0;|*12W2:0;|T:Relay 2;}/30*20T#FF0ht3,000:&#956Panel;");
 
  // Initialize digital output pin
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);

}

String Msg;

void loop() {
 
  int c;
  while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
  if (c == '\n')                                       // is the message complete?
  {
    if (Msg.equals("#W10")) {digitalWrite(8,1); Serial.println("#L10");}    // Turn OFF LED 1 and Relay if switch is OFF
    if (Msg.equals("#W11")) {digitalWrite(8,0); Serial.println("#L11");}    // Turn ON LED 1 and Relay if switch is ON


  if (Msg.equals("#W20")) {digitalWrite(9,1); Serial.println("#L20");}    // Turn OFF LED 2 and Relay if switch is OFF
  if (Msg.equals("#W21")) {digitalWrite(9,0); Serial.println("#L21");}    // Turn ON LED 2 and Relay if switch is ON

    Msg = "";
  }
   
}

 

Bibliografia

Commenti   

Man47
0 #5 Semplificazione ProgettoMan47 2018-05-29 18:10
Buona sera
è possibile sostituire l'hardware impiegato con la scheda:
WIFI Relay Module ESP8266 IOT APP Remote Controller

In attesa di una sollecita risposta
Grazie Pasquale
Mauro Laurenti
0 #4 RE: Sistema per il controllo remoto da Smartphone di un qualunque sistema elettronicoMauro Laurenti 2015-12-14 16:32
Confermo che il problema e' stato risolto.

Saluti,

Mauro
technomaker
0 #3 RE: Sistema per il controllo remoto da Smartphone di un qualunque sistema elettronicotechnomaker 2015-12-05 12:35
Ciao digien,
probabilmente non hai eseguito correttamente la procedura di attivazione:

http://www.miupanel.com/Getting-Started/MODULE-ACTIVATION
digien
0 #2 RE: Sistema per il controllo remoto da Smartphone di un qualunque sistema elettronicodigien 2015-12-05 00:30
Lo Smartphone riconosce il modulo WiFi, ma l' UP non riconosce nessun dispositivo WI-FI.Quale potrebbe essere la causa?
Grazie
Enzo
technomaker
0 #1 Discutiamone sul forumtechnomaker 2015-09-24 00:33
Ho aperto una discussione sul sistema miuPanel sul forum:

http://www.laurtec.it/forum/15-progetti/8007-faq-sul-sistema-miupanel

Scrivete pure, risponderò con piacere :-)
A presto

Per commentare l'articolo bisogna Registrarsi o effettuare il Login.

   

Registrati  

   
© LaurTec 2006-2015