Taula de continguts:

Comprovació d’informes de trànsit (NL) amb felpís: 6 passos
Comprovació d’informes de trànsit (NL) amb felpís: 6 passos

Vídeo: Comprovació d’informes de trànsit (NL) amb felpís: 6 passos

Vídeo: Comprovació d’informes de trànsit (NL) amb felpís: 6 passos
Vídeo: Royalty Stories | Darius II | ACHAEMENID PERSIAN EMPIRE 2024, Desembre
Anonim
Comprovació d’informes de trànsit (NL) amb felpís
Comprovació d’informes de trànsit (NL) amb felpís

En aquest instructiu, descriuré com construir un felpís que comprovarà els informes de trànsit de les carreteres holandeses. Un cop sortiu del tapís de la feltre i hi hagi un embús a la vostra ruta, la catifa passarà a ser de color vermell. Quan no hi ha embús, l'estoreta es posarà de color verd.

Treballaré en un NodeMCU 1.0 (mòdul ESP0-12E). El codi d’aquest projecte també podria funcionar en altres dispositius (per exemple, les plaques Arduino). Aquest projecte es basa en una font holandesa d'informes sobre trànsit, l'ANWB.

Què necessitem per a aquest projecte:

- NodeMCU - Filferros de pont - Llum o tira LED - Sensor analògic (paper aluminiuim, esponja) - Connexió Wi-Fi - Tapet

Passos que hem de fer:

1. Connecteu NodeMCu a Wi-Fi 2. Sol·liciteu dades mitjançant HTTPS a ANWB.nl 3. Convertiu les dades en informació útil 4. Instal·leu el disparador 5. Dissenyeu comentaris

Pas 1: connecteu NodeMCU a la Wi-Fi

Aquest pas mostrarà com fer una sol·licitud HTTPS amb èxit per veure si el dispositiu està connectat a Internet.

Primer, instal·leu la biblioteca ESP8266 a Arduino IDE. Obriu els exemples ESP8266>

Empleneu les vostres credencials de Wi-Fi a la part superior del codi, tal com es mostra a continuació:

const char * ssid = "YOUR_SSID";

const char * password = "YOUR_PASS";

Pengeu el codi al dispositiu i comproveu si el NodeMCU es connecta a Internet. L'exemple HTTPSRequest utilitza Github com a predeterminat per obtenir informació. Quan la sol·licitud HTTPS tingui èxit, rebreu les dades de Github al monitor sèrie.

Pas 2: sol·liciteu dades de HTTPS a ANWB.nl

En aquest segon pas, canvieu la font de dades de la font predeterminada a la font necessària per a aquest projecte: ANWB.nl.

A la part superior del codi, canvieu l'amfitrió char * a www.anwb.nl (o una altra font de la qual vulgueu obtenir les vostres dades):

const char * host = "www.anwb.nl";!! Si feu servir una altra font, el pas 3 serà diferent del meu codi. El pas 3 necessita una codificació específica per recuperar informació útil.

A continuació, canvieu l'URL de la cadena a la configuració de la funció per "/ feeds / gethf", el camí d'on prové la informació:

String url = "/ feeds / gethf";!! Si utilitzeu una altra font, utilitzeu el camí cap a la vostra font.

Quan pengeu el codi, heu de rebre una resposta amb totes les dades de www.anwb.nl/feeds/gethf. Aquest codi es desa en una cadena anomenada línia.

Pas 3: convertiu les dades en informació útil

Fins ara, el codi només s'executava quan es va iniciar o reiniciar el NodeMCU, perquè tot el codi es troba en la funció de configuració. Per configurar el disparador perquè s'executi el codi contínuament, heu de canviar la posició del codi que executa la sol·licitud HTTPS. A sota de la funció de bucle, afegiu una altra funció. L'he anomenat extract de dades nul:

extractData () {

}

Copieu part del codi de la funció de configuració a extractData (). Comenceu per la línia següent fins al final de la funció de configuració:

if (! client.connect (host, Ara el codi es troba a la vostra nova funció, així que traieu el codi copiat de la funció de configuració.

A continuació, truqueu a la funció extractData a la funció de bucle i afegiu un retard per donar temps al nodeMCU per descansar:

bucle buit () {

extractData (); retard (30000); // això s'eliminarà més endavant quan tinguem un sensor analògic}

Com que les dades que rebeu s’emmagatzemen en una cadena i només són necessàries parts d’aquesta cadena, heu d’escriure un parell de bucles.

En primer lloc, comproveu totes les posicions de la paraula "carretera". Després de la paraula "carretera", seguirà el nom de la carretera (A1, A2, etc.).

Abans de començar a escriure els bucles for, heu de declarar algunes variables que utilitzeu:

int noOfPos = 0;

booleà hasRunOnce = false; int des de = 0; int roadArray [20];

Ara toca escriure alguns bucles. He escrit els bucles for per a la part inferior de la funció extractData. Vaig intentar dividir-lo en funcions separades, però no vaig aconseguir que funcionés.

Per al bucle núm. 1: cerqueu les posicions de la paraula carretera a la línia de corda:

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

A continuació, comproveu quines carreteres tenen un embús, fent servir les posicions del bucle for des de dalt. La posició del nom de les carreteres sempre és la mateixa i comença a 7 caràcters i acaba 10 caràcters després de la paraula carretera.

Ara definim la matriu nameOfRoadArray, que s’emplenarà al següent bucle for:

String nameOfRoadArray [20];

Per al bucle núm. 2: cerqueu tots els noms de les carreteres amb l'entrada del bucle núm. 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); }

La matriu nameOfRoudArray s'ha d'omplir amb tots els embussos senyalitzats.

A continuació, comprovareu si la vostra carretera es troba en un conjunt de carreteres amb embús. Imprimiu el nomOfRoadArray per obtenir les carreteres a les dades. Feu això afegint Serial.println (nameOfRoadArray [k]); al segon bucle for com:

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

Si és correcte, veureu totes les carreteres amb un embús al monitor de sèrie.

Abans d’escriure l’últim bucle For, heu de declarar un booleà com a variable global. El booleà, anomenat trafficJam, és fals per defecte i canviarà si la funció extractData tornarà a ser veritable per a un embús. El codi següent apareix a la part superior del fitxer.ino:

tràfic booleà Jam = false;

Per al bucle núm. 3: comproveu si la carretera, en aquest cas A1, figura a la llista d’embussos.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// canvia A1 a la carretera que prefereix trafficJam = true;}

Si imprimiu trafficJam al monitor sèrie, sabreu si hi ha un embús a l'A1 o no.

Poseu aquest codi a la part inferior de la funció extractData:

Serial.println (trafficJam); // veure si hi ha embús

Amb aquesta informació, treballarem més en la retroalimentació del sistema al pas 5.

Pas 4: instal·leu el disparador

Instal·leu el disparador
Instal·leu el disparador
Instal·leu el disparador
Instal·leu el disparador
Instal·leu el disparador
Instal·leu el disparador

Com que ara podem recuperar les dades amb èxit de la font, és hora de crear un sensor que activi el nodeMCU per executar la funció extractData. Vaig triar fer un sensor analògic amb el meu felpís. Podeu canviar el disparador utilitzant un altre sensor.

Construint el sensor analògic

He utilitzat 2 peces de paper d’alumini, dos cables de pont i una esponja.

Feu un forat a l’esponja, aquest és el lloc on entraran en contacte les làmines d’alumini. Enganxeu paper d'alumini a banda i banda de l'esponja. Connecteu els cables del pont al paper d'alumini. Connecteu els cables del pont al nodeMCU. Un costat al pin A0 i l’altre al pin V3. Poseu l’esponja a sota del felpís i acabeu de canviar-lo per un sensor. Increïble!

El codi per llegir el valor del sensor per veure si algú està de peu al felpís:

int sensorValue = analogRead (A0);

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

Quan el paper d'alumini entra en contacte (quan algú està de peu sobre l'estoreta), el sensorValue és 1024. Això fa que la funció extractData () es dispari. I això és exactament el que volem que faci el sistema.

Pas 5: dissenyar comentaris

He utilitzat una tira LED per donar comentaris a l'usuari. Quan hi hagi un embús, la llum es posarà de vermell. Quan la carretera sigui bona, es tornarà verda. He utilitzat la biblioteca de neopixels adafruit per controlar la meva tira LED.

Escriviu aquest codi a la part superior del fitxer per assegurar-vos que el LEDstrip està definit:

#incloure

#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);

Escriviu el següent codi a la funció de configuració:

// neopixel

pixels.begin (); pixels.show ();

I el codi següent a la funció de bucle:

if (trafficJam == true) {

per a (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // píxels vermells.show (); retard (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixels verds.show (); retard (200); }

Al codi anterior hi ha una funció if / else. Quan la funció extractData retorna la presència d'un embús, la tira LED es tornarà vermella. Si no, la tira LED es posarà de color verd.

Pas 6: executeu el codi

Si ara executem el codi complet, el sensor i la llum haurien de funcionar. Quan us poseu al mantell, el sensor es connectarà i s’executarà la funció extractData. Quan hi ha una sèrie de noms de carreteres, la carretera que cerquem és present, la LEDstrip es tornarà vermella i assenyalarà un embús. Si no és a la matriu, el LEDstrip es tornarà verd i ja sabeu que esteu preparat.

Feu un viatge segur i gràcies per llegir. Espero que hagueu trobat alguna inspiració o informació. Si teniu algun comentari, no dubteu a respondre.

Recomanat: