Inhoudsopgave:

Meldingssensor wasmachine - Ajarnpa
Meldingssensor wasmachine - Ajarnpa

Video: Meldingssensor wasmachine - Ajarnpa

Video: Meldingssensor wasmachine - Ajarnpa
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Juli-
Anonim
Image
Image
Prototype
Prototype

Deze wasmachinesensor zit bovenop mijn wasmachine en gebruikt een versnellingsmeter om trillingen van de machine te detecteren. Als het voelt dat het wasprogramma is afgelopen, stuurt het me een melding op mijn telefoon. Ik heb dit gebouwd omdat de machine zelf niet meer piept als hij klaar is en ik het zat was om te vergeten de was eruit te halen.

De code is hier te vinden:

Volledige onderdelenlijst:

  • WEMOS LOLIN32
  • Half-size Breadboard (voor prototyping)
  • ABS Projectbox met Matrixbord 59x88x30mm
  • Sparkfun LIS3DH - Triple Axis Accelerometer Breakout
  • 1x ZVP3306A P-kanaal MOSFET, 160 mA, 60 V, 3-pins E-Lijn
  • 1x BC549B TO92 30V NPN-transistor
  • 5mm LED Blauw 68 mcd
  • 1x 100k 0.125W CF-weerstand
  • 1x 330k 0.125W CF-weerstand
  • 2x 10k 0.250W CF-weerstand
  • 1x 100 0.250W CF-weerstand
  • 2-pins vrouwelijke JST PH-stijl kabel (14 cm)
  • 4x M1219-8 Neodymium schijfmagneet 6x4mm

Stap 1: prototype

Prototype
Prototype

Het apparaat maakt gebruik van een ESP32-microcontroller. In dit geval gebruik ik het Lolin32-ontwikkelbord van Wemos dat je op AliExpress kunt kopen voor ongeveer $ 7. De versnellingsmeter is de Sparkfun LIS3DH - het is belangrijk dat de versnellingsmeter digitaal is in plaats van analoog, zoals u later zult zien. De batterij heb ik uit een oude set bluetooth-speakers gehaald.

De ESP32 maakt via I2C verbinding met de accelerometer. De eerste versie van de code heeft eenvoudig om de 20 ms de drie versnellingsassen (x, y en z) opgevraagd voor de gemeten versnellingswaarde. Ik plaatste het prototype van het breadboard op de wasmachine en ik produceerde de bovenstaande grafiek die versnellingspieken laat zien tijdens verschillende fasen van de wascyclus. De pieken waar de absolute versnelling groter was dan 125 mg (125 duizendste van de normale zwaartekracht) worden in oranje weergegeven. Deze periodes willen we detecteren en gebruiken om de status van de wasmachine te bepalen.

Hoe te bepalen of de machine aan of uit staat?

Een van de doelen van het bouwen van dit apparaat was dat het volledig passief zou zijn. D.w.z. er hoeven geen knoppen te worden ingedrukt; het zou gewoon werken. Het moet ook een heel laag vermogen hebben, omdat het in mijn geval niet echt mogelijk was om de stroomkabels naar de wasmachine te verlengen.

Gelukkig heeft de LIS3DH-versnellingsmeter een functie waarmee hij een onderbreking kan activeren wanneer de acceleratie een bepaalde drempel overschrijdt (let op, dit vereist het gebruik van het ingebouwde hoogdoorlaatfilter van de versnellingsmeter - zie de code op Github voor details) en de ESP32 kan worden gewekt via een interrupt uit de diepe slaapstand halen. We kunnen deze combinatie van functies gebruiken om een zeer energiezuinige slaapmodus te creëren die wordt geactiveerd door beweging.

De pseudo-code ziet er ongeveer zo uit:

# Apparaat wakker maken

notification_threshold = 240 counter = 10 accelerometer.set_threshold(96) #96mg while counter > 0: if accelerometer.above_threshold(): counter++ else: counter-- if counter > notification_threshold: # final spin cycle gedetecteerd slaap (1 seconde) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()

Je kunt hier zien dat we een teller gebruiken om te detecteren hoeveel seconden versnelling we hebben gedetecteerd tijdens de huidige wekperiode. Als de teller naar nul zakt, kunnen we het apparaat weer in de sluimerstand zetten. Als de teller 240 bereikt (de meldingsdrempel) dan betekent dat dat we 4 minuten trillingen hebben gedetecteerd. We kunnen de waarden van deze drempels aanpassen om ervoor te zorgen dat het apparaat de laatste centrifugeercyclus correct detecteert. Zodra er voldoende trillingen zijn gedetecteerd, kunnen we gewoon nog 5 minuten slapen (in mijn geval is dit hoe lang het duurt voordat het wassen daadwerkelijk is voltooid) voordat we een melding sturen.

Stap 2: Een melding verzenden via Blynk

Een melding verzenden via Blynk
Een melding verzenden via Blynk

Blynk is een service die is ontworpen om interactie met IoT-apparaten mogelijk te maken met een app op je telefoon. In dit geval gebruik ik de push-notificatie-API die wordt geactiveerd door een eenvoudige HTTP POST naar de Blynk-API.

Stap 3: Stroomverbruik meten en de levensduur van de batterij schatten

Stroomverbruik meten en de levensduur van de batterij schatten
Stroomverbruik meten en de levensduur van de batterij schatten

De ESP32-chip wordt geadverteerd als een zeer laag stroomverbruik in diepe slaap (slechts 5uA). Helaas bieden de circuits op de vele verschillende ontwikkelborden zeer verschillende stroomverbruikskenmerken - niet alle ESP32-ontwikkelborden zijn gelijk gemaakt. Toen ik bijvoorbeeld met dit project begon, gebruikte ik de Sparkfun ESP32 Thing die ongeveer 1 mA stroom zou verbruiken in de diepe slaapmodus (zelfs na het uitschakelen van de power-LED). Sindsdien gebruik ik de Lolin32 (niet de Lite-versie) waarop ik in diepe slaapmodus een stroom van 144,5uA heb gemeten. Om deze meting te doen, heb ik eenvoudig een multimeter in serie geschakeld met de batterij en het apparaat. Dit is zeker gemakkelijker te doen tijdens het maken van prototypes met een breadboard. Ik heb ook het huidige gebruik gemeten wanneer het apparaat wakker is:

  • Diepe slaap: 144.5uA
  • Wakker: 45mA
  • Wifi ingeschakeld: 150mA

Ervan uitgaande dat ik de machine twee keer per week gebruik, schatte ik de volgende tijden voor de tijd die de sensor in elke staat doorbrengt:

  • Diepe slaap: 604090 seconden (~1 week)
  • Wakker: 720 seconden (12 minuten)
  • Wifi ingeschakeld: 10 seconden

Op basis van deze cijfers kunnen we inschatten hoe lang de batterij meegaat. Ik gebruikte deze handige rekenmachine om een gemiddeld stroomverbruik van 0.2mA te krijgen. Geschatte levensduur van de batterij is 201 dagen of ongeveer 6 maanden! In werkelijkheid heb ik geconstateerd dat het apparaat na ongeveer 2 maanden niet meer werkt, dus er kunnen enkele fouten zijn in metingen of de capaciteit van de batterij.

Stap 4: Batterijniveau meten

Batterijniveau meten
Batterijniveau meten
Batterijniveau meten
Batterijniveau meten

Ik dacht dat het leuk zou zijn als het apparaat me zou kunnen vertellen wanneer de batterij bijna leeg is, zodat ik weet wanneer ik hem moet opladen. Om dit te meten moeten we de spanning van de batterij meten. De accu heeft een spanningsbereik van 4,3V - 2,2V (de minimale bedrijfsspanning van de ESP32). Helaas is het spanningsbereik van de ADC-pinnen van de ESP32 0-3,3V. Dit betekent dat we de spanning van de batterij moeten verlagen van het maximum van 4,3 naar 3,3 om overbelasting van de ADC te voorkomen. Dit kan met een spanningsdeler. Verbind eenvoudig twee weerstanden met de juiste waarden van de batterij naar aarde en meet de spanning in het midden.

Helaas zal een eenvoudig spanningsdelercircuit stroom uit de batterij halen, zelfs als de spanning niet wordt gemeten. U kunt dit verminderen door hoogwaardige weerstanden te gebruiken, maar de keerzijde is dat de ADC mogelijk niet genoeg stroom kan trekken om een nauwkeurige meting te doen. Ik besloot weerstanden te gebruiken met waarden van 100kΩ en 330kΩ die 4,3V naar 3,3V zullen dalen volgens de formule van deze spanningsdeler. Gegeven een totale weerstand van 430kΩ, zouden we een stroomafname van 11,6uA verwachten (met behulp van de wet van Ohm). Gezien ons diepe slaap huidige verbruik 144uA is, is dit een redelijk significante stijging.

Omdat we de accuspanning maar één keer willen meten vlak voor het versturen van een melding, is het logisch om de spanningsdeler uit te schakelen in de tijd dat we niets meten. Gelukkig kunnen we dit doen met een paar transistors die op een van de GPIO-pinnen zijn aangesloten. Ik heb het circuit gebruikt dat in dit stackexchange-antwoord wordt gegeven. Je kunt me het circuit zien testen met een Arduino en een breadboard in de bovenstaande foto (merk op dat er een fout in het circuit zit, waardoor ik een hogere spanning meet dan verwacht).

Met het bovenstaande circuit op zijn plaats, gebruik ik de volgende pseudocode om een batterijpercentagewaarde te verkrijgen:

batterij percentage():

# activeer batterijspanningscircuit gpio_set_level (BATTERY_EN_PIN, HIGH) # Batterijniveau wordt geretourneerd als een geheel getal tussen 0 en 4095 adc_value = adc1_get_value (ADC_PIN) # activeer batterijspanningscircuit gpio_set_level (BATTERY_EN_PIN, LOW) float adc_value voltage * adc_value voltage deler gebruikt 100k / 330k ohm weerstanden # 4.3V -> 3.223, 2.4 -> 1.842 verwachte_max = 4,3*330/(100+330) verwachte_min = 2,4*330/(100+330) batterijniveau = (adc_voltage-expected_min)/(expected_max -expected_min) return battery_level * 100.0

Stap 5: Het mooier maken

Het mooier maken
Het mooier maken
Het mooier maken
Het mooier maken
Het mooier maken
Het mooier maken

Hoewel de breadboard-versie prima werkt, wilde ik hem in een pakket stoppen dat netter en betrouwbaarder zou zijn (geen draden die los kunnen raken of kort kunnen sluiten). Ik slaagde erin de perfecte projectdoos voor mijn behoeften te vinden die de juiste maat had, inclusief een prikbord, montagebeugels en schroeven om alles in elkaar te zetten. Ook was het dood goedkoop voor minder dan £ 2. Na ontvangst van de doos hoefde ik alleen nog maar de componenten op het prikbord te solderen.

Misschien was het lastigste onderdeel hiervan het monteren van alle componenten van het batterijspanningscircuit op de kleine ruimte naast de Lolin32. Gelukkig met een beetje jiggery pokery en de juiste verbindingen gemaakt met soldeer past de schakeling er netjes in. Omdat de Wemos Lolin32 geen pin heeft om de positieve batterijpool bloot te leggen, moest ik een draad van de batterijconnector naar het prikbord solderen.

Ik heb ook een LED toegevoegd die knippert wanneer het apparaat beweging heeft gedetecteerd.

Stap 6: finishing touch

Image
Image
Afwerking
Afwerking
Afwerking
Afwerking

Ik heb 4 neodymiummagneten van 6 mm x 4 mm aan de onderkant van de doos gelijmd, waardoor deze stevig aan de metalen bovenkant van de wasmachine kan blijven plakken.

De projectdoos wordt al geleverd met een klein gaatje om toegang te bieden voor kabels. Gelukkig kon ik het ESP32-bord dicht bij dit gat plaatsen om toegang te krijgen tot de micro-USB-connector. Na het vergroten van het gat met een knutselmes, past de kabel perfect om de batterij gemakkelijk op te laden.

Als u geïnteresseerd bent in een van de details van dit project, laat dan gerust een reactie achter. Als je de code wilt zien, kijk dan eens op Github:

github.com/alexspurling/wasmachine