Sadržaj:

Provjera izvješća o prometu (NL) s otiračem: 6 koraka
Provjera izvješća o prometu (NL) s otiračem: 6 koraka

Video: Provjera izvješća o prometu (NL) s otiračem: 6 koraka

Video: Provjera izvješća o prometu (NL) s otiračem: 6 koraka
Video: Тенерифе: крушение века - 1977 г. - Авиакатастрофа MAYDAY - Полный документальный фильм - HD - GPN 2024, Srpanj
Anonim
Provjera izvješća o prometu (NL) s otiračem
Provjera izvješća o prometu (NL) s otiračem

U ovom uputstvu opisat ću kako izgraditi otirač koji će provjeravati izvještaje o prometu nizozemskih autocesta. Nakon što izađete na otirač i na vašoj ruti dođe do gužve, prostirka će postati crvena. Kad nema zastoja, prostirka će postati zelena.

Radit ću na NodeMCU 1.0 (ESP0-12E Modul). Kod za ovaj projekt mogao bi raditi i na drugim uređajima (npr. Arduino ploče). Ovaj se projekt temelji na nizozemskom izvoru za izvješća o prometu, ANWB.

Ono što nam je potrebno za ovaj projekt:

- NodeMCU - Žice za kratkospojnike - LED svjetlo ili traka - Analogni senzor (aluminijska folija, spužva) - Wi -Fi veza - otirač

Koraci koje moramo poduzeti:

1. Spojite NodeMCu na Wi-Fi 2. Zatražite podatke putem HTTPS-a od ANWB.nl 3. Pretvorite podatke u korisne informacije 4. Instalirajte okidač 5. Povratne informacije o dizajnu

Korak 1: Povežite NodeMCU na Wi-Fi

Ovaj korak će pokazati kako izvršiti uspješan HTTPSRequest da biste vidjeli je li uređaj spojen na internet.

Najprije instalirajte ESP8266 knjižnicu u Arduino IDE. Otvorite iz primjera ESP8266>

Ispunite svoje vjerodajnice za Wi-Fi pri vrhu koda, kao što je prikazano u nastavku:

const char* ssid = "YOUR_SSID";

const char* lozinka = "YOUR_PASS";

Prenesite kôd na svoj uređaj i provjerite je li NodeMCU spojen na internet. Primjer HTTPSRequest koristi Github kao zadanu vrijednost za dobivanje informacija. Kad je HTTPSRequest uspio, primit ćete Github podatke u serijski monitor.

Korak 2: Zatražite podatke od HTTPS -a od ANWB.nl

U ovom drugom koraku mijenjate izvor podataka sa zadanog na izvor potreban za ovaj projekt: ANWB.nl.

Pri vrhu koda promijenite char* host u www.anwb.nl (ili iz drugog izvora iz kojeg želite dobiti podatke):

const char* host = "www.anwb.nl";!! Ako koristite drugi izvor, korak 3 će se razlikovati od mog koda. Korak 3 treba posebno kodiranje za dohvat upotrebljivih informacija!

Zatim promijenite URL niza u postavci funkcije na "/feeds/gethf", put s kojeg se uzimaju podaci:

String url = "/feeds/gethf";!! Ako koristite drugi izvor, upotrijebite put do svog izvora!

Kada učitate kôd, trebali biste dobiti odgovor sa svim podacima s www.anwb.nl/feeds/gethf. Ovaj kôd sprema se u niz koji se naziva line.

Korak 3: Pretvorite podatke u korisne podatke

Do sada se kôd pokretao samo kada je NodeMCU pokrenut ili resetiran, jer je sav kôd u funkciji postavljanja. Da biste postavili okidač za kontinuirano pokretanje koda, morate promijeniti položaj koda koji pokreće HTTPS zahtjev. Ispod funkcije petlje dodajete drugu funkciju. Nazvao sam to void ekstraktPodaci:

ExtraData () {

}

Kopirajte dio koda iz funkcije postavljanja u ExtraData (). Počnite sa sljedećim retkom do kraja funkcije postavljanja:

if (! client.connect (host, Kôd je sada u vašoj novoj funkciji, pa uklonite kopirani kôd iz funkcije postavljanja.

Zatim pozovite funkciju ExtraData u funkciji petlje i dodajte malo kašnjenja kako biste nodeMCU -u dali vremena za odmor:

void loop () {{100} {101}

extraData (); kašnjenje (30000); // ovo će se ukloniti kasnije kada budemo imali analogni senzor}

Budući da su podaci koje primate pohranjeni u nizu i potrebni su samo dijelovi ovog niza, morate napisati nekoliko for petlji.

Prvo provjerite sve položaje riječi 'cesta'. Nakon riječi 'cesta' slijedi naziv ceste (A1, A2 itd.).

Prije nego počnete pisati for petlje, morate deklarirati neke varijable koje ćete koristiti:

int noOfPos = 0;

boolean hasRunOnce = false; int od = 0; int roadArray [20];

Sada je vrijeme da napišete neke petlje. Napisao sam petlje for na dnu funkcije extraData. Pokušao sam ga podijeliti u zasebne funkcije, ali nisam uspio.

Za petlju br. 1: pronađite položaje riječi cesta u retku niza:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("cesta \": ", od); roadArray [noOfPos] = poz; noOfPos+= 1; from = poz + 1; if (hasRunOnce == true && pos == line.indexOf ("cesta \": ")) {i = line.length (); } hasRunOnce = true; }

Zatim provjerite na kojim cestama postoji prometna gužva, koristeći položaje for petlje odozgo. Položaj naziva cesta uvijek je isti i počinje 7 znakova, a završava 10 znakova iza riječi cesta.

Sada definiramo naziv poljaOfRoadArray, koji će se popuniti u sljedećoj for petlji:

Naziv nizaOfRoadArray [20];

Za petlju br. 2: Pronađite sve nazive cesta s unosom iz for petlje br. 1

for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

Naziv poljaOfRoudArray trebao bi biti ispunjen svim signaliziranim prometnim gužvama.

Zatim ćete provjeriti nalazi li se vaša cesta u nizu cesta s gužvom u prometu. Ispišite nazivOfRoadArray da biste dobili ceste u podacima. Učinite to dodavanjem Serial.println (nameOfRoadArray [k]); u drugu for petlju poput:

for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

Ako je to ispravno, na serijskom monitoru vidjet ćete sve ceste s gužvom u prometu.

Prije nego što napišete zadnju petlju For, morate deklarirati boolean kao globalnu varijablu. Logički naziv, koji se naziva trafficJam, prema zadanim je postavkama netočan i promijenit će se ako funkcija extraData vrati vrijednost true za prometnu gužvu. Sljedeći kôd ide iznad.ino datoteke:

boolean trafficJam = false;

Za petlju br. 3: Provjerite je li cesta, u ovom slučaju A1, na popisu prometnih gužvi.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// promijenite A1 u cestu u svoju korist trafficJam = true;}

Ako ispisujete trafficJam na serijskom monitoru, znate postoji li zastoj na A1 ili ne.

Stavite ovaj kôd na dno funkcije extraData:

Serial.println (trafficJam); // vidjeti postoji li prometna gužva

S ovim podacima nastavit ćemo dalje raditi na povratnim informacijama sustava u koraku 5.

Korak 4: Instalirajte okidač

Instalirajte okidač
Instalirajte okidač
Instalirajte okidač
Instalirajte okidač
Instalirajte okidač
Instalirajte okidač

Budući da sada možemo uspješno dohvatiti podatke iz izvora, vrijeme je za izgradnju senzora koji će pokrenuti nodeMCU za pokretanje funkcije ExtractData. Odlučio sam napraviti analogni senzor od otirača. Okidač možete promijeniti pomoću drugog senzora.

Izrada analognog senzora

Koristio sam 2 komada aluminijske folije, dvije kratkospojne žice i spužvu.

Izbušite rupu u spužvi, to je mjesto gdje će aluminijske folije doći u kontakt. Zalijepite aluminijsku foliju s obje strane spužve. Spojite kratkospojnike na aluminijsku foliju. Spojite žice kratkospojnika na čvorMCU. Jedna strana na A0-pin, a druga na V3-pin. Stavite spužvu ispod otirača i upravo ste promijenili otirač u senzor. Super!

Kôd za očitavanje vrijednosti sa senzora da biste vidjeli stoji li netko na otiraču:

int sensorValue = analogRead (A0);

if (sensorValue == 1024) {extraData (); }

Kad aluminijska folija dolazi u kontakt (kad netko stoji na prostirci), vrijednost osjetnika je 1024. To rezultira aktiviranjem funkcije extraData (). I upravo to želimo da sustav učini.

Korak 5: Povratne informacije o dizajnu

Koristio sam LED traku za povratne informacije. Kad dođe do gužve u prometu, svjetlo će postati crveno. Kad je cesta dobra, postat će zelena. Koristio sam adafruit neopixel biblioteku za kontrolu LED trake.

Napišite ovaj kôd na vrh datoteke kako biste bili sigurni da je LED traka definirana:

#uključi

#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

U funkciju postavljanja upišite sljedeći kôd:

// neopixel

pikseli.begin (); pikseli.show ();

I sljedeći kod u funkciji petlje:

if (trafficJam == true) {

za (int i; i <PIXEL_COUNT; i ++) {piksela.setPixelColor (i, 255, 0, 0); // crveni pikseli.show (); kašnjenje (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zeleni pikseli.show (); kašnjenje (200); }

U gornjem kodu postoji funkcija if/else. Kad funkcija ExtraData vrati prisutnost prometne gužve, LED traka će postati crvena. Ako nije, LED traka će postati zelena.

Korak 6: Pokrenite kôd

Ako sada pokrenemo cijeli kôd, senzor i svjetlo bi trebali raditi. Kada stojite na otiraču, senzor će se spojiti i pokrenut će se funkcija ExtraData. Kada je u nizu naziva cesta prisutna cesta koju tražimo, LED traka će postati crvena, signalizirajući prometnu gužvu. Ako nije u nizu, LED traka će postati zelena i znate da ste spremni!

Sretno vam putovanje i hvala na čitanju. Nadam se da ste pronašli inspiraciju ili informaciju. Ako imate povratne informacije, slobodno odgovorite!

Preporučeni: