Inhoudsopgave:
- Benodigdheden
- Stap 1: Schema's en broncode
- Stap 2: Werking van het circuit
- Stap 3: Gezondheidscontrole
- Stap 4: Stroommetingen en levensduur van de batterij
- Stap 5: Toekomstige verbeteringen
Video: Draadloze deursensor - Ultra Low Power - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Weer een deursensor!! Welnu, de motivatie voor mij om deze sensor te maken was dat velen die ik op internet zag de ene of de andere beperking hadden. Enkele doelen van de sensor voor mij zijn:
1. De sensor moet erg snel zijn - bij voorkeur minder dan 5 sec
2. De sensor zou van een 3.7V Li-ion-batterij moeten lopen, aangezien ik er tientallen heb liggen
3. De sensor zou vele maanden moeten werken op een enkele lading van de batterij. Het zou < 10uA moeten verbruiken in de slaapstand
4. De sensor moet kunnen wekken voor het verzenden van kritieke gegevens zoals de batterijstatus, zelfs als de deur lange tijd niet wordt bediend.
5. De sensor moet gegevens verzenden naar een MQTT-onderwerp wanneer de deur wordt geopend en wanneer de deur wordt gesloten
6. De sensor moet dezelfde hoeveelheid stroom verbruiken, ongeacht de staat van de deur
Werking van de sensor:
De sensor heeft 2 hoofdcontrollers. De eerste is de kleine microcontroller ATiny 13A. De tweede is de ESP die meestal in de slaapstand staat en alleen wakker wordt als de ATiny dit inschakelt. Het hele circuit kan ook worden gemaakt door alleen de ESP door het in de slaapmodus te gebruiken, maar de stroom die het verbruikt is veel groter dan nodig is om een batterij maandenlang mee te laten gaan, dus de ATTiny komt te hulp. Het dient alleen om elke N seconden wakker te worden, te zoeken naar een deurgebeurtenis of een gezondheidscontrolegebeurtenis, als die er is, houdt het de CH_PD-pin van de ESP op HOOG en stuurt het juiste signaal van het type gebeurtenis naar de ESP. Daar houdt zijn rol op.
De ESP neemt het dan over, leest het signaaltype, maakt verbinding met WiFi/MQTT, publiceert de vereiste berichten inclusief batterijniveau en schakelt zichzelf vervolgens UIT door de EN-pin weer op LAAG te zetten.
Door deze chips op deze manier te gebruiken, profiteer ik van de lage slaapstroom van de ATtiny en de nul-stationaire stroom van de ESP wanneer de chip is uitgeschakeld via CH_PD-pin.
Benodigdheden
Vooraf aangevraagd:
- Kennis van het programmeren van een ATTiny & ESP 01
- Kennis van het solderen van componenten op een PCB
ESP-01 (of een ESP)
ATTiny 13A - AVR
LDO 7333-A - Spanningsregelaar met lage uitval
Weerstanden - 1K, 10K, 3K3
Condensatoren: 100uF, 0,1 uF
Drukknopschakelaar, micro AAN/UIT-schakelaar - (beide optioneel)
Diode - IN4148 (of een equivalent)
Li-ion batterij
Reed-schakelaar
Een koffer om alles in op te bergen
Soldeer, PCB enz
Stap 1: Schema's en broncode
Schema's zijn zoals weergegeven in het bijgevoegde diagram.
Ik heb een P-kanaal MOSFET toegevoegd voor bescherming tegen omgekeerde polariteit. Als je dit niet nodig hebt, kun je het weglaten. Elke P-kanaal MOSFET met een lage Rds ON is voldoende.
Op dit moment heeft de ESP niet de mogelijkheid van OTA, maar dat is voor toekomstige verbetering.
Broncode smart-door-sensor
Stap 2: Werking van het circuit
ATTiny werkstroom
De magie hier gebeurt in hoe de ATTiny de positie van de deurschakelaar bewaakt.
De normale optie zou zijn om een pull-up-weerstand aan de schakelaar te bevestigen en deze status te blijven bewaken. Dit heeft het nadeel dat constante stroom wordt verbruikt door de pull-up weerstand. De manier waarop dit hier is vermeden, is dat ik twee pinnen heb gebruikt om de schakelaar te bewaken in plaats van één. Ik heb hier PB3 & PB4 gebruikt. PB3 wordt gedefinieerd als invoer en PB4 als uitvoer met een interne INPUT_PULLUP op PB3. Normaal gesproken wordt PB4 HOOG gehouden wanneer ATtiny in de slaapmodus is. Dit zorgt ervoor dat er geen stroom door de ingangstrekweerstand gaat, ongeacht de positie van de reed-schakelaar. d.w.z. Als de schakelaar gesloten is, zijn zowel PB3 als PB4 HOOG en loopt er dus geen stroom tussen beide. Als de schakelaar open is, is er geen pad tussen hen en is de stroom nul. Wanneer de ATtiny wakker wordt, schrijft hij een LOW op PB4 en controleert vervolgens de status van PB3. Als PB3 HOOG is, is de reed-schakelaar OPEN, anders is hij GESLOTEN. Het schrijft dan een HIGH terug op PB4.
De communicatie tussen de ATtiny & ESP gebeurt via twee pinnen PB1 / PB2 verbonden met Tx/RX van ESP. Ik heb het signaal gedefinieerd als:
PB1 PB2 ====== Tx Rx
0 0 ====== WAKE_UP (gezondheidscontrole)
0 1 ====== SENSOR_OPEN
1 0 ====== SENSOR_CLOSED
1 1 ====== ONGEBRUIKT
Afgezien van het verzenden van het signaal naar de ESP, stuurt het ook een HOGE puls op PB0 die is verbonden met de ESP CH_PD-pin. Dit wekt de ESP. Het eerste wat ESP doet is om GPIO0 HOOG te houden, die is verbonden met CH_PD, waardoor de stroom wordt geactiveerd, zelfs als de ATTiny de PB0 HOOG weghaalt. De besturing is nu bij het ESP om te bepalen wanneer hij wil uitschakelen.
Het maakt vervolgens verbinding met WiFi, MQTT, plaatst het bericht en schakelt zichzelf uit door LOW te schrijven op GPIO0.
ESP 01 Werkstroom:
ESP-stroom is rechttoe rechtaan. Het wordt wakker en leest de waarden van de Tx/Rx-pinnen om te bepalen welk type bericht moet worden gepost. Maakt verbinding met WiFi en MQTT, plaatst het bericht en schakelt zichzelf uit.
Alvorens uit te schakelen, controleert het opnieuw de waarden van de invoerpinnen om te zien of ze zijn veranderd sinds de laatste uitlezing. Dit om te zorgen voor een snelle opening en sluiting van de deur. Als u deze controle niet hebt, is het in sommige gevallen mogelijk dat u het sluiten van de deur mist als deze binnen 5-6 seconden na opening wordt gesloten. Een praktisch scenario waarbij de deur binnen 2 seconden wordt geopend en gesloten, wordt goed vastgelegd door de while-lus die de berichten blijft posten zolang de huidige status van de deur verschilt van de vorige. Het enige scenario dat het kan missen om alle open/dicht-gebeurtenissen op te nemen, is wanneer de deur herhaaldelijk wordt geopend/gesloten binnen een venster van 4-5 seconden, wat een zeer onwaarschijnlijk geval is - waarschijnlijk een geval van een kind dat met de deur speelt.
Stap 3: Gezondheidscontrole
Ik had ook een manier nodig om een statuscontrolebericht van het ESP te krijgen, waar het ook het batterijniveau van het ESP naar toe stuurt om ervoor te zorgen dat de sensor goed werkt zonder handmatige inspectie. Hiervoor stuurt de ATTiny elke 12 uur een WAKE_UP signaal. Het kan worden geconfigureerd via de variabele WAKEUP_COUNT in de ATtiny-code. Dit is erg handig voor deuren of ramen die zelden worden geopend en dus u zult misschien nooit te weten komen of er iets mis is met de sensor of de batterij.
Als u de gezondheidscontrolefunctie niet nodig heeft, is het hele concept van het gebruik van de ATTiny niet nodig. In dat geval kun je andere ontwerpen vinden die mensen hebben gemaakt waarbij de voeding naar de ESP wordt gevoed via een MOSFET en je dus een nulstroomverbruik kunt bereiken als de deur niet wordt bediend. Er zijn andere dingen waar voor gezorgd moet worden, zoals de huidige trekkracht om hetzelfde te zijn in deur open en deur dicht positie - daarvoor zag ik ergens een ontwerp dat gebruik maakte van een 3-standen reed-schakelaar in plaats van de gebruikelijke 2-standen.
Stap 4: Stroommetingen en levensduur van de batterij
Ik heb het stroomverbruik van het circuit gemeten en het duurt ~30uA tijdens het slapen en rond. Afgaande op de datasheets van ATTiny, zou het ongeveer 1-4 uA moeten zijn voor het hele circuit inclusief ruststroom van de LDO, maar dan geven mijn metingen 30 aan. De MOSFET en LDO verbruiken onbeduidende stroom.
Een batterij van 800 mAh moet dus lang meegaan. Ik heb geen exacte statistieken, maar ik gebruik het nu al meer dan een jaar op 2 van mijn deuren en elke 18650-cel met nog ongeveer 800 mAh erin gaat ongeveer 5-6 maanden mee op mijn hoofddeur die opent en sluit om minimaal 30 keer per dag. Die op de dakdeur die maar een paar keer per week opengaat, gaat 7-8 maanden mee.
Stap 5: Toekomstige verbeteringen
1. De ESP bevestigt de levering van het MQTT-bericht niet. Het programma kan worden verbeterd door u te abonneren op het onderwerp waarin het bericht wordt gepubliceerd om de levering te bevestigen of een Async MQTT-bibliotheek kan worden gebruikt om een bericht met QoS 1 te posten.
2. OTA-update: De ESP-code kan worden gewijzigd om een MQTT-onderwerp voor een update te lezen en zo in een OTA-modus te gaan om een bestand te ontvangen.
3. ESP01 kan worden vervangen door ESP-12 om toegang te krijgen tot meer invoerpincodes en dus kunnen er meer sensoren op worden aangesloten. Communicatie via de 2 bit methode is dan niet mogelijk. Dit kan vervolgens worden verbeterd om I2C-communicatie tussen ATtiny en ESP te implementeren. Dit is een beetje ingewikkeld maar werkbaar. Ik heb het werkend in een andere opstelling waar een ATTiny roterende encoderwaarden naar de ESP stuurt via de I2C-lijn.
4. Het stroomcircuit bewaakt de interne Vcc van de ESP. Als we ESP12 gebruiken, kan dit worden aangepast om het werkelijke batterijniveau via de ADC-pin te lezen.
5. In de toekomst zal ik hier ook een wijziging op plaatsen die kan worden gebruikt als een stand-alone sensor zonder dat een MQTT of een domoticasysteem nodig is. De sensor werkt stand-alone en kan een telefoongesprek voeren wanneer deze wordt geactiveerd - hiervoor heeft hij natuurlijk een internetverbinding nodig.
6. En de lijst gaat maar door…
7. Omgekeerde batterijbescherming - KLAAR (De werkelijke apparaatafbeeldingen zijn oude en weerspiegelen dus niet de MOSFET)
Aanbevolen:
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: 7 stappen
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: Soms zijn trillingen de oorzaak van ernstige problemen in veel toepassingen. Van machineassen en lagers tot de prestaties van de harde schijf, trillingen veroorzaken schade aan de machine, vroegtijdige vervanging, lage prestaties en veroorzaken een grote aanslag op de nauwkeurigheid. Toezicht houden
Hoe maak je een draadloze Tin-Can-telefoon! (Arduino Walkie Talkie): 7 stappen (met afbeeldingen)
Hoe maak je een draadloze Tin-Can-telefoon! (Arduino Walkie Talkie): Onlangs zat ik midden in een heel belangrijk telefoontje toen mijn bananentelefoon niet meer werkte! Ik was zo gefrustreerd. Dat is de laatste keer dat ik een oproep mis vanwege die stomme telefoon! (Achteraf ben ik misschien een beetje te boos geworden in
Easy Very Low Power BLE in Arduino Part 2 -- Temperatuur-/vochtigheidsmonitor -- Rev 3: 7 stappen
Easy Very Low Power BLE in Arduino Part 2 -- Temperatuur-/vochtigheidsmonitor -- Rev 3: Update: 23 november 2020 – Eerste vervanging van 2 x AAA-batterijen sinds 15 januari 2019 dwz 22 maanden voor 2xAAA AlkalineUpdate: 7 april 2019 – Rev 3 van lp_BLE_TempHumidity, voegt datum-/tijdplots toe, met behulp van pfodApp V3.0.362+, en automatische beperking van
Maak een 2GIG-achtige deursensor voor ~ $ 4, afhankelijk van het aankoopvolume: 6 stappen
Maak een 2GIG-achtige deursensor voor ~ $ 4, afhankelijk van het aankoopvolume: deze gids zal het proces demonstreren dat u kunt volgen om uw eigen compatibele veiligheidsdeursensor te maken die er nog steeds strak uitziet en tegen zeer lage kosten is
Easy Very Low Power BLE in Arduino Part 3 - Vervanging van Nano V2 - Rev 3: 7 stappen (met afbeeldingen)
Easy Very Low Power BLE in Arduino Part 3 - Nano V2-vervanging - Rev 3: Update: 7 april 2019 - Rev 3 van lp_BLE_TempHumidity, voegt datum-/tijdplots toe, met behulp van pfodApp V3.0.362+, en automatische beperking bij het verzenden van gegevens Update: 24 maart 2019 – Rev 2 van lp_BLE_TempHumidity, voegt meer plotopties toe en i2c_ClearBus, voegt GT832E