Tabla de contenido:

Verificación de informes de tráfico (NL) con felpudo: 6 pasos
Verificación de informes de tráfico (NL) con felpudo: 6 pasos

Video: Verificación de informes de tráfico (NL) con felpudo: 6 pasos

Video: Verificación de informes de tráfico (NL) con felpudo: 6 pasos
Video: Informe de estado de un vehículo de la DGT gratuito / Compra vehículo segunda mano 2024, Mes de julio
Anonim
Verificación de informes de tráfico (NL) con felpudo
Verificación de informes de tráfico (NL) con felpudo

En este instructivo, describiré cómo construir un felpudo que verifique los informes de tráfico de las carreteras holandesas. Una vez que salga en su felpudo y haya un atasco en su ruta, el tapete cambiará a un color rojo. Cuando no haya atascos de tráfico, la alfombra se volverá verde.

Trabajaré en un NodeMCU 1.0 (Módulo ESP0-12E). El código para este proyecto también podría funcionar en otros dispositivos (por ejemplo, placas Arduino). Este proyecto se basa en una fuente holandesa de informes de tráfico, la ANWB.

Qué necesitamos para este proyecto:

- NodeMCU - Cables de puente - Luz LED o tira - Sensor analógico (lámina de aluminio, esponja) - Conexión Wi-Fi - Felpudo

Pasos que tenemos que seguir:

1. Conecte NodeMCu a Wi-Fi 2. Solicite datos a través de HTTPS desde ANWB.nl 3. Convierta los datos en información utilizable 4. Instale el activador 5. Comentarios sobre el diseño

Paso 1: Conecte NodeMCU a Wi-Fi

Este paso mostrará cómo realizar una HTTPSRequest con éxito para ver si el dispositivo está conectado a Internet.

Primero, instale la biblioteca ESP8266 en Arduino IDE. Abra desde los ejemplos ESP8266>

Complete sus credenciales de Wi-Fi en la parte superior de su código, como se muestra a continuación:

const char * ssid = "YOUR_SSID";

const char * contraseña = "YOUR_PASS";

Sube el código a tu dispositivo y comprueba si NodeMCU se está conectando a Internet. El ejemplo HTTPSRequest usa Github como predeterminado para obtener información. Cuando HTTPSRequest tuvo éxito, recibirá los datos de Github en el monitor en serie.

Paso 2: Solicite datos de HTTPS desde ANWB.nl

En este segundo paso, cambia la fuente de datos predeterminada a la fuente necesaria para este proyecto: ANWB.nl.

En la parte superior de su código, cambie char * host a www.anwb.nl (u otra fuente de la que le gustaría obtener sus datos):

const char * host = "www.anwb.nl";!! Si usa otra fuente, el paso 3 será diferente de mi código. ¡El paso 3 necesita una codificación específica para recuperar información útil!

A continuación, cambie la URL de la cadena en la configuración de la función a "/ feeds / gethf", la ruta de donde se toma la información:

String url = "/ feeds / gethf";!! Si usa otra fuente, use la ruta a su fuente.

Cuando cargue el código, debería obtener una respuesta con todos los datos de www.anwb.nl/feeds/gethf. Este código se guarda en una cadena llamada línea.

Paso 3: Convierta los datos en información utilizable

Hasta ahora, el código solo se ejecutaba cuando se iniciaba o reiniciaba NodeMCU, porque todo el código está en la función de configuración. Para configurar el disparador para que ejecute el código de forma continua, debe cambiar la posición del código que ejecuta la solicitud HTTPS. Debajo de la función de bucle, agrega otra función. Lo he llamado void extractData:

extractData () {

}

Copie parte del código de la función de configuración en extractData (). Comience con la siguiente línea hasta el final de la función de configuración:

si (! client.connect (host, El código está ahora en su nueva función, así que elimine el código copiado de la función de configuración.

A continuación, llame a la función extractData en la función de bucle y agregue un poco de retraso para que el nodoMCU tenga tiempo de descansar:

bucle vacío () {

extractData (); retraso (30000); // esto se eliminará más adelante cuando tengamos un sensor analógico}

Dado que los datos que recibe se almacenan en una cadena y solo se necesitan partes de esta cadena, debe escribir un par de bucles for.

Primero, verifique todas las posiciones de la palabra 'carretera'. Después de la palabra 'carretera', seguirá el nombre de la carretera (A1, A2, etc.).

Antes de comenzar a escribir los bucles for, debes declarar algunas variables que vas a usar:

int noOfPos = 0;

booleano hasRunOnce = false; int de = 0; int roadArray [20];

Ahora es el momento de escribir algunos bucles. He escrito los bucles for en la parte inferior de la función extractData. Traté de dividirlo en funciones separadas, pero no pude hacerlo funcionar.

Para el bucle n. ° 1: busque las posiciones de la palabra road en la línea de la cuerda:

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ón, compruebe qué carreteras tienen un atasco de tráfico, utilizando las posiciones del bucle for desde arriba. La posición del nombre de las carreteras es siempre la misma y comienzan con 7 caracteres y terminan 10 caracteres después de la palabra carretera.

Ahora definimos la matriz nameOfRoadArray, que se completará en el siguiente ciclo for:

String nameOfRoadArray [20];

Para el bucle n. ° 2: busque todos los nombres de las carreteras con la entrada de para el bucle no. 1

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

La matriz nameOfRoudArray debe llenarse con todos los atascos señalados.

A continuación, comprobará si su camino se encuentra en el conjunto de caminos con atasco. Imprima el nameOfRoadArray para obtener las carreteras en los datos. Haga esto agregando Serial.println (nameOfRoadArray [k]); en el segundo bucle for como:

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

Si es correcto, verá todas las carreteras con un atasco en el monitor de serie.

Antes de escribir el último bucle For, debe declarar un booleano como variable global. El booleano, llamado trafficJam es falso por defecto y cambiará si la función extractData devuelve verdadero para un atasco de tráfico. El siguiente código va encima del archivo.ino:

boolean trafficJam = falso;

Para el bucle n. ° 3: compruebe si la carretera, en este caso A1, está en la lista de atascos.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// cambia A1 a la carretera de tu favor trafficJam = true;}

Si imprime trafficJam en el monitor de serie, sabrá si hay un atasco en el A1 o no.

Coloque este código en la parte inferior de la función extractData:

Serial.println (trafficJam); // ver si hay un atasco

Con esta información vamos a trabajar más en la retroalimentación del sistema en el paso 5.

Paso 4: Instale el gatillo

Instale el gatillo
Instale el gatillo
Instale el gatillo
Instale el gatillo
Instale el gatillo
Instale el gatillo

Dado que ahora podemos recuperar los datos correctamente de la fuente, es hora de construir un sensor que active el nodeMCU para ejecutar la función extractData. Elegí hacer un sensor analógico con mi felpudo. Puede cambiar el gatillo usando otro sensor.

Construyendo el sensor analógico

Usé 2 piezas de papel de aluminio, dos cables de puente y una esponja.

Haz un agujero en la esponja, este es el lugar donde las hojas de aluminio entrarán en contacto. Pega papel de aluminio en ambos lados de la esponja. Conecte los cables de puente al papel de aluminio. Conecte los cables de puente al nodeMCU. Un lado al pin A0 y el otro al pin V3. Coloque la esponja debajo de su felpudo y acaba de cambiar su felpudo en un sensor. ¡Impresionante!

El código para leer el valor del sensor para ver si alguien está parado sobre el felpudo:

int sensorValue = analogRead (A0);

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

Cuando el papel de aluminio está haciendo contacto (cuando alguien está parado sobre el tapete), el sensorValue es 1024. Esto da como resultado que se active la función extractData (). Y eso es exactamente lo que queremos que haga el sistema.

Paso 5: Comentarios sobre el diseño

Usé una tira de LED para dar retroalimentación al usuario. Cuando hay un atasco, el semáforo se iluminará en rojo. Cuando el camino esté listo, se pondrá verde. Usé la biblioteca adafruit neopixel para controlar mi LEDtrip.

Escriba este código en la parte superior de su archivo para asegurarse de que la tira LED esté definida:

#incluir

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

Escriba el siguiente código en la función de configuración:

// neopixel

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

Y el siguiente código en la función de bucle:

if (trafficJam == true) {

para (int i; i <PIXEL_COUNT; i ++) {píxeles.setPixelColor (i, 255, 0, 0); // píxeles rojos.show (); retraso (200); }} más {para (int i; i <PIXEL_COUNT; i ++) {píxeles.setPixelColor (i, 0, 255, 0); // píxeles verdes.show (); retraso (200); }

En el código anterior hay una función if / else. Cuando la función extractData devuelve la presencia de un atasco de tráfico, la tira LED se volverá roja. De lo contrario, la tira de LED se volverá verde.

Paso 6: Ejecute el código

Si ejecutamos el código completo ahora, el sensor y la luz deberían funcionar. Cuando se pare sobre el felpudo, el sensor se conectará y se ejecutará la función extractData. Cuando en el conjunto de nombres de carreteras, la carretera que estamos buscando está presente, la tira de LED se volverá roja, lo que indica un atasco. Si no está en la matriz, la tira de LED se volverá verde y sabrá que está listo para comenzar.

Buen viaje y gracias por leer. Espero que hayas encontrado algo de inspiración o información. Si recibió algún comentario, ¡no dude en responder!

Recomendado: