Inhoudsopgave:

ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC - Ajarnpa
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC - Ajarnpa

Video: ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC - Ajarnpa

Video: ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC - Ajarnpa
Video: ESP32 - Vibration Data Logger (Fourier Transform) 2024, Juli-
Anonim
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC
ESP32 ADXL345 DATALOGGER MET GPS_EXT RAM_EXT_RTC

Voor degenen onder jullie die met het Wemos 32 LOLIN-bord spelen, dacht ik dat ik een paar bevindingen van mij tot nu toe zou gaan documenteren.

Het huidige project is om te koppelen aan een ADXL345-versnellingsmeter en zoals de foto hierboven laat zien, heb ik deze met succes aangesloten op de lolin en de ADXL geconfigureerd als een schoksensor.

De registers op de ADXL zijn ingesteld als de bijgevoegde pdf en de interrupt die ik in de code heb geconfigureerd om de code op de seriële poort uit te spugen zodra een schok wordt gedetecteerd.

Ik heb ook het inactiviteitsregister ingesteld als een interrupt en na te hebben gecontroleerd welke interrupt is geactiveerd, spuug ik dezelfde gegevens uit.

Ik gebruik de I2c-poort op de LOLIN en je zult zien dat ik een routine heb om de registers op de ADXL uit te spugen, zodat ik de configuratie kan controleren tijdens het debuggen. Deze functie wordt uitgevoerd in een timerfunctie die de tickerbibliotheek gebruikt. Dit is een handige functie om in te stellen voor het debuggen en controleren van de registers voor het geval je daar iets schrijft waardoor de gegevens op mysterieuze wijze vreemde dingen doen.

Ik heb de complimentgegevens van de 2 in de LOLIN genormaliseerd en geformatteerd zodat ze in Excel kunnen worden geïmporteerd.

Bekijk de bijgevoegde PDF met enkele gegevens die ik heb geïmporteerd en ik heb een grafiek gemaakt in Excel met enkele tikken op de ADXL die worden geactiveerd door een onderbreking in het triggerregister met behulp van de FIFO-modus.

FIFO-modus is een handige functie die de micro niet vasthoudt en het slaat 32 samples op een trigger op. Kijk nog eens naar mijn datadumps en je kunt zien waar we beginnen bij ground zero en de laatste sample is op 9,8ms of daar ongeveer. X-lijn op de grafiek toont de timing in microsec toenemend van links naar rechts.

OPMERKING IK HEB SINDS DE LAATSTE GRAFIEK GEWIJZIGD OM DE TIJDLIJN TE TONEN VAN MIN 9800 microsec. De eerste pop van FIFO is de vroegste gegevens, de rest is ouder. De weergave moet van rechts naar links zijn.

Let op de drie draden naar het ADXL-bord. SDA/SCL en de INT van INT 1. Nogmaals, als je naar de registerinstellingen kijkt en het gegevensblad doorzoekt, is het logisch.

Het gegevensmonster is volledig gekanteld bij 3200 monsters, wat 3125 useconden geeft tussen monsters en een pre-capture van 4 monsters. Kijk naar de pdf van de gegevens van het apparaat in Excel en elk van de grafieken die ik heb uitgezet, waarbij ik het venster van vastlegging zie bewegen.

Ik zal wat code van de configuratie plaatsen en onderbreken als iemand geïnteresseerd is.

Voor I2C gebruik ik de draadbibliotheek en heb daar een aantal functies omheen geschreven.

Let op de kleine datasniffer die ik op SDA/SDL heb aangesloten en met Sigrok kan ik de I2C-bus in realtime decoderen.

De volgende stap is opslaan op SAN-schijf, hoewel ik al heb bewezen dat het werkt. Zodra dat is gebeurd, zal ik verbinding maken met de draadloze verbinding en uploaden naar een website.

Ik zal hieraan toevoegen naarmate het project zich uitbreidt.

VOETNOOT:

Voor de oplettende mensen die er zijn, zie je een grote deuk in het blik dat de esp-chip beschermt en een jumper op de pcb. Dit kwam door de inwonende Cocker Spaniel die de post inspecteerde en besloot op het bord te kauwen voordat ik er toegang toe kreeg. Ik denk dat ze een non-espressif fan is!.

Natuurlijk ben ik zoals altijd altijd in voor vragen, dus stel ze gerust.

Stap 1: SIGROK EN PULSEVIEW

SIGROK EN PULSEVIEW
SIGROK EN PULSEVIEW
SIGROK EN PULSEVIEW
SIGROK EN PULSEVIEW

Even een korte vermelding van pulseview en sigrok.

Dit is gratis software van het internet en het kleine interfacebord met 8 logische ingangen is goedkoop van eBay et al. Je zult een paar afbeeldingen opmerken die ik van de bus heb gepakt terwijl de ADXL aan het draaien was en het is weer zo handig voor het debuggen als het heeft een ingebouwde decoder voor I2C.

Een scope is geweldig voor het controleren van signaalniveaus, maar het handmatig decoderen van I2c is op zijn best vermoeiend, hoewel ik eerder een lus heb opgezet en handmatig heb gedebugd. Je moet begrip hebben voor bitbangen op het poortniveau, wat ik bij veel fotoprojecten heb gedaan, maar het is tijdrovend en vatbaar voor fouten … vooral 's nachts !!

Dank aan de jongens die deze app hebben geschreven. Het is een godsgeschenk voor projecten in i2c, Let op de D4-lijn die de onderbrekingslijn van de ADXL bewaakt.

Stap 2: Toevoegen aan de schoksensor

Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor
Toevoegen aan de schoksensor

Ok hier heb ik wat randapparatuur aan de schoksensor toegevoegd voor proof of concept.

Excuseer het rattennest voor nu als het werkt, ik zal de pcb ontwerpen die alle componenten met elkaar verbindt en alles in een mooie doos stoppen. Alle bijgevoegde items behalve de SD-kaart werken op i2c die zich op de spi-bus bevindt.

Links om te bevestigen is de GPS-module die WIP is, maar ik hoop tegen het einde van deze week een oplossing te hebben.

Het huidige project bestaat dus uit:

ESP32 LOLIN bord met draadloos.

PCF real-time klok. Houdt de huidige datum en tijd bij. Ik heb ruw gesoldeerd op een oud projectbord dat ik eerder heb geëtst.

Externe flitser. Bevat onder andere instellingsgegevens voor Accelerometer. Capaciteit 132k en kan er wat webgegevens op dumpen om menu's enz.

SPI SD-kaart voor het opslaan van gegevens en logboeken van de bestandsversnellingsmeter. 8 GB maar kan uitbreiden.

OLED-display om menu's en een paar andere dingen weer te geven.

Dit is wat het [uiteindelijk] zal doen

Monitor schokken en activiteit die de achtergrond overschrijden.

Registreer de schokken op de SD-kaart met tijd en datum van de ingebouwde klok.

Stempel de locatie van GPS naar SD-kaart indien beschikbaar

Gebruik een toegangspunt om de gegevens naar een webserver te uploaden om de gegevens te analyseren … dit kan een mobiele telefoon zijn.

|Scannen naar toegangspunten is een mogelijkheid van de LOLIN32, net als het hosten van een webserver voor opdrachten en vervolgens als client verbinding maken met de cloudwebserver. Je kunt altijd gewoon de SD-kaart loskoppelen en uploaden!

Nog veel te doen, maar het gaat verder.

Stap 3: ADXL-ADRESSERING

ADXL-ADRESSERING
ADXL-ADRESSERING

Nu is hier iets grappigs. Ik kocht de ADXL 345-chip als een klein bordje, omdat het goedkoper was dan zelf een chip te kopen … hoe werkt dat? Hoe dan ook, daarna begon ik het aan te sluiten op de i2c-bus en ontdekte dat ik een botsing had met de eeprom met adressen die effectief beginnen bij 0x53, wat zich vertaalt naar schrijven op A6 en lezen op A7.

Dus als je de zwerver leest, blijkt dat als je het SDO / ALT-ADRES HOOG neemt, je het naar 1D kunt forceren

Blijkt dat mijn kleine bord vast is geaard op pin 12 van de ADXL, ondanks de SDO-pin die eruitziet alsof je hem hoog kunt trekken. Probeer dit niet thuis zonder een huidige beperkte stroomvoorziening … gelukkig had ik waardoor ik de multimeter moest verwijderen en de pin naar aarde moest controleren.. Dit werkt en haalt je uit de prom-clash. Gelukkig hebben ze de short onder de chip niet gedaan, anders zou ik gesnookerd zijn en de chip van het bord moeten verwijderen. De EEprom, een reserve die ik had, is gerangschikt als twee pagina's van 64k als adres 0x52 en 53. Toen ik dit eenmaal deed, was mijn probleem opgelost.

Als ik de webpagina opnieuw lees, staat er wel dat het is ingesteld op 0x53, maar het staat in de kleine lettertjes, dus kijk uit!

Stap 4: Schematische PCB-afdrukken

Hier is een korte doorloop van het circuit en de componenten. Dit is grotendeels mijn ontwerp en nog steeds WIP [Work In Progress] Het schema is ontworpen en vervolgens vertaald in het artwork voor de tracks. Ik heb geverifieerd dat alle componenten werken zoals verwacht met behulp van mijn rattennest nadert en ben nu aan het monteren op een bord dat in een kleine doos past [Details volgen]

Verwijzend naar shocker.pdf.

Het bord bestaat uit 8 hoofdcomponenten

  1. OPSLAG SD-KAART
  2. ADXL-VERSNELLER
  3. DISPLAY OLED
  4. 3.3 V-REG
  5. GPS1-MODULE
  6. EEPROM
  7. TIMER RTC
  8. ESP32 LOLIN CHIP MET RF DRAADLOZE INTERFACE

Alles hangt af van de versnellingsmeter.

De ADXL is ingesteld om de processor op INT1 te onderbreken die naar pin 14 op de processor wordt geleid. De code in de micro is ingesteld om deze onderbreking te onderscheppen en een vlag in te stellen waarop in de hoofdroutine wordt gereageerd. Ik zal de code toevoegen een overzicht van het later registreren van de interruptroutine en de callback-functie.

De ADXL ondersteunt interrupts in verschillende toestanden, zoals een schok of inactiviteit plus een paar andere. U kunt degenen die uw fantasie prikkelen, maskeren op basis van wat u probeert te doen. De ADXL wordt bediend in FIFO-modus, zodat het 32 samples opslaat om de schok vast te leggen als XYZ [96 waarden]

De display ADXL RTC en EEPROM worden allemaal aangestuurd vanuit I2C. De SD-KAART is aangesloten op de SPI I/O en de GPS-module is aangesloten op de seriële poorten op de LOLIN gemarkeerd met X12 X11.

De volgorde is als volgt. Pak constant de 232-gegevens van de GPS-eenheid en filter. Terwijl u geldige GPS-tijd hebt, werkt u de RTC bij met ingestelde intervallen. Sla bij onderbreking variabelen op op SD-kaart, zoals tijd/Lat_Lng/Speed/Altitude/Store ADXL-registers in onbewerkte indeling 2's compliment en niet 2's complement. Alle gegevens zijn door komma's gescheiden.

U zult ook opmerken dat er een reset-pin is die is verbonden met pin 13. Deze pin start de ingebouwde webserver waardoor u verbinding kunt maken met de configurator om een toegangspunt in te stellen dat is opgeslagen in de EEPROM. Bij het opnieuw opstarten zal de processor verbinding maken met het toegangspunt en toegang krijgen tot internet om bestanden van de SD-kaart te uploaden. het programma [ShockerView.exe][WIP]Op de server worden de gegevens opgeslagen in een SQL-database en weergegeven [WIP]

De PCB-afdrukken zijn bevestigd voor boven en onder.

Stap 5: Prototype voor het etsen van kunstwerken

Prototype van kunstwerk etsen
Prototype van kunstwerk etsen
Prototype van kunstwerk etsen
Prototype van kunstwerk etsen
Prototype van kunstwerk etsen
Prototype van kunstwerk etsen

Hier is hoe ik mijn prototypeborden produceer:

Druk het kunstwerk af op wat zwaar overtrekpapier. Ik gebruik 63 GSM van smiths, goedkoop en vrolijk. De printer staat hier centraal. U wilt zo ondoorzichtig mogelijk en zo schoon mogelijk. Mijn laserprinter komt nu aan, maar het is goed voor afdrukken tot 10 duizend, minder dan dat u specialistische apparatuur nodig heeft, omdat de korrel van het overtrekpapier in de weg begint te zitten. Je kunt speciaal papier kopen, maar ja, dat is te goed voor mensen zoals ik. Hoe dan ook, ik ben constant bezig met het verfijnen van mijn ontwerpen, dus het zou te duur zijn voor mijn kleine ouwe. Als je een goed bord nodig hebt, vraag dan de experts om het te doen.

Ik maak normaal gesproken een prototype van mijn boards in secties en maak dan een finale met gerbers voor een internetbedrijf om te produceren. Het prototype lost al die fouten en weglatingen op voordat ik echt geld beleg.

Nadat u de afbeeldingen hebt afgedrukt op twee afzonderlijke A4-vellen overtrekpapier, knipt u ze zodat ze beide over elkaar heen liggen en plakt u ze op hun plaats. laat voldoende ruimte over voor je dubbelzijdige bord om tussen de lagen te knijpen en zorg ervoor dat de bedrukte kant tegen de print zit. Maak een paar spleten zodat je de planken erin kunt schuiven en tijdelijk met plakband kunt plakken. Als u voorzichtig bent, kunt u de plakband overlappen zodat u deze kunt verwijderen zonder de overtrekafbeelding te vernietigen.

Leg het bord met één kant naar beneden in je UV-box. NB Ik heb de mijne gemaakt met vier nieuwe 13W UV-lampen en wat oude voorschakelapparatuur en een doos gemaakt met een helder glazen paneel. De afstand was experimenteel. Het deksel klikt naar beneden en knijpt het schuim op de achterkant van het bord, waardoor het masker tegen het glas wordt gedrukt. Als u dit niet doet, zal het licht de etsresist ondermijnen. Schakel het bord in en belicht het gedurende 1 minuut en 40 seconden per kant. Gebruik je horloge. Eigenlijk moet ik dit aanpassen met een timer erop…oh nee nog een project…misschien koop ik er een…je weet dat je dat niet zult doen!De boards die ik koop bij Mega Electronics zijn de goedkope prototype boards met etsweerstand. De etsweerstand is soms een beetje fragmentarisch, maar ik heb een aantal boards die ik al vier jaar heb en ze produceren nog steeds goede boards voor prototyping!!

Wees voorzichtig als je het bord omdraait, laat het niet wegglijden of je hebt wat rommel.

Bereid nu uw ontwikkelaar voor. Ik gebruik 2 dopjes bij 18:1, dus dat zijn twee doppen ontwikkelaar en 36 doppen zuiver, onvervalst kraanwater. Ontwikkelaar wordt geleverd in een fles- of poedervorm en een fles gaat meestal ongeveer 6 jaar mee !!. Meng het in een ijscontainer EN DRAAG HANDSCHOENEN. Steek uw vingers er niet in, anders zal het vet het aantasten. In de winter kan de temperatuur een probleem zijn. Houd het water op 20 graden of daaromtrent, het is niet kritisch, maar als het koud is, kunnen de resultaten onvoorspelbaar zijn. Ik heb dit in januari in mijn garage gedaan met een waterkoker zodat je het kunt compenseren.

Beweeg de container voorzichtig heen en weer als je je bord erin hebt geplaatst. Als je het goed hebt gedaan, zul je zien dat een magenta stroom etsweerstand uit het koper wordt verwijderd en een prachtig glanzend koper tussen de sporen onthult. Draai het om met je handschoenen om de andere kant te controleren. Dit proces duurt normaal gesproken ongeveer een minuut, dus als je klaar bent, haal je het bord eruit en spoel je het grondig af in warm water. Als het saai is, is de kans groot dat het mislukt.

Ik heb dit een paar keer gehad, maar het komt meestal omdat ik geen handschoenen droeg of de temperatuur te laag was of ik de belichtingstijd verknoeide vanwege wat afleiding … waarom doen ze dit midden in iets kritieks ….

Laat me je etsen zien

Oké, dus nu heb je een board met prachtige groene tracks beschermd door etsresist en moet je nu het ijzerchloride maken. Nu gebruik ik dezelfde ijscontainer om verspilling tot een minimum te beperken en me te mengen tot de opmerkingen op het pakket. Ik koop het ijzerchloride in pakjes balletjes die je afweegt en oplost in een oplossing. Maak genoeg aan om het ijsbakje ongeveer 1/3 van de bovenkant te vullen. Als je net genoeg opmaakt voor de klus, kun je het in een plastic bak gieten en het zal een lange tijd goed blijven.

JE MOET HANDSCHOENEN DRAGEN… niet vanwege vet enz., maar omdat als je dat niet doet, je handen veertien dagen fel oranje zullen zijn. Ik deed dit eens voor een belangrijke vergadering in Londen en het leek alsof ik een tango had gehad. Houd er echter rekening mee dat dit spul smerig is rond alles wat koper is … en echt alles. Draag oude kleren, want als het erop komt, zijn ze weggegooid. Het hecht zich aan roestvrijstalen spoelbakken en bevlekt over het algemeen alles. Doe dit buiten of in een bijgebouw weg van alles. Gooi de restjes niet in het riool, het is geweldig in het doden van bacteriën, dat is niet wat het waterschap zou willen promoten in hun septic tanks. Voor sommige autoriteiten is dit ook illegaal, dus doe het niet.

Wanneer je je bord voor het eerst in de oplossing dompelt, krijgt het een mooie roodbronskleur als het koper wordt aangevallen. Als dit niet het geval is, heeft u mogelijk nog steeds een laag etsresist die verhindert dat het etsmiddel werkt, of uw oplossing is verkeerd. Als dat het geval is, dan terug naar de tekentafel vrees ik, maar het is niet waarschijnlijk dat je etsmiddel verkeerd is als je de vernietigingen hebt gevolgd.

Hoe dan ook, als alles goed is, heb je een aantal perfecte tracks beschermd door etch-resist.

Normaal gesproken zou de professional op dit punt een set maskers gebruiken om zich rond de gaten en kussens te ontwikkelen en de via koper door te produceren plus een zeefdruk gebruiken voor het schilderen van onderdeelnummers enz. Helaas heb ik niet de tijd of de neiging om mijn via's te maken het gebruik van wat koperdraad van laag naar laag … het is duidelijk dat meerlaags bij deze methode niet mogelijk is. Als ik in de stemming ben, zal ik nauwgezet componentnummers toevoegen aan de printlaag, zodat u ook de componentnummers etst. Het kan wat tijd besparen bij de montage, maar hangt af van hoe druk het bord is.

Ik belicht de sporen nu nog ongeveer 2 minuten per kant en dompel in de ontwikkelaar om alle etsresist te verwijderen.

Ik boor nu de via's en eventuele doorgaande gaten en vertin alle sporen en controleer de continuïteit met een multimeter. Dit onderdeel is een balpijn en je zou normaal niet doen voor een professioneel geproduceerd bord met echte via's, maar het is de moeite waard om de via-draad te vermijden slechts aan één kant gesoldeerd zijn … is zo vaak gebeurd!

Stap 6: Het bord monteren

Het bord in elkaar zetten
Het bord in elkaar zetten
Het bord in elkaar zetten
Het bord in elkaar zetten
Het bord in elkaar zetten
Het bord in elkaar zetten

OK, dus nu heb ik een bord klaar om te gaan en ik heb alle via's en doorgaande gaten geboord.

Rijg alle via's met draad en soldeer beide kanten. ik vind het leuk om alle sporen te vertinnen, als bescherming hoef ik het niet te doen, maar stopt het koperoxideren.

Ik heb de SD-kaart bevestigd die aan het oppervlak is gemonteerd en twee landen toegevoegd om er een soldeerbout op te krijgen plus een paar pinnen aan de onderkant om hem te verankeren.

Vervolgens de ADXL EEPROM enz. toegevoegd.

Wat het vermogen betreft, is het plan om de 5V van de USB of externe Bat te nemen en deze door de 3,3V-reg op het bord te voeren. dan USB kan bieden. Ik heb nog geen vermogensmetingen gedaan, zoals in software kan worden aangepast … zou INACTIVITY-interrupt van ADXL kunnen gebruiken om mee om te gaan. [WIP]

…moeten foto's toevoegen naarmate de bouw vordert.

Stap 7: CODEREN

OK, ik zal niet alle arduino-instellingen doornemen, omdat iemand anders het elders veel beter heeft gedaan.

Ik zal gewoon de relevante stukjes uitkiezen als we gaan die kunnen worden gebruikt in een eigen project.

Dit is nog werk in uitvoering voor zover het uploaden naar de website wordt overwogen, maar laten we een deel van de code doornemen.

Het idee is dat de normale functionaliteit in de apparaten zit die bestaan uit GPS /display/sd-kaart/real-time klok /ext_flashmemory en accelerometer.

Daarna komen we in een lus die wacht om te zien of de interrupt-toets sw wordt ingedrukt. Als dit het geval is, spring dan naar het configuratormenu om het wifi-netwerk te configureren om automatisch in te loggen op een apparaat dat is opgegeven als invoer voor de webpaginaconfigurator. Eerst scant het alle apparaten op een ssid en stelt u vervolgens in staat er een te selecteren en op te slaan in flash met een vlag om aan te geven dat bij de volgende keer opstarten de instellingen van flash worden geladen. Je kunt dit altijd overschrijven door het ipad in te voeren en /killbill te typen om de flash op te schonen en de standaardwaarde te laden.

hier is de interrupt-functie gedefinieerd in de code voor de adxl-versnellingsmeter en de sprong naar configurator op twee afzonderlijke pinnen. We gebruiken de ADXL-interrupt om te onderbreken bij een SHOCK-gebeurtenis. Voor beide interrupts stellen we een vlag in die wordt gereset in de hoofd "lus". hier is hoe het eruit ziet:

kijk naar de bijgevoegde code

Stap 8: SDA SCL-pinnen zoeken

gebruik deze code:

Serieel.println(SDA);

Seriële.println(SCL);

drukt de pinnen af die momenteel in de ESP zijn geconfigureerd voor SDL en SCL

Er is een bestand dat wordt gebruikt voor het toewijzen van pinnen aan functies zoals seriële poorten in de ESP32

Aanbevolen: