Sommario:
- Passaggio 1: cosa ti serve
- Passaggio 2: preparazione del modulo Bluetooth
- Passaggio 3: montaggio delle parti
- Passaggio 4: associazione
- Passaggio 5: il software
- Passaggio 6: test
Video: Sensore di polvere di sodio su Android: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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
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
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
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
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
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:
Allunga la vita del tuo laptop! Elimina la polvere dal dissipatore di calore: 3 passaggi
Allunga la vita del tuo laptop! Pulisci la polvere dal dissipatore di calore.: Una panoramica molto semplice di come ho pulito la polvere dal dissipatore di calore del mio laptop Toshiba. C'era così tanto lì dentro! Non posso credere che questa pratica non sia raccomandata e incoraggiata dai produttori. Se la polvere blocca l'ingresso e l'uscita dell'aria e
Studio della polvere Arduino: 8 passaggi
Arduino Dust Study: come sarebbe vivere su Marte? L'aria è respirabile? È sicuro? Quanta polvere c'è? Quanto sono frequenti i temporali? Ti sei mai chiesto la risposta a una di queste domande?
Bacchetta per verniciatura a polvere: 5 passaggi
Bacchetta per verniciatura a polvere: ecco le istruzioni dettagliate su come ho creato la mia bacchetta per verniciatura a polvere. ******* Attenzione FA MALE. Se ti metti tra il filo di terra e la spazzola. ******** Lo scopo di questo è quello di dipingere un piccolo oggetto (in questo caso una moneta trasformata in un anello) con
Luci a polvere (snowboard musicale a LED): 4 passaggi
Luci in polvere (LED Music Snowboard): Acquista qui: https://www.facebook.com/PLDesigns-823895051322350… Asciugacapelli Alcool isopropilico Carta
Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: 4 passaggi (con immagini)
Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: puoi costruire abbastanza facilmente un dispositivo Internet of Things fai-da-te che monitora l'inquinamento da polvere nella tua casa per meno di $ 50 e ricevi una notifica quando il livello di polvere diventa troppo alto in modo da poter aerare la stanza, oppure puoi impostare fuori e ricevi una notifica se è