Sadržaj:

Provjera izvještaja o saobraćaju (NL) sa otiračem: 6 koraka
Provjera izvještaja o saobraćaju (NL) sa otiračem: 6 koraka

Video: Provjera izvještaja o saobraćaju (NL) sa otiračem: 6 koraka

Video: Provjera izvještaja o saobraćaju (NL) sa otiračem: 6 koraka
Video: ŠALABAHTER - Na Raskrižje sa znakovima ELIMINACIJOM 2024, Juli
Anonim
Provjera izvještaja o saobraćaju (NL) sa otiračem
Provjera izvještaja o saobraćaju (NL) sa otiračem

U ovom uputstvu ću opisati kako izgraditi otirač koji će provjeravati izvještaje o saobraćaju holandskih autoputeva. Nakon što izađete na otirač i na vašoj ruti dođe do gužve, prostirka će postati crvena. Kada 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 projekt se temelji na holandskom izvoru za izvještaje o prometu, ANWB.

Šta nam je potrebno za ovaj projekat:

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

Koraci koje moramo preduzeti:

1. Povežite 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 napraviti uspješan HTTPSRequest da vidite je li uređaj spojen na internet.

Prvo instalirajte ESP8266 biblioteku u Arduino IDE. Otvorite iz primjera ESP8266>

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

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

Otpremite kôd na svoj uređaj i provjerite povezuje li se NodeMCU s internetom. Primjer HTTPSRequest koristi Github kao zadanu vrijednost za dobivanje informacija. Kada je HTTPSRequest uspio, primate 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 zahtijeva posebno kodiranje za preuzimanje korisnih informacija!

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

String url = "/feeds/gethf";!! Ako koristite drugi izvor, koristite put do vašeg izvora!

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

Korak 3: Pretvorite podatke u korisne informacije

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 ExtractData:

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 vrijeme za odmor:

void loop () {{100} {101}

extraData (); kašnjenje (30000); // ovo će biti uklonjeno 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'. Iza 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 for petlje na dnu funkcije extraData. Pokušao sam to podijeliti u zasebne funkcije, ali nisam uspio.

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

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 ("road \": ")) {i = line.length (); } hasRunOnce = true; }

Zatim provjerite na kojim cestama postoji zastoj, 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 ime nizaOfRoadArray, koji će se popuniti u sljedećoj for petlji:

String nameOfRoadArray [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 = poz + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

Ime nizaOfRoudArray treba popuniti svim signaliziranim gužvama u prometu.

Zatim ćete provjeriti nalazi li se vaša cesta na nizu cesta s gužvom u prometu. Odštampajte nazivOfRoadArray da biste dobili podatke o putevima. 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 = poz + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

Ako je ispravno, na serijskom monitoru vidjet ćete sve ceste sa zastojem u prometu.

Prije pisanja posljednje For petlje, morate deklarirati boolean kao globalnu varijablu. Logičko ime, koje se naziva trafficJam, prema zadanim postavkama je false i promijenit će se ako funkcija ExtraData vrati true za prometnu gužvu. Sljedeći kod 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 put koji vam odgovara 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 ima li zastoja

S ovim informacijama ćemo dalje raditi na povratnim informacijama sistema 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 extraData. Odlučio sam napraviti analogni senzor od otirača. Okidač možete promijeniti pomoću drugog senzora.

Izgradnja 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 kratkospojnike na čvor mCU. Jedna strana na A0-pin, a druga na V3-pin. Stavite spužvu ispod otirača i upravo ste promijenili otirač u senzor. Awesome!

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 (); }

Kada aluminijska folija dolazi u kontakt (kada netko stoji na prostirci), vrijednost senzora je 1024. To rezultira aktiviranjem funkcije extraData (). I upravo to želimo da sistem uradi.

Korak 5: Povratne informacije o dizajnu

Koristio sam LED traku za povratne informacije. Kada dođe do zastoja, svjetlo će postati crveno. Kad put bude dobro krenuo, postat će zelen. 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:

#include

#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

pixels.begin (); pixels.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. Kada funkcija ExtraData vrati prisutnost zastoja, 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 funkcija ExtractData će se pokrenuti. Kada je u nizu naziva cesta, put koji tražimo prisutan, LED traka će postati crvena, signalizirajući prometnu gužvu. Ako nije u nizu, LED traka će postati zelena i znate da ste spremni!

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

Preporučuje se: