Turinys:
- 1 žingsnis: Reikalavimai
- 2 veiksmas: jutiklio programinės įrangos kūrimas ir mirksėjimas
- 3 žingsnis: nustatykite debesį
- 4 veiksmas: nustatykite „AWS Lambda“
- 5 veiksmas: nustatykite „AWS Kinesis Firehose“duomenų srautą
- 6 veiksmas: nustatykite IAM vaidmenį kinezei
- 7 veiksmas: nustatykite AWS EC2
- 8 veiksmas: nustatykite IAM saugos vaidmenį EC2
- 9 veiksmas: pasiekite savo EC2 egzempliorių
- 10 veiksmas: gaukite „Google“žemėlapių API
- 11 veiksmas: paleiskite serverį
- 12 veiksmas: atlikite HTTP integravimą daiktų tinkle
- 13 žingsnis: duomenų apdorojimas
- 14 žingsnis: vizualizacija
- 15 žingsnis: Kreditai ir išorinės nuorodos
Video: Kelių stebėjimas: 15 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šiandien mes jums parodysime, kaip sukūrėme kelių anomalijų stebėjimo sistemą, pagrįstą akselerometrais, „LoRaWAN“, „Amazon Web Services“ir „Google Cloud“API.
1 žingsnis: Reikalavimai
- DISCO-L072CZ-LRWAN1 plokštė
- X-NUCLEO-IKS01A2 išplėtimo modulis (akceleratoriui)
- X-NUCLEO-GNSS1A1 (lokalizacijai)
- AWS sąskaita
- „Google Cloud Platform“paskyra
2 veiksmas: jutiklio programinės įrangos kūrimas ir mirksėjimas
Prijunkite IKS01A2 ir GNSS1A1 plokštės viršuje per GPIO kaiščius. Atsisiųskite programinės įrangos kodą iš „GitHub“. Sukurkite (jei dar neturite) paskyrą „ARM Mbed“ir importuokite kodą į internetinio kompiliatoriaus repą. Nustatykite tikslinę platformą į DISCO-L072CZ-LRWAN1 ir išsaugokite projektą. Dabar eikite į „The Things Network“ir sukurkite paskyrą, jei jos dar neturite. Sukurkite programą, sukurkite naują įrenginį programos viduje ir nustatykite ryšio režimą į OTAA. Paimkite atitinkamus parametrus, kad užpildytumėte šiuos laukus faile „mbed_app.json“: „lora.appskey“, „lora.nwkskey“, „lora.device-address“.
Jutiklis periodiškai įrašys akselerometro ir GNSS duomenis ir siunčia juos per LoRa ryšį į artimiausius vartus, kurie juos persiųs į mūsų programą „The Things Network“. Kitas žingsnis yra nustatyti debesies serverį ir HTTP integraciją TTN.
3 žingsnis: nustatykite debesį
Dabar esame pasirengę sukurti debesų infrastruktūrą, kuri rinks ir kaups duomenis iš visų dislokuotų plokščių. Ši infrastruktūra parodyta žemiau esančiame paveikslėlyje, ją sudaro:
- Kinezė, skirta apdoroti gaunamą duomenų srautą;
- Lambda, norint filtruoti ir iš anksto apdoroti duomenis prieš juos saugojant;
- S3, saugoti visus duomenis;
- EC2, analizuoti duomenis ir talpinti mūsų sąsają.
4 veiksmas: nustatykite „AWS Lambda“
Mes iliustruosime veiksmus, būtinus šiai infrastruktūrai sukurti, pradedant „Lambda“.
- Prisijunkite naudodami savo AWS paskyrą ir pagrindiniame konsolės puslapyje eikite į „Lambda“
- Spustelėkite Sukurti funkciją
- Viršutinėje puslapio dalyje reikia pasirinkti Autorius iš „Scratch“. Tada užpildykite kitus laukus, kaip parodyta paveikslėlyje, tada spustelėkite Sukurti funkciją
- Dabar, kai sukūrėte „AWS Lambda“funkciją, eikite į https://github.com/roadteam/data-server ir nukopijuokite failo aws_lambda.py turinį į redaktorių, kurį rasite antroje puslapio pusėje. Jūsų „Lambda“funkcija dabar paruošta:)
5 veiksmas: nustatykite „AWS Kinesis Firehose“duomenų srautą
- Grįžkite į pagrindinį AWS konsolės puslapį ir eikite į „Kinesis“į „Paslaugos“
- Dabar esate pagrindiniame „Kinesis“puslapyje. Puslapio dešinėje, skiltyje „Kinesis Firehose pristatymo srautai“, pasirinkite „Sukurti naują pristatymo srautą“
- Skiltyje „Pristatymo srauto pavadinimas“parašykite „kelių stebėjimo srautas“. Kituose laukuose palikite numatytuosius nustatymus ir spustelėkite „Kitas“
- Dabar skiltyje „Šaltinio įrašų transformavimas naudojant„ AWS Lambda “pasirinkite Įgalinta ir kaip„ Lambda “funkcija spustelėkite naujai sukurtą„ kelių stebėjimo lambda “. Nesijaudinkite, jei pasirodys įspėjimas apie funkcijos skirtąjį laiką, nes mūsų atliekama operacija nėra brangi. Kituose laukuose palikite numatytuosius nustatymus ir spustelėkite „Kitas“
- Kaip paskirties vietą pasirinkite „Amazon S3“, o kaip „S3“paskirties vietą - „Sukurti naują“. Kaip kibiro pavadinimą įveskite „kelių stebėjimo kaušas“ir tada eikite. Dabar palikite kitus laukus numatytuosius ir spustelėkite Pirmyn
- Galbūt norite nustatyti buferio dydį 1 MB, o buferio intervalą - 60 sekundžių. Buferis bus praplaunamas į S3, kai bus įvykdyta viena iš dviejų sąlygų. Neišeikite iš puslapio, žiūrėkite kitą veiksmą
6 veiksmas: nustatykite IAM vaidmenį kinezei
Dabar mes nustatėme „Kinesis“saugos leidimus, nes ji turi iškviesti „Lambda“funkciją išankstiniam apdorojimui ir tada ji bus parašyta S3
- Puslapio apačioje, kuriame esate „IAM vaidmuo“, pasirinkite „Sukurti naują pasirinkimą“, sukurkite naują IAM vaidmenį, kaip parodyta paveikslėlyje, ir spustelėkite Leisti
- Dabar grįžote į ankstesnį puslapį, spustelėkite kitą. Dabar galbūt norėsite dar kartą patikrinti visus parametrus. Baigę spustelėkite „Sukurti pristatymo srautą“
Dujotiekis „Kinesis-Lambda-S3“pradėtas eksploatuoti!
7 veiksmas: nustatykite AWS EC2
Dabar mes sukursime EC2 egzempliorių su kai kuriomis API, kurios leis mums stumti ir ištraukti duomenis iš AWS debesies, taip pat serverį, kuriame yra mūsų programų priekinė sąsaja. Gamybos aplinkoje galbūt norėsite paskelbti API naudodami labiau keičiamo dydžio AWS API šliuzą.
- Pagrindiniame AWS konsolės puslapyje eikite į EC2 paslaugą
- Spustelėkite Paleisti egzempliorių
- Viršutinėje paieškos juostoje įklijuokite šį kodą: „ami-08935252a36e25f85“, tai yra iš anksto sukonfigūruotos virtualios mašinos, kurią norite naudoti, identifikavimo kodas. Dešinėje spustelėkite Pasirinkti
- Stulpelyje „Tipas“pasirinkite t2.micro ir spustelėkite „Peržiūrėti ir paleisti“. Dar nepaleiskite egzemplioriaus, pereikite prie kito veiksmo
8 veiksmas: nustatykite IAM saugos vaidmenį EC2
- Prieš paleisdami norime pakeisti mūsų egzemplioriaus saugos grupę. Norėdami tai padaryti, skilties „Saugumo grupės“dešinėje spustelėkite „Redaguoti saugos grupes“. Nustatykite naują saugos grupę taip. Tai iš esmės sukonfigūruoja jūsų egzempliorių, atskleidžiantį 22 SSH ryšio prievadą ir 80 prievadą http paslaugoms
- Dar kartą spustelėkite „Peržiūrėti ir paleisti“. Dabar patikrinkite, ar nustatyti visi parametrai. Baigę spustelėkite Paleisti
- Spustelėjus pasirodys naujas langas, kuriame bus nustatyta raktų pora ssh ryšiui su egzemplioriumi. Pasirinkite „Sukurti naują raktų porą“ir kaip pavadinimą įveskite „ec2-road-monitoring“. Spustelėkite Atsisiųsti raktų porą. Labai svarbu, kad šis failas būtų pamestas arba (dar blogiau) saugomas nesaugiai: negalėsite vėl atsisiųsti rakto. Atsisiuntus.pem raktą, egzempliorius yra paruoštas paleisti
9 veiksmas: pasiekite savo EC2 egzempliorių
Jūsų naujas EC2 egzempliorius yra AWS debesyje. Prie jo galite prisijungti naudodami anksčiau atsisiųstą raktų failą (šioje pamokoje darome prielaidą, kad žinote ssh pagrindus). Galite gauti egzemplioriaus IP, pasirinkę jį prietaisų skydelyje skiltyje „Aprašymas“taip: Galite naudoti tiek savo viešąjį IP, tiek viešąjį DNS. Dabar naudodami ssh klientą įveskite komandą:
ssh -i ec2-road-monitoring.pem ec2-user@YOUR-IP-ADDR-OR-DNS
kur „ec2-road-monitoring.pem“yra jūsų raktas, sukurtas anksčiau.
Dabar ištraukite serverio pusės kodą
git klonas-rekursyvus
10 veiksmas: gaukite „Google“žemėlapių API
Mes beveik baigėme. Dabar mes turime nustatyti „Google“žemėlapių API savo html puslapyje, kad vartotojui būtų rodomas žemėlapis su kelio taškais:
- Prisijunkite prie „Google“paskyros ir eikite į
- Puslapio kairėje spustelėkite „Pradėti“
- Meniu pasirinkite „Žemėlapiai“, tada spustelėkite tęsti
- Kaip projekto pavadinimą įveskite „kelių stebėjimas“ir spustelėkite Pirmyn
- Įveskite atsiskaitymo informaciją ir spustelėkite Tęsti
- Dabar jūsų projektas paruoštas ir mes gausime API raktą spustelėdami API ir paslaugos -> Įgaliojimai
11 veiksmas: paleiskite serverį
Ir čia yra jūsų API raktas. Paskutinis dalykas, kurį turite padaryti, yra eiti į data_visualization/anomalies_map.html ir nukopijuoti raktą į failo pabaigą taip, pakeičiant „YOUR-KEY-HERE“
Dabar viskas paruošta ir paruošta kelionei! Norėdami pradėti vykdyti EC2 egzemplioriuje: „cd data-server“„python flask_app.py“
Įveskite savo naršyklėje savo EC2 egzemplioriaus IP arba dns adresą, turėtumėte pamatyti anomalijų žemėlapį su kai kuriais netikrais duomenimis
12 veiksmas: atlikite HTTP integravimą daiktų tinkle
Dabar, kai turime visą vidinę infrastruktūrą, galime apdoroti HTTP integraciją.
- Sukurkite naują programą ir užregistruokite savo įrenginį. Mes prisiimame pagrindines žinias apie TTN, jei ne, žiūrėkite trumpą pradžios vadovą
- Programos meniu pasirinkite „Integracijos“, tada „pridėti integraciją“
- Pasirinkite HTTP integraciją
- Įveskite laukus po paveikslėliu ir pakeiskite juos EC2 ip arba viešuoju DNS
13 žingsnis: duomenų apdorojimas
Kiekvienam duomenų rinkiniui T, surinktam iš jutiklio, turite atlikti šiuos veiksmus:
- Gaukite kortelių rinkinį, kurio GPS koordinatės krenta T. vietinėje zonoje. Vietinė sritis yra visos kortelės, esančios 100 metrų aplink T.
- Kiekvienam artimiausiam kartui N apskaičiuokite pagreičio matuoklio Z ašies kvadratinį vidurkį N.
- Apskaičiuokite kvadratinį standartinį nuokrypį. Pseudokode: std = suma ([(x. Z_accel ** 2 - vidurkis) ** 2 x x arti])
- Išvestis tokiu formatu: lat, long, Z_accel ** 2, mean, std
Norėdami apskaičiuoti vietinę vietovę, naudokite GPS atstumą metrais. C ++:
#define D2R (M_PI / 180.0)
#define EARTH_RAY 6371 dvigubas atstumas (double lat1, double long1, double lat2, double long2) {double dlong = (long2 - long1) * D2R; dvigubas dlatas = (lat2 - lat1) * D2R; dvigubas a = pow (sin (dlat/2,0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2,0), 2); dvigubas c = 2 * atan2 (sqrt (a), sqrt (1-a));
Dabar, naudodami tarpinius duomenis, sugeneruotus ankstesniame žingsnyje, nustatykite anomalijas ir atlikite naivų klasifikavimą, naudodami šią ištrauktą kiekvienai eilutei:
linija = žemėlapis (plūdė, eilutė.split (","))
v = eilutė [2] vidurkis = eilutė [3] std = eilutė [4], jei v (vidurkis + std*3): jei v (vidurkis + std*2): jei v (vidurkis + std): o.pridėti ([1, [0] eilutė, [1] eilutė]) else: o.append ([2, [0] line, [1]) else: o.append ([3, [0] line, line [1])
Anomalijos klasifikuojamos naudojant 68–95–99,7 taisyklę
Dabar turite tokio formato kolekciją [tipas, latas, ilgas].
Tipo reikšmė yra tokia:
- Nedidelė anomalija, tikriausiai nesvarbi
- Vidutinė anomalija
- Kritinė anomalija
14 žingsnis: vizualizacija
Norėdami suprasti ir galbūt pakeisti vizualizacijos dalį, turime išmokti naudoti pasirinktinius žymeklius - „Google“žemėlapių API funkciją
Pirma, žemėlapis turi būti inicijuotas atgalinio skambučio metu:
function initMap () {
duomenys = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, centre: {lat: data [0] [1], lng: data [0] [2]}}); pastaba (); }
Nurodykite šio atšaukimo pavadinimą URL (įterpėme čia prieš mūsų API raktą) HTML žymoje:
scenarijus async atidėti src = "https://maps.googleapis.com/maps/api/js?key=[KEY]&callback=initMap"
Sukūrus objektą, žemėlapyje galima įterpti žymeklį:
naujas google.maps. Marker ({pozicija: {lat: LATITUDE, lng: LONGITUDE}, žemėlapis: žemėlapis, piktograma: „/path/to/icon.png“})
Kode galite matyti, kad kiekvienam anomalijų duomenų rinkinio duomenims įterpiamas žymeklis (žr. Funkciją „pastaba“), o piktograma yra pagrįsta anomalijos klase. Paleidę tai naršyklėje, galime ištirti žemėlapį, kuriame anomalijas galima filtruoti naudojant žymimuosius laukelius, kaip parodyta paveikslėlyje.
15 žingsnis: Kreditai ir išorinės nuorodos
Šį projektą atliko Giovanni De Luca, Andrea Fioraldi ir Pietro Spadaccino, Romos Sapienza universiteto informatikos inžinerijos magistro laipsnio pirmakursiai.
-
Skaidrės, kurias autoriai pateikė šiam koncepcijos įrodymui:
www.slideshare.net/PietroSpadaccino/road-m…
-
„GitHub“repos su visu kodu:
github.com/roadteam
Rekomenduojamas:
Kelių dviračių dienos ir šono matoma 350 mA šviesa (viena ląstelė): 11 žingsnių (su nuotraukomis)
Kelių dviračių dienos ir šono matoma 350mA lemputė (vieno elemento): Ši dviračio lemputė turi priekinius ir 45 ° kampu nukreiptus gintaro spalvos šviesos diodus, kurie veikia iki 350 mA. Šoninis matomumas gali pagerinti saugumą šalia sankryžų. Gintaras buvo pasirinktas dienos matomumui. Šviestuvas buvo sumontuotas ant vairo kairiojo lašo. Jo modeliai gali būti išsklaidyti
Kelių kanalų „Wifi“įtampos ir srovės matuoklis: 11 žingsnių (su nuotraukomis)
Kelių kanalų „Wi-Fi“įtampos ir srovės matuoklis: kai maitinate duona, dažnai reikia vienu metu stebėti skirtingas grandinės dalis. Norėdami išvengti skausmo, kad multimetro zondai būtų priklijuoti iš vienos vietos į kitą, norėjau sukurti daugiakanalį įtampos ir srovės matuoklį. „Ina260“plokštė
Kelių laikmačių režimas su išoriniu valdymu: 13 žingsnių
Daugiafunkcinis laikmatis su išoriniu valdymu: Šis projektas „Instructable“yra daugiafunkcinio laikmačio konstrukcija. Šis laikmatis gali veikti kaip: Bendrosios paskirties aliarmas, pasirenkamas nuo 1 sekundės iki +90 valandų. Skaičiuojamas atgalinis signalas su garsiniu aliarmu ir (arba) valdomas išorinis
„HiFi“kelių kambarių „WiFi“ir „Bluetooth“garsiakalbis: 10 žingsnių (su nuotraukomis)
„HiFi“kelių kambarių „WiFi“ir „Bluetooth“garsiakalbis: „Wi-Fi“prijungti garsiakalbiai gali užtikrinti žymiai geresnę garso kokybę nei „Bluetooth“parinktys. Jie nesuspaudžia garso turinio prieš jį paleisdami, o tai gali neigiamai paveikti garsą, nes sumažina detalumo lygį
„IoT Made Simple“: kelių jutiklių stebėjimas: 7 žingsniai
„IoT Made Simple“: kelių jutiklių stebėjimas: Prieš kelias savaites čia paskelbiau pamoką apie temperatūros stebėjimą naudojant DS18B20-skaitmeninį jutiklį, kuris bendrauja per 1 laido magistralę, siunčia duomenis internetu su „NodeMCU“ir „Blynk“: „IoT Made Simple“: Temperatūros stebėjimas bet kur