GSM närhet Alert med GPS läge och tid (3 / 5 steg)
Steg 3: Ultrasonic sensor - upptäcka rörelse
Intro till ultraljud avstånd sensorer
HC-SR04 ultraljud sensorn, och andra gillar det, helt enkelt skicka ut en "ping" (med en frekvens över mänskliga hörseln) när utlöses och lagra den tid det tar att ta emot ekot.
Den tid det tar att ta emot den reflekterade signalen representeras som en puls på "ECHO" PIN-koden.
Vanliga användningen fall för en av dessa sensorer den för att mäta avstånd, men genom att jämföra flera avläsningar, kan vi göra en användbar rörelsedetektor.
Utmaningar och begränsningar
- Sensorn har en maximal räckvidd (ca 3m allegedly)
- Det finns en gräns för hur ofta vi kan prova (vi kan inte prova tills pulsen har återvänt minst sagt).
- Sensorn matas konstiga avläsningar då och då behöver vi att korrekt hantera dessa.
Upptäcka rörelse
Jag beslutade att det enklaste sättet att upptäcka rörelse skulle vara att helt enkelt ta en avstånd läsning och jämföra den med det tidigare, om det hade ändrats med mer än 30% då jag skulle veta det hade varit rörelse. Med en perfekt sensor i en perfekt miljö skulle detta workfine, men i själva verket finns det udda avläsningar varje nu och därefter som skulle utlösa falskt.
Vägen runt detta var två gånger:
- Under "föregående" mätningarna höll jag ett rullande medelvärde av de senaste tio värdena.
- För jämförelse jag såg till att både av de två senaste avläsningarna där mer än 30% olika än genomsnittet. På detta sätt, om en behandling var ogiltigt, den andra skulle fortfarande vara inom 30% av genomsnittet och det skulle vara någon falsk trigger.
Genomföra i genomsnitt/utjämning
Denna artikel har en fin elegant och begripligt exempel på genomförandet i genomsnitt på en Arduino, jag anpassade sin kod.
Undvika att upprepa utlösare
Vi vill inte larmet att skicka flera SMS när något rör sig runt framför sensorn eller medan den i genomsnitt lösa efter en störning, så jag använde den röda lysdioden "blink counter" (Läs avsnittet LED) att avgöra om tillräckligt med tid har passerat nästa utlösaren. Jag såg till att blinkkoder, multiplicerat med den på + off tid av den röda LED var större än den tid det tar för att få en ny stabil genomsnittliga läsning.