Sommario:

Sensore di polvere di sodio su Android: 6 passaggi
Sensore di polvere di sodio su Android: 6 passaggi

Video: Sensore di polvere di sodio su Android: 6 passaggi

Video: Sensore di polvere di sodio su Android: 6 passaggi
Video: Come azzerare le spie in carrozzeria 2024, Luglio
Anonim
Sensore di polvere di sodio su Android
Sensore di polvere di sodio su Android

Un anno fa un mio amico ha tenuto un seminario di fine settimana sul monitoraggio ambientale. L'obiettivo del workshop era costruire un sensore di polvere collegato a una scheda Raspberry Pi per inserire i dati di misurazione su un server che fornisse mappe di concentrazione della polvere aggiornate di frequente. Il mio amico ha chiesto se esiste un modo per ottenere i dati del sensore direttamente sul suo smartphone per il monitoraggio e la registrazione. Quindi ho cercato su Internet una scheda tecnica e ho visto che il sensore aveva una semplice interfaccia UART con protocollo 9600Baud 8N1. Ma come collegare un UART a uno smartphone? Bene, è facile. Ho solo dovuto usare uno di quegli onnipresenti piccoli moduli Bluetooth che forniscono un comport emulato su Android. Ora guarda come l'ho realizzato.

Passaggio 1: cosa ti serve

Quello di cui hai bisogno
Quello di cui hai bisogno
Quello di cui hai bisogno
Quello di cui hai bisogno

Hai bisogno delle seguenti parti

  • Un connettore di accoppiamento JST XH a 7 pin per l'interfaccia Sodial con fili. Il mio l'ho comprato su Ebay.
  • Un modulo Bluetooth HC05 o 06 compatibile con connettore UART
  • Un convertitore USB-seriale con interfaccia di livello TTL. Lo usiamo per dare al modulo BT un nome univoco
  • Sensore di polvere Sodial SDS011. Ho preso il mio da Ebay
  • un pezzo di veroboard
  • Connettore USB-B
  • filo
  • Un pezzo di legno su cui montare tutto

Allora avrai bisogno di alcuni semplici strumenti:

  • Un seghetto per tagliare il legno
  • pinzette
  • saldatore e saldatore
  • tronchese
  • Pistola per colla a caldo
  • Un pezzo di manicotto in silicone da 8 mm (non nella foto)

È possibile scaricare la scheda tecnica Sodial SDS011 qui Scheda tecnica Sodial SDS011

Passaggio 2: preparazione del modulo Bluetooth

Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth
Preparazione del modulo Bluetooth

Il modulo BT ha un'interfaccia UART con livello TTL. Può essere riconfigurato con i comandi "AT" come facevamo con i modem Internet nei tempi antichi. Per collegarlo a un programma terminale sulla tua macchina devi adattare l'UART al tuo computer. Ho usato un convertitore USB-RS232 che ho comprato su amazon. Ho applicato un connettore per il modulo BT e ho instradato l'alimentazione 3, 3V e GND dal convertitore al modulo BT. Quindi ho collegato le rispettive linee TxD e RxD in crossover. TxD dal convertitore USB a RxD dal modulo BT e viceversa.

Ho una macchina Linux e ho usato cutecom. Dopo aver collegato il convertitore USB, la porta era "ttyUSB0". Puoi trovare i nomi delle porte nella directory "/dev" sulla tua macchina Linux. Per gli utenti di Windows consiglierei "hterm". È facile da usare. Digita "AT" e dovresti ottenere "AT" come risposta. Quindi digitare "AT+NameSensor" per dare al modulo BT il nome "Sensor"

Passaggio 3: montaggio delle parti

Montaggio delle parti
Montaggio delle parti
Montaggio delle parti
Montaggio delle parti
Montaggio delle parti
Montaggio delle parti
Montaggio delle parti
Montaggio delle parti

Taglia un pezzo di legno di una dimensione adatta a prendere tutte le parti. Collegare tutti i segnali come indicato nello schema. È una buona idea mettere una guaina di silicone attorno ai fili per proteggerli. Saldare la presa USB-B sulla perfboard. Serve solo per l'alimentazione. Fissare tutte le parti con viti sulla base in legno. Infine incollare a caldo i cavi per fissarli sul legno.

Passaggio 4: associazione

accoppiamento
accoppiamento
accoppiamento
accoppiamento

Alimenta l'applicazione del sensore collegando un alimentatore USB. Un LED rosso sul modulo BT inizierà a lampeggiare. Non provare ad accoppiarlo con il tuo smartphone Android. È necessario inserire un codice pin. Questo è "1234". Dopo aver inserito il codice, lo smartphone dovrebbe essere associato al modulo BT.

Passaggio 5: il software

Mi piace scrivere app Android sulla piattaforma di destinazione stessa. ti salva da tutte quelle cose di emulazione di cui devi preoccuparti se stai lavorando con Android Studio. Ho scoperto tre strumenti di sviluppo adatti su Android stesso

  • Mintori di base. Un interprete di base con un ricco set di comandi per armeggiare con quasi tutto su Android. Puoi creare scorciatoie per le tue app. Mintoris basic non contiene un compilatore. Quindi devi aver installato Mintoris su ogni dispositivo che stai utilizzando. Ma devi pagarlo solo una volta (circa 7€)
  • Di base! Interprete e compilatore di base estremamente buono (add-on per alcuni €). Quasi si aggancia a tutto in Android e puoi compilare app reali per distribuirle senza avere Basic! sul dispositivo di destinazione. Purtroppo di base! manca delle eccellenti funzioni di diagramma grafico di Mintoris
  • AIDE è un IDE semi professionale per lo sviluppo di Android in Java su Android. Con AIDE hai la massima flessibilità ma devi imparare java. AIDE ha costi annuali di circa 50€

Ho scelto Mintori. In questa sezione non ti darò un tutorial sulla programmazione in Mintoris ma una breve descrizione dei blocchi funzione

Nella parte seguente vengono dichiarati tre array per le due linee dati del sensore e i rispettivi timestamp. I dati del timestamp vengono utilizzati per etichettare l'asse x del diagramma. Il Sodial emette due flussi di dati ciascuno specificato per una dimensione particellare speciale. I due dustdata-array prendono questi valori.

WakeLock parziale

TextColor 100, 75, 10

ColoreTestoA 50, 50, 50

Allinea testo 0

Dimensione del testo 24

CLS

Popup "Misuratore del sensore di polvere (c) ARJ 2017"

Global dustData(), dustDataF(), timeStamp() Global index, choice, maxData, fileName$

Dim timeStamp (59)

Dim polvereDati(59)

Dim dustDataF(59)

Dim Menu$(4) = "max. 100 record di dati", "max. 1000 record di dati", "max. 5000 record di dati", "max. 10000 record di dati", "Esci"

'Inizia gli array

Per i = da 0 a 59

dustData (i) = 0

dustDataF(i) = 0

timestamp(i)=i

Avanti io

Avanti di un elenco di menù è configurato. Questo dà all'utente la possibilità di selezionare la dimensione massima dei dati da raccogliere. Questo è solo un interruttore di sicurezza per evitare che lo smartphone risucchi infiniti dati. Le funzioni BTgetPaired$() restituisce un elenco con tutti i dispositivi associati sul dispositivo Android, i loro nomi e l'indirizzo BT.

Lista Menu$(), scelta

'Seleziona la quantità massima se i dati devono essere archiviati

runLevel = 1

Seleziona scelta

Caso 0 maxData = 100

Caso 1 max Data = 1000

Caso 2 maxData = 5000

Caso 3 maxData = 10000

Caso 4 maxData = 0

Fine selezione

''Collega il sensore

coppia debole$(0)

coppia$() = BTGetPaired$()

Se coppia$(0) = "nessuno" Allora

Stampa "Nessun dispositivo associato trovato. BT è acceso?" Stampa "Programma terminato"

Fine

Finisci se

coppia List $ (), dispositivo di $

nome$=Estratto oggetto$(dispositivo$, 0)

indirizzo$=EstrattoArticolo$(dispositivo$, 1)

BTConnect 1, indirizzo $

'Attendere per il collegamento

Avanzamento ON

Stampa "Tentativo di connessione a";indirizzo$

Per i = da 1 a 20

Progresso i/2

Se BTGetstate (1) = 4, quindi esci per attendere 1000

Avanti io

Progresso OFF

'In caso di successo, connettersi al dispositivo BT

Se BTGetState(1) = 4 Then Print "Connected" Else Print "Impossibile connettersi a ";name$

Stampa "Programma terminato"

Fine

Finisci se

Il blocco successivo mostra l'acquisizione dei dati. Per ogni sessione di dati viene automaticamente aperto un file con il nome dell'ora e della data. Quindi il loop sta leggendo i dati del sensore. I dati sono compressi in diversi byte. Un insieme di byte è identificato da due caratteri ASCII 170 e 171. I seguenti dati vengono riorganizzati e inseriti negli array di polvere

Grafica attivata

'Apri file di dati da scrivere

fileName$ = FormatTime$(t, "yyyy-MM-dd-kk-mm-ss") + ".dat"

Open 1, fileName$, "w+" Print "Opened datafile ";fileName$ Writeln 1, FormatTime$(Time(), "yy-MM-dd")

Scritto 1, "Time Dust2.5 Dust10"

'Riempi array con i dati misurati

Dati $ = "" pacchetto $ = ""

indice=0

Esegui mentre maxData > 0

BTRead 1, pacchetto$, 10

dati$=dati$+pacchetto$

Se Len(data$) >= 10 Allora

If (ASCII(Left$(data$, 1))=170) & (ASCII(Right$(data$, 1)) = 171) Allora

dustDataF(index)=ASCII(Mid$(data$, 2, 1))

dustDataF(index)=(dustDataF(index)+256*ASCII(Mid$(data$, 3, 1)))/10

dustData(index)=ASCII(Mid$(data$, 4, 1))

dustData(index)=(dustData(index)+256*ASCII(Mid$(data$, 5, 1)))/10

Scriviln 1, FormatTime$(Time(), "kk:mm:ss") + " " + Str$(dustDataF(index))+ " " + Str$(dustData(index))

dati$=""

maxData = maxData-1

indice=indice+1

Se indice>59 Allora indice=0

dustData(indice)=0

dustDataF(indice)=0

Finisci se

Finisci se

Disegna grafico()

Aspetta 100

Ciclo continuo

Chiudi 1

Grafica disattivata

CLS Stampa "Programma terminato"

Fine

L'ultima parte è una subroutine che viene richiamata dopo ogni ricezione di dati. Cancella lo schermo, ridisegna il diagramma con i dati effettivi memorizzati negli array di polvere e timestamp.

' Disegna le coordinate, le etichette, le tacche e anche le curve dei dati

Sub DrawGraph()

' In modalità grafica, lo schermo torna al colore corrente

Colore 0, 0, 0

CLS

Colore 0, 0, 100

' Imposta il colore della grafica da usare per disegnare le linee della griglia

Colore testo 100, 100, 100, 50

'TextColor è il colore del titolo principale della griglia

ColoreTestoA 100, 100, 100

' TextColorA viene utilizzato per i titoli degli assi e le annotazioni della griglia.

'Imposta la dimensione del testo del titolo dell'asse

' Il titolo principale della griglia è 2 volte questa dimensione

Dimensione del testo 20

FissaDecimale 0

'Imposta per visualizzare 2 posizioni decimali

PadDigits 2

' Disegna una griglia per il grafico ' Imposta l'intervallo e il titolo di X e Y

Asse AsseX 0, 59, "Tempo/i"

Asse Y 0, 10000, "ug/m3"

Griglia 3, "Concentrazione polvere"

'Disegna grafici di polvere

Colore 100, 0, 0

GraphXY timeStamp(), dustDataF()

Colore 0, 100, 0

GraphXY timeStamp(), dustData()

TextColor 100, 0, 0

DrawText "PM2.5", 30, Int(ScreenY()-60), 90, 1

ColoreTesto 0, 100, 0

DisegnaTesto "PM10", 30, Int(SchermoY()-150), 90, 1

Colore testo 100, 100, 100, 50

Ritorno

Scarica qui il codice sorgente

Passaggio 6: test

Image
Image
Test
Test
Test
Test
Test
Test

Accendi il sensore e avvia l'app. Dall'elenco dei dispositivi associati scegli quello denominato "Sensore". Dopo aver collegato il sensore lo schermo inizierà a visualizzare i dati. Contemporaneamente viene allocato il file di dati. Dopo aver terminato la moda puoi usare GnuPlot per visualizzare i dati. Utilizzare il file "Test.gp" in GnuPlot per configurare GnuPlot per la visualizzazione di un file di dati denominato "Test.dat". Voi lattine anche lo trovano qui

Guarda il video per maggiori dettagli e test. Buon divertimento e altre idee!

Consigliato: