Sistema di telemetria per drone marino
Misure da effettuare:
Misura di tensioni e correnti in sottosistemi con alimentazione indipendente
Misura di temperatura in più punti
Misura barometrica
Convertitore ADC MCP3428
Velocità e Risoluzione:
- 15 SPS (16 bits)
- 60 SPS (14 bits)
- 240 SPS (12 bits)
Guadagno programmabile:
X1, x2, x4, x8
Vref: 2.048V
Sensore tensione
Misura di tensione tramite convertitore AD collegato con partitore resistivo.
Vmax ADC=2.048V
Sensore corrente
Misura di corrente tramite sensore di Hall per corrente continua ad anello.
IsolatoreDigitale
Schema circuito ADCI2
C B
US
ADC 4 canali16 bit
Alimentazionedal Raspberry 3.3V
Regolatore5.5V
AlimentazionedispositivoAlimentazionedispositivo
Massa riferimento
4 Canali di misura}2 Bit di selezione indirizzo I2C
Sensore temperatura
Sensore di temperatura one-wire Dallas DS18B20
Standard: 16 KbpsOverdrive: 140 Kbps
Sensore temperatura
Collegamento
DS18B20 sul
Raspberry
64-bit serial code-55°C to +125°C±0.5°C -10°C to +85°C9-bit to 12-bit0.5°C, 0.25°C, 0.125°C, 0.0625°C
Sensore barometrico BMP085 su bus I2CI2
C B
US
MisuratorePressione Digitale
BMP085+
Termometro
Alimentazionedal Raspberry 3.3V
● Logic: 3 to 5V compliant● Pressure sensing range: 300-1100 hPa
(9000m to -500m above sea level)● Up to 0.03hPa / 0.25m resolution● -40 to +85°C operational range, +-2°C
temperature accuracy
Circuito realizzato
Regolatore 3.3V
Isolatore Digitale
Convertitore A.D.
Partitori di tensione
Selettori indirizzo I2C
Raspberry web server
TORNADO WEB SERVER
web application framework scritto in Python
Raspberry web server
PaginaHTML
sulbrowserremoto
Client
TORNADO
Server
Connessione client
ThreadTermometro
N°1
ThreadTermometro
N°2
ADC
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
Connessione di un client
Raspberry web server
ClientServer
Connessione client
Index.htmlPaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Risposta del server con la pagina index.html
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.htmlPaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Richiesta dati dalla pagina index.html al server
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Risposta del server con dati in formato json
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
Comando
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Comando inviato dal client al server
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
Comando
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Richiesta dai thread ai sensori
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
Comando
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Risposta dai sensori ai thread
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
Comando
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
In seguito alla richiesta da parte del client, il server chiede le variabili ai sensori
Raspberry web server
ClientServer
Connessione client
Richiesta dati
Index.html
Dati formato JSON
Comando
PaginaHTML
sulbrowserremoto
TORNADO
ThreadTermometro
N°1
ThreadTermometro
N°2
Pressione etemperatura
SensoreTemp.
N°1
SensoreTemp.
N°2
LogDati
ADC
Il server legge le variabili, le memorizza nel file di log e le ritorna al client in formato json
Visualizzazione e richiesta dati al server
Libreria JustGage
<div id="gauge1" style="width:180px; height:200px"></div>
.
.
.
.
var g2 = new JustGage({ id: "gauge2", value: 0, min: 80000, max: 120000, title: "Pressione Atmosferica", label: "Pascal", levelColorsGradient: true, decimals: 0 });
Visualizzazione e richiesta dati al server
setInterval(function() { if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","getvalues.php",false); xmlhttp.send(null);
parametri = (xmlhttp.responseText).split(';');
g1.refresh( parametri[0] ); g2.refresh( parametri[1] ); g3.refresh( parametri[2] ); g4.refresh( parametri[3] );
gADC1A.refresh( parametri[4] ); gADC1B.refresh( parametri[5] ); gADC1C.refresh( parametri[6] ); gADC1D.refresh( parametri[7] ); gADC2A.refresh( parametri[8] ); gADC2B.refresh( parametri[9] ); gADC2C.refresh( parametri[10] ); gADC2D.refresh( parametri[11] );
Visualizzazione e richiesta dati al server
document.getElementById("sessione").innerHTML = parametri[12]; if (parametri[13]=="True") { document.getElementById("stato").innerHTML = "Log attivo"; document.getElementById("Bt_Start").disabled = true; document.getElementById("Bt_Stop").disabled = false; document.getElementById("Bt_View").disabled = true; document.getElementById("Bt_Erase").disabled = true; document.getElementById("Bt_Shutdown").disabled = true; } else { document.getElementById("stato").innerHTML = "Log NON attivo"; document.getElementById("Bt_Start").disabled = false; document.getElementById("Bt_Stop").disabled = true; if (parametri[14]=="True") { document.getElementById("Bt_View").disabled = false; document.getElementById("Bt_Erase").disabled = false; } else { document.getElementById("Bt_View").disabled = true; document.getElementById("Bt_Erase").disabled = true; } document.getElementById("Bt_Shutdown").disabled = false; } } }, 500);
Comandi inviati al server
● Start Log
● Stop Log
● View Log
● Erase Log
● Shutdown
Comandi inviati al server
function DoShutdown() { if(confirm("Procedo allo spegnimento definitivo del Raspberry?")) { if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); xmlhttp.open("get","?shutdown=now",true); xmlhttp.send(null); } } };