Uporaba Garmin LIDARLite v3HP, Arduino MKR WIFI 1010 in Pushsafer za zaznavanje vsiljivca in pošiljanje potisnega obvestila na pametni telefon.
Komponente, ki so uporabljene v tem projektu
Sestavni deli strojne opreme
Arduino MKR WiFi 1010 1 kos
Garmin LIDAR-Lite v3HP 1 kos
Panasonic 680 uF kondenzator 1 kos
4,7 kohmska 1/4 W upora 2 kosa
Programske aplikacije in spletne storitve
Pushsafer
Ročno orodje in stroji za izdelavo
Razvojna plošča, 170 Pin
Komplet povezovalnih žic dolgih 5 cm 10 kosov
Zgodba
Za dovoz sem potreboval zunanji senzor vloma z daljšim dosegom od PIR senzorja in po možnosti brez lažnih alarmov. Doseg, ki ga potrebujem je 12m in večina PIR senzorjev zazna le približno 10m s težnjo, da sproži lažne alarme. Imam sistem za varovanje doma, vendar ni bilo zanesljivih senzorjev, ki bi lahko pokrivali moj celoten dovoz. Vir napajanja bi bil 5-voltni USB pretvornik, priključen na električno vtičnico, vendar sem želel eksperimentirati tudi z baterijo, saj v bližini vhoda na moj dovoz ni bližnjih zunanjih vtičnic.
Ta vsebina je samo za naročnike
Začel sem z Arduino Uno in eksperimentiral z različnimi senzorji, vključno s PIR, termično kamero, ultrazvočnim PING in X-pas radarjem. Nobeden od njih ni imel dosega, ki sem ga potreboval. Preizkusil sem več različnih PIR senzorjev in ugotovil, da so vsi nagnjeni k lažnim alarmom. Nato sem preizkusil senzor Garmin LIDARLite v3HP. Ta senzor je dobro deloval pri prekinitvah žarka in nanj niso vplivale vremenske spremembe ali spremembe svetlobe. Za razliko od fotoelektričnega žarka garažnih vrat, senzor LIDAR ne potrebuje reflektorja in ima veliko večji domet. Najprej sem uporabljal pulzno-širinski (PWM) vmesnik, ki je deloval dokaj dobro, vendar je zaradi nestabilnosti odčitkov na daljavo ustvaril nekaj lažnih alarmov.
Nato sem ga moral povezati z domačim WiFi omrežjem, zato sem na prototipno Uno ploščico dodal WINC1500 WiFi ploščico in DS1307 Real Time Clock (RTC) modul. RTC je potreben za zagotavljanje natančnih časovnih žigov, ko so bili zaznani vdori. Uno ni imel dovolj pomnilnika za WiFi program, prav tako pa sta bili obe ploščici preveliki in sta porabili preveč toka, da bi lahko delovali na LiPo baterijo.
Na tej točki sem spoznal, da je to popoln primer uporabe IoT (Internet stvari) plošče, zato sem prešel na Arduino MKR WIFI 1010. MKR 1010 ima 256KB Flash pomnilnika in 32KB SRAM-a v primerjavi z Uno 32KB Flash pomnilnika in 2 KB SRAM. MKR 1010 je tudi manjši, porabi manj toka in ima vgrajeno uro za realni čas, WiFi in Bluetooth.
MKR 1010 se je enostavno povezal z mojim WiFi omrežjem in imel več kot dovolj pomnilnika za moj program in vse knjižnice, ki jih je potreboval. Tudi RTC je deloval zelo dobro. Naslednja težava, ki jo je bilo treba rešiti je bila, kako poslati potisna obvestila na svoj iPhone XS. Z internetnim iskanjem sem našel tri možne spletne storitve: Blynk, Amazon Web Services (AWS) in Pushsafer. Če pošljete potisno obvestilo v napravo iOS ali Android, morate namestiti aplikacijo poslušalca (angl. Listner app).
Nobena od njih ni popolnoma brezplačna, vendar po tem ponuja različno število poročil o začetnih dogodkih in naročniških načrtov. AWS je bil najbolj zapleten in sem ga zaradi tega opustil. Blynk in Pushsafer sta si bila podobna po ceni, vendar je bil Pushsafer nekoliko preprostejši za izvedbo, zato sem ga izbral.
Z LIDARLite v3HP PWM vmesnikom nisem bil zadovoljen zaradi nestabilnosti odčitkov razdalje, ki je povzročala občasne lažne alarme. Poskusil sem ga preusmeriti na serijsko komunikacijo z integriranim vezjem (I2C) z uporabo najnovejše različice knjižnice LIDARLite_v3HP (3.0.5) in primeri programa v3HP_I2C. Vendar se program ni prevedel za MKR 1010 ploščo brez napak.
Na GitHubu sem objavil težavo in po več izmenjavah, pri katerih sem priložil podrobne napake prevajalnika, je Brad Wiseman posodobil knjižnico LIDARLite na različico 3.0.6 in mi posredoval podrobna navodila, kako uspešno prevesti za MKR 1010. Uporabil sem delčke kode iz primera programa LIDARLite_v3HP v3HP_I2C za izdelavo lastnega programa. Rezultat tega je, da je bil v3HP I2C vmesnik natančnejši in veliko stabilnejši od PWM vmesnika.
Odločil sem se, da eksperimentiram z namestitvijo LIDAR Lite v3HP senzorja montiranega na servo motor in da ga premikam v loku od 90 do 180 stopinj. Potem ko sem porabil veliko časa za eksperimentiranje z različnimi servomotorji, metodami pozicioniranja servo in časovnimi zamiki, sem zaključil, da celo počasno premikanje LIDAR senzorja s servo motorjem povzroča preveč lažnih alarmov.
Notranje vezje v LIDAR senzorju potrebuje stabilno okolje, da popravi lažne alarme. In popravi jih zelo dobro, ko je senzor v fiksnem položaju. Obstaja več možnih vzrokov za nestabilne odčitke razdalje, kot sta odbojnost površine predmeta in kot, pod katerim infrardeči laserski žarek zadene tarčo. Dodajanje premikajočega se servo motorja močno zaplete situacijo, zato sem se vrnil na fiksno pritrditev LIDAR senzorja na ohišju projekta.
LIDAR se pogosto uporablja za 3D-kartiranje in zaznavanje ovir, tako da je problem lažnih alarmov s premikajočim se LIDAR senzorjem mogoče rešiti s pravimi algoritmi. Bolj me je zanimala uporaba LIDAR-ja za zaznavanje prekinitev snopa, vendar lahko v določenem trenutku ponovno preidem na pritrditev senzorja na servo, da pokrijem večje območje. To bo povečalo praznjenje baterije in morda bom potreboval večjo baterijo.
Za povezave s strojno opremo sem uporabil standardno shemo I2C ožičenja iz LIDARLite_v3HP podatkovnega lista.
Od objave tega projekta sem nadaljeval z eksperimentiranjem z omejeno obliko LIDAR preslikave z uporabo LIDAR-Lite v3HP senzorja nameščenega na servo motor. Cilj je zmanjšati število lažnih alarmov, hkrati pa povečati število resničnih vdorov. S pomikanjem senzorja na 180-stopinjski lok, ki ga zmore večina servomotorjev, je kot referenca zgrajen 180-točkovni zemljevid razdalj brez vdorov.
Nato se na servo nameščeni LIDAR senzor neprekinjeno pomika naprej in nazaj po istem območju in primerja z referenčno karto. Prag je določen za prepoznavanje resničnih vdorov in ko razlika med referenčnim zemljevidom in odčitki razdalje preseže prag, se ustvari alarm. Ključ za dosego cilja je v algoritmu, ki se uporablja za primerjavo referenčnega zemljevida z odčitki razdalje
Preprosto odštevanje na vsaki točki stopinje ne zadostuje za zmanjšanje lažnih alarmov. Strojno učenje je lahko možna tehnika za rešitev te težave. V postopku sem, da preiskujem, kako bi ga lahko izvedli v tem projektu. Ko odkrijemo izvedljivo tehniko, nameravam uvesti servo nagib in skenirati ciljno območje za 180 stopinj vodoravno in 20 stopinj navpično. Pri 20 stopinjah nagiba in 12m razdalje bo LIDAR žarek pokrival višino približno 1,2m. To bi moralo zadoščati za razlikovanje med živaljo in človekom ali vozilom.
Ugotovil sem, da sta vrsta servo motorja in zakasnitev med servo premiki ključna dejavnika pri zmanjševanju lažnih alarmov. Številni majhni servomotorji so zaradi nepravilnosti mehanskih delov lahko netočni tudi do 1,3 stopinje. Servo motorji s plastičnimi zobniki so bolj gladki in ustvarjajo manj vibracij, ki vplivajo na odčitavanje razdalje.
Servo motorji, ki ostanejo v položaju brez neprekinjenih impulzov položaja, imajo tudi manj vibracij. Zakasnitev 100 milisekund med premiki servo pozicioniranja pomaga zmanjšati tresljaje, a 180-stopinjski pomik traja 18 sekund. Razmišljal sem o uporabi drsnega obroča in neprekinjenem vrtenju LIDAR senzorja, da bi odpravil vibracije servo motorja, zmanjšal mehansko nenatančnost in pospešil odčitavanje razdalje. Drsni obroček SRC022A-6 Adafruit ima hitrost vrtenja 0 – 300 vrt / min, vendar bi vseeno potreboval servo nagib in trenutna poraba energije se lahko poveča do točke, ko delovanje na akumulator ne bi bilo izvedljivo. Raziskoval sem neposredni pogon, digitalne servo-servo, da bi premagal nekatere od teh omejitev.
Program
Program je predolg, da bi ga objavili, zato si program lahko snamete iz spletne strani projekta, ki je objavljena na koncu članka.
Vir: https://www.hackster.io/maulepilot/lidar-intrusion-detector-3f7776