Sommario:

ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC: 8 passaggi
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC: 8 passaggi

Video: ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC: 8 passaggi

Video: ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC: 8 passaggi
Video: ESP32 - Vibration Data Logger (Fourier Transform) 2024, Luglio
Anonim
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER CON GPS_EXT RAM_EXT_RTC

Per quelli di voi che giocano con la scheda Wemos 32 LOLIN, ho pensato di iniziare a documentare alcune mie scoperte finora.

Il progetto attuale è quello di interfacciarsi a un accelerometro ADXL345 e, come mostra la foto sopra, l'ho collegato con successo al lolin e configurato l'ADXL come sensore di shock.

I registri sull'ADXL sono stati impostati come il pdf allegato e l'interrupt che ho configurato nel codice per sputare il codice sulla porta seriale una volta rilevato uno shock.

Ho anche impostato il registro di inattività come interruzione e dopo aver verificato quale interruzione è stata attivata, ho sputato gli stessi dati.

Sto usando la porta I2c sul LOLIN e vedrai che ho una routine per sputare i registri sull'ADXL in modo da poter controllare la configurazione durante il debug. Questa funzione è in esecuzione in una funzione timer utilizzando la libreria ticker. Questa è una funzione utile da impostare per il debug e il controllo dei registri nel caso in cui si scriva qualcosa che misteriosamente fa sì che i dati facciano cose strane.

Ho normalizzato i dati di complimento dei 2 nel LOLIN e li ho formattati in modo che possano essere importati in Excel.

Dai un'occhiata al PDF allegato con alcuni dati che ho importato e che ho rappresentato graficamente in Excel mostrando alcuni tocchi sull'ADXL che vengono attivati da un interrupt nel registro di trigger utilizzando la modalità FIFO.

La modalità FIFO è una funzione utile che non lega il micro e memorizza 32 campioni su un trigger. Ancora una volta guarda i miei dump di dati e puoi vedere dove iniziamo da zero e l'ultimo campione è a 9,8 ms o giù di lì. La linea X sul grafico mostra il tempo in microsecondi che aumenta da sinistra a destra.

NOTA HO MODIFICATO L'ULTIMO GRAFICO PER MOSTRARE LA TIMELINE DA MENO 9800 microsec. Il primo pop di FIFO è il primo dato, il resto è più vecchio. La visualizzazione dovrebbe essere da destra a sinistra.

Nota i tre fili alla scheda ADXL. SDA/SCL e INT da INT 1. Anche in questo caso, se si guardano le impostazioni del registro e si incrocia il foglio dati, avrà senso.

Il campione di dati è completamente inclinato a 3200 campioni che fornisce 3125 ussecondi tra i campioni e una pre-acquisizione di 4 campioni. Guarda il pdf dei dati dal dispositivo in excel e ognuno dei grafici che ho tracciato mi mostra lo spostamento della finestra di cattura.

Metterò del codice della configurazione e degli interrupt se qualcuno è interessato.

Per I2C sto usando la libreria wire e ho scritto alcune funzioni al riguardo.

Notare il piccolo sniffer di dati che ho collegato a SDA/SDL e utilizzando Sigrok posso decodificare il bus I2C in tempo reale.

Il prossimo passo è salvare su disco SAN anche se ho già dimostrato che funziona. Una volta fatto, mi interfaccerò con il wireless e lo caricherò su un sito web.

Aggiungerò a questo man mano che il progetto si espande.

NOTA:

Per i più attenti noterai una grande ammaccatura nella lattina che protegge il chip esp e un ponticello sul pcb. Ciò è dovuto al Cocker Spaniel residente che ha ispezionato la posta e ha deciso di masticare il tabellone prima di consentirmi di accedervi. Penso che sia una fan non espressiva!.

Ovviamente, come sempre, sono sempre pronto per le domande, quindi per favore chiedi.

Passaggio 1: SIGROK E PULSEVIEW

SIGROK E PULSEVIEW
SIGROK E PULSEVIEW
SIGROK E PULSEVIEW
SIGROK E PULSEVIEW

Solo una breve menzione di pulseview e sigrok.

Questo è un software gratuito dalla rete e la piccola scheda di interfaccia con 8 ingressi logici è economica da ebay et al. Noterai un paio di immagini che ho preso dal bus mentre l'ADXL era in funzione ed è di nuovo così utile per il debug in quanto ha un decoder integrato per I2C.

Un oscilloscopio è ottimo per controllare i livelli del segnale, ma la decodifica manuale di I2c è noiosa nella migliore delle ipotesi, anche se ho impostato un ciclo prima d'ora e ho eseguito il debug manuale. Devi avere un apprezzamento per il bit banging a livello di porta che ho fatto in molti progetti di foto, ma richiede tempo ed è soggetto a errori … specialmente di notte!

Grazie ai ragazzi che hanno scritto questa app. È un dio mandare progetti in i2c, Notare la linea D4 che sta monitorando la linea di interruzione dall'ADXL.

Passaggio 2: aggiunta al sensore di shock

Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock
Aggiunta al sensore di shock

Ok qui ho aggiunto alcune periferiche al sensore di shock per la prova del concetto.

Scusa il nido di ratti per ora, una volta che funziona, disegnerò il pcb che collega tutti i componenti e metterò tutto in una bella scatola. Tutti gli elementi allegati, tranne la scheda SD, funzionano su i2c che si trova sul bus spi.

Resta da allegare il modulo GPS che è WIP, ma spero di avere una soluzione entro la fine di questa settimana.

Quindi il progetto attuale consiste in:

Scheda ESP32 LOLIN con wireless.

Orologio in tempo reale PCF. Tiene traccia della data e dell'ora correnti. Ho saldato grossolanamente su una vecchia scheda di progetto che ho inciso in precedenza.

Flash esterno. Contiene, tra le altre cose, i dati di configurazione per l'accelerometro. Capacità 132k e può scaricare alcuni dati web su di esso per facilitare i menu, ecc.

Scheda SD SPI per la memorizzazione di dati e log dell'accelerometro di file. 8 GB ma può espandersi.

Display OLED per mostrare i menu e poche altre cose.

Ecco cosa farà [alla fine]

Monitora gli shock e l'attività che superano lo sfondo.

Registra gli shock sulla scheda SD con l'ora e la data dall'orologio di bordo.

Timbro la posizione dal GPS alla scheda SD se disponibile

Utilizzando un punto di accesso caricare i dati su un server web per analizzare i dati… questo può essere un telefono cellulare.

| La scansione dei punti di accesso è una capacità del LOLIN32 poiché ospita un server Web per i comandi e quindi si connette come client al server Web cloud. Puoi sempre semplicemente scollegare la scheda SD e caricarla!

C'è ancora molto da fare ma si sta andando avanti.

Passaggio 3: INDIRIZZO ADXL

INDIRIZZO ADXL
INDIRIZZO ADXL

Ora ecco una cosa divertente. Ho acquistato il chip ADXL 345 come una piccola scheda perché era più economico che procurarsi un chip da solo… come funziona? Comunque dopo ho iniziato a collegarlo al bus i2c e ho scoperto che ho avuto uno scontro con l'eeprom con indirizzi che iniziano effettivamente a 0x53 che si traduce in una scrittura in A6 e una lettura in A7.

Quindi leggendo il bumf si scopre che se prendi SDO/ALT ADDRESS HIGH puoi forzarlo a 1D

Si scopre che la mia piccola scheda è cablata a massa sul pin 12 dell'ADXL nonostante il pin SDO che sembra che tu possa tirarlo in alto. Non provarlo a casa senza un alimentatore limitato di corrente … fortunatamente ho avuto che mi ha fatto estrarre il multimetro e controllare il pin a massa.. Funziona e ti fa uscire dallo scontro del ballo di fine anno. Fortunatamente non hanno fatto il corto sotto il chip, altrimenti sarei stato preso in giro e avrei dovuto rimuovere il chip dalla scheda. L'EEprom che è di riserva che avevo è organizzato come due pagine di 64k come indirizzo 0x52 e 53. Una volta fatto questo, il mio problema è stato risolto.

Leggendo di nuovo la pagina web dice che è impostato su 0x53 ma è in caratteri piccoli quindi attenzione!

Passaggio 4: stampe schematiche del PCB

Ecco una rapida panoramica del circuito e dei componenti. Questo è molto il mio progetto e ancora WIP [Work In Progress] Lo schema è stato progettato e poi tradotto nella grafica per le tracce. Ho verificato che tutti i componenti funzionino come previsto utilizzando il mio nido di ratti si avvicina e ora mi sto assemblando su una tavola che entrerà in una piccola scatola[Dettaglio da seguire]

Facendo riferimento a shocker.pdf.

La scheda è composta da 8 componenti principali

  1. MEMORIZZAZIONE SCHEDA SD
  2. ACCELEROMETRO ADXL
  3. DISPLAY OLED
  4. 3.3V REG
  5. MODULO GPS1
  6. EEPROM
  7. TIMER RTC
  8. CHIP LOLIN ESP32 CON INTERFACCIA WIRELESS RF

Tutto dipende dall'accelerometro.

L'ADXL è impostato per interrompere il processore su INT1 che è instradato al pin 14 del processore. Il codice nel micro è impostato per intercettare questo interrupt e impostare un flag che viene attivato nella routine principale. Aggiungerò il codice delineando la registrazione della routine di interruzione e della funzione di callback in un secondo momento.

L'ADXL supporta interruzioni su diversi stati come shock o inattività più alcuni altri. Puoi mascherare quelli che solleticano la tua fantasia in base a ciò che stai cercando di fare. L'ADXL funziona in modalità FIFO in modo che memorizzi 32 campioni per catturare l'evento shock come XYZ [96 valori]

Il display ADXL RTC e EEPROM sono tutti pilotati da I2C. La SD CARD è collegata all'I/O SPI e il modulo GPS è collegato alle porte seriali del LOLIN contrassegnate X12 X11.

La sequenza è la seguente. Prendi costantemente i dati 232 dall'unità GPS e filtra. Mentre hai un'ora GPS valida, aggiorna l'RTC a intervalli prestabiliti. All'interruzione salva le variabili sulla scheda SD come tempo/Lat_Lng/Velocità/Altitudine/Salva i registri ADXL in complemento 2 di formato raw e complemento non 2. Tutti i dati sono delimitati da virgole.

Noterai anche che c'è un pin di reset che è collegato al pin 13. Questo pin avvierà il server web integrato che ti consentirà di connetterti al configuratore per impostare un punto di accesso che è memorizzato nella EEPROM. Al riavvio il processore si connetterà al punto di accesso e accederà a Internet per caricare i file dalla scheda SD. Se non ci sono dati e nessun punto di connessione, l'unità esegue semplicemente il processo di registrazione dei dati sulla scheda SD che è possibile interrogare utilizzando il programma [ShockerView.exe][WIP]Sul server i dati vengono archiviati in un database SQL e visualizzati[WIP]

Le stampe PCB sono attaccate per la parte superiore e inferiore.

Passaggio 5: prototipo di incisione dell'opera d'arte

Prototipo di incisione dell'opera d'arte
Prototipo di incisione dell'opera d'arte
Prototipo di incisione dell'opera d'arte
Prototipo di incisione dell'opera d'arte
Prototipo di incisione dell'opera d'arte
Prototipo di incisione dell'opera d'arte

Ecco come produco le mie schede prototipo

Stampa l'opera d'arte su carta da lucido pesante. Uso 63 GSM da fabbri, economici e allegri. La stampante è la chiave qui. Vuoi il più opaco possibile e il più pulito possibile. La mia stampante laser sta andando avanti ora, ma va bene per stampare fino a 10 mila, meno di questo hai bisogno di un equipaggiamento specializzato poiché la grana della carta da lucido inizia a intralciare. È possibile acquistare carta specializzata, ma ehi, è troppo buono per quelli come me. In ogni caso, continuo a perfezionare i miei progetti, quindi sarebbe troppo costoso per me. Se hai bisogno di una tavola adeguata, chiedi agli esperti di farlo.

Normalmente prototilo le mie schede in sezioni e poi produco un finale con i gerber per una società di Internet da produrre. Il prototipo risolve tutti quegli errori e omissioni prima di impegnare soldi veri.

Dopo aver stampato le immagini su due fogli di ricalco A4 separati, tagliale in modo che si sovrappongano e le fissino in posizione. lascia abbastanza spazio per far entrare la tua tavola bifacciale tra gli strati e assicurati che il lato stampato sia contro il pcb. Fai un paio di fessure per permetterti di far scorrere le schede e fissarle temporaneamente. Se stai attento, puoi sovrapporre il nastro adesivo per permetterti di staccarlo senza distruggere l'immagine tracciata.

Appoggia la tavola con un lato verso il basso nella tua scatola UV. NB Ho realizzato il mio utilizzando quattro nuove lampade UV da 13W e alcuni vecchi alimentatori e ho realizzato una scatola con un pannello di vetro trasparente. La spaziatura era sperimentale. Il coperchio si aggancia e schiaccia la schiuma sul retro del pannello forzando la maschera contro il vetro. Se non lo fai, la luce ridurrà l'etch resist. Accendi ed esponi la tavola per 1 minuto e 40 secondi per lato. Usa il tuo orologio. In realtà devo modificarlo con un timer su di esso … oh nessun altro progetto … forse ne comprerò uno … sai che non lo farai! Le schede che acquisto da Mega Electronics sono le schede prototipo economiche con etch resist. L'etch resist è a volte un po' irregolare, ma ho alcune schede che ho avuto per quattro anni e producono ancora buone schede per la prototipazione!!

Attento quando capovolgi la tavola, non lasciartela scivolare o avrai un po' di spazzatura.

Ora prepara il tuo sviluppatore. Uso 2 tappi a 18:1 in modo che siano due tappi di sviluppatore e 36 tappi di acqua di rubinetto pura e non adulterata. Lo sviluppatore è disponibile in una bottiglia o in polvere e una bottiglia di solito mi dura circa 6 anni!!. Mescolare in un contenitore per gelato e INDOSSARE GUANTI. Non metterci le dita o il grasso lo intaccherà. La temperatura può essere un problema in inverno. Mantieni l'acqua a 20 gradi o giù di lì, non è fondamentale, ma se fa freddo i risultati possono essere imprevedibili. L'ho fatto a gennaio nel mio garage con un bollitore in modo da poter compensare.

Sposta delicatamente il contenitore da un lato all'altro una volta inserito la scheda, se lo hai fatto bene vedrai un flusso Magenta di etch resist che viene rimosso dal rame rivelando un bel rame lucido tra i binari. Capovolgilo usando i guanti per controllare l'altro lato. Questo processo richiede normalmente circa un minuto al massimo, quindi quando è completo togli la tavola e risciacqua accuratamente con acqua tiepida. Se è noioso, allora è probabile che sia fallito.

L'ho avuto un paio di volte, ma di solito è perché non ho indossato i guanti o la temperatura era troppo bassa o ho incasinato il tempo di esposizione a causa di qualche distrazione… perché lo fanno nel bel mezzo di qualcosa di critico…

Mostrami le tue incisioni

Ok, ora hai una tavola con bellissime piste verdi protette da etch resist e ora devi recuperare il cloruro ferrico. Ora uso lo stesso contenitore del gelato per ridurre al minimo gli sprechi e mescolare le note sulla confezione. Compro il cloruro ferrico in pacchetti di palline che si pesano e si dissolvono in una soluzione. Prepara abbastanza da riempire la vaschetta del gelato a circa 1/3 della sua altezza. Se ti comporti quanto basta per il lavoro, puoi versarlo in un contenitore di plastica e si manterrà a lungo.

DEVI INDOSSARE GUANTI… non a causa del grasso, ecc., ma perché se non lo fai le tue mani saranno di un arancione brillante per due settimane. Una volta l'ho fatto prima di un importante incontro a Londra e sembrava che fossi stato coinvolto nel tango. Tuttavia, tieni presente che questa roba è brutta intorno a qualsiasi cosa di rame… e qualsiasi cosa davvero. Indossa vestiti vecchi perché se li indossa vengono buttati. Si attacca ai lavelli in acciaio inossidabile e generalmente macchia tutto. Fallo all'esterno o in una latrina lontano da tutto. Non versare gli avanzi nelle fogne, è ottimo per uccidere i batteri che non è ciò che l'autorità idrica vorrebbe promuovere nelle loro fosse settiche. Per alcune autorità anche questo è illegale, quindi non farlo.

Quando immergi per la prima volta la tua tavola nella soluzione, assumerà un bel colore rosso bronzo quando il rame viene attaccato. In caso contrario, potresti avere ancora uno strato di etch resist che impedisce all'etch di funzionare o la tua soluzione è sbagliata. Se questo è il caso, temo di tornare al tavolo da disegno, ma non è probabile che la tua incisione sia sbagliata se hai seguito le distruzioni.

Comunque se tutto va bene hai delle tracce perfette protette da etch resist.

Normalmente a questo punto il professionista utilizzerebbe un set di maschere per svilupparsi attorno ai fori e alle pastiglie e produrre il via in rame, inoltre usa una serigrafia per dipingere i numeri dei componenti ecc. Purtroppo non ho il tempo o l'inclinazione e faccio i miei via usando del filo di rame da uno strato all'altro … ovviamente il multistrato è un no no con questo metodo. Se sono dell'umore giusto, aggiungerò scrupolosamente i numeri dei componenti al livello di stampa in modo da incidere anche i numeri dei componenti. Può far risparmiare un po' di tempo nell'assemblaggio, ma dipende da quanto è occupata la scheda.

Ora espongo le tracce per altri 2 minuti circa per lato e immergo lo sviluppatore per rimuovere tutto l'etch resist.

Ora perforo i vias e tutti i fori passanti e stacco tutti i binari e controllo la continuità con un multimetro. Questa parte è un mal di palla e normalmente non lo faresti per una scheda prodotta professionalmente con veri via, ma vale la pena farlo per evitare il filo di via essere saldato solo da un lato…è successo tante volte!

Passaggio 6: assemblaggio della scheda

Assemblare la scheda
Assemblare la scheda
Assemblare la scheda
Assemblare la scheda
Assemblare la scheda
Assemblare la scheda

OK, ora ho una tavola pronta per l'uso e ho praticato tutti i vias e i fori passanti.

Infilare tutte le vie con filo e saldare entrambi i lati. mi piace stagnare tutte le tracce come protezione non è necessario farlo ma ferma l'ossidazione del rame.

Ho attaccato la scheda SD che è a montaggio superficiale e ho aggiunto due terre per ottenere una puntina di saldatura su di essa, inoltre ha un paio di pin nella parte inferiore per ancorarla.

Successivamente è stata aggiunta la EEPROM ADXL ecc.

Per quanto riguarda la potenza, il piano è prendere i 5 V dall'USB o dal Bat esterno e alimentarli attraverso il registro da 3,3 V sulla scheda. Ho un piccolo registro che ho comprato da Ebay che è assemblato come un modulo e valutato a 800 mA … questo è 300 gretaer di quanto USB possa fornire. Non ho ancora effettuato alcuna misurazione della potenza, poiché potrebbe essere modificato nel software… potrei utilizzare l'interruzione INACTIVITY da ADXL per gestire.[WIP]

…è necessario aggiungere immagini man mano che la costruzione avanza.

Passaggio 7: CODIFICA

OK, non esaminerò tutta la configurazione di arduino poiché qualcun altro ha fatto un lavoro molto migliore altrove.

Sceglierò solo le parti pertinenti man mano che procediamo che possono essere utilizzate in un tuo progetto.

Questo è ancora in corso per quanto riguarda il caricamento sul sito Web, ma lascia passare parte del codice.

L'idea è che la normale funzionalità sia init i dispositivi che consistono in GPS/display/scheda SD/orologio in tempo reale/ext_flashmemory e accelerometro.

Dopodiché entriamo in un ciclo in attesa di vedere se viene premuto il tasto di interruzione sw. Se è quindi salta al menu del configuratore per configurare la rete wifi per accedere automaticamente a un dispositivo specificato come input nel configuratore della pagina web. Prima esegue la scansione di tutti i dispositivi per un ssid e poi ti consente di selezionarne uno e lo salva in flash con un flag per indicare che al prossimo avvio caricare le impostazioni da flash. Puoi sempre sovrascriverlo inserendo l'indirizzo IP e digitando /killbill per avviare una pulizia dalla flash e caricare default.

ecco la funzione di interrupt definita nel codice per l'accelerometro adxl e il salto al configuratore su due pin separati. Stiamo usando l'interrupt ADXL per interrompere l'evento SHOCK. Per entrambi gli interrupt impostiamo un flag che viene resettato nel "loop" principale. ecco come appare:

guarda il codice allegato

Passaggio 8: trovare i pin SDA SCL

usa questo codice:

Serial.println(SDA);

Serial.println(SCL);

stampa i pin attualmente configurati nell'ESP per SDL e SCL

Esiste un file che viene utilizzato per mappare i pin su funzioni come le porte seriali in ESP32

Consigliato: