Table des matières:

Traffic Report Check (NL) avec paillasson : 6 étapes
Traffic Report Check (NL) avec paillasson : 6 étapes

Vidéo: Traffic Report Check (NL) avec paillasson : 6 étapes

Vidéo: Traffic Report Check (NL) avec paillasson : 6 étapes
Vidéo: MPs hold emergency debate on looming shutdown of Line 5 pipeline – May 6, 2021 2024, Juillet
Anonim
Traffic Report Check (NL) avec paillasson
Traffic Report Check (NL) avec paillasson

Dans ce instructable, je vais décrire comment construire un paillasson qui vérifiera les rapports de trafic des autoroutes néerlandaises. Une fois que vous sortez sur votre paillasson et qu'il y a un embouteillage sur votre itinéraire, le tapis deviendra rouge. Lorsqu'il n'y a pas d'embouteillage, le tapis devient vert.

Je travaillerai sur un NodeMCU 1.0 (module ESP0-12E). Le code de ce projet pourrait également fonctionner sur d'autres appareils (par exemple, les cartes Arduino). Ce projet est basé sur une source néerlandaise pour les rapports de trafic, l'ANWB.

Ce dont nous avons besoin pour ce projet:

- NodeMCU - Cavaliers - Lampe ou bande LED - Capteur analogique (feuille d'aluminium, éponge) - Connexion Wi-Fi - Paillasson

Étapes à suivre:

1. Connectez NodeMCu au Wi-Fi 2. Demandez des données via HTTPS à partir de ANWB.nl 3. Transformez les données en informations utilisables 4. Installez le déclencheur 5. Commentaires sur la conception

Étape 1: Connectez NodeMCU au Wi-Fi

Cette étape montrera comment réussir une requête HTTPSRequest pour voir si l'appareil est connecté à Internet.

Tout d'abord, installez la bibliothèque ESP8266 dans Arduino IDE. Ouvrez à partir des exemples ESP8266 >

Remplissez vos informations d'identification Wi-Fi en haut de votre code, comme indiqué ci-dessous:

const char* ssid = "VOTRE_SSID";

const char* mot de passe = "YOUR_PASS";

Téléchargez le code sur votre appareil et vérifiez si le NodeMCU se connecte à Internet. L'exemple HTTPSRequest utilise Github par défaut pour obtenir des informations. Lorsque la requête HTTPSRequest a réussi, vous recevez les données Github dans le moniteur série.

Étape 2: Demander des données de HTTPS à ANWB.nl

Dans cette deuxième étape, vous remplacez la source de données par défaut par la source nécessaire pour ce projet: ANWB.nl.

En haut de votre code, remplacez char* host par www.anwb.nl (ou une autre source à partir de laquelle vous souhaitez obtenir vos données):

const char* hôte = "www.anwb.nl";!! Si vous utilisez une autre source, l'étape 3 sera différente de mon code. L'étape 3 nécessite un codage spécifique pour récupérer les informations utilisables !

Ensuite, modifiez l'URL de la chaîne dans la configuration de la fonction en "/feeds/gethf", le chemin d'où proviennent les informations:

URL de chaîne = "/feeds/gethf";!! Si vous utilisez une autre source, utilisez le chemin de votre source !

Lorsque vous téléchargez le code, vous devriez obtenir une réponse avec toutes les données de www.anwb.nl/feeds/gethf. Ce code est enregistré dans une chaîne appelée line.

Étape 3: Transformez les données en informations utilisables

Jusqu'à présent, le code ne fonctionnait que lorsque le NodeMCU était démarré ou réinitialisé, car tout le code se trouve dans la fonction de configuration. Pour définir le déclencheur afin d'exécuter le code en continu, vous devez modifier la position du code qui exécute la requête HTTPS. Sous la fonction de boucle, vous ajoutez une autre fonction. Je l'ai appelé void extractData:

extractData(){

}

Copiez une partie du code de la fonction de configuration dans extractData(). Commencez par la ligne suivante jusqu'à la fin de la fonction de configuration:

si (!client.connect(hôte, Le code est maintenant dans votre nouvelle fonction, alors supprimez le code copié de la fonction de configuration.

Ensuite, appelez la fonction extractData dans la fonction de boucle et ajoutez un délai pour donner au nodeMCU le temps de se reposer:

boucle vide(){

extractData(); retard (30000); // cela sera supprimé plus tard lorsque nous aurons un capteur analogique }

Étant donné que les données que vous recevez sont stockées dans une chaîne et que seules des parties de cette chaîne sont nécessaires, vous devez écrire quelques boucles for.

Tout d'abord, vérifiez toutes les positions du mot « route ». Après le mot 'route', le nom de la route suivra (A1, A2, etc.).

Avant de commencer à écrire les boucles for, vous devez déclarer certaines variables que vous allez utiliser:

int noOfPos = 0;

booléen hasRunOnce = false; entier de = 0; int roadArray[20];

Il est maintenant temps d'écrire quelques boucles. J'ai écrit les boucles for au bas de la fonction extractData. J'ai essayé de le diviser en fonctions distinctes, mais je n'ai pas réussi à le faire fonctionner.

Pour la boucle n°1: recherchez les positions du mot route dans la ligne de chaîne:

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

Ensuite, vérifiez quelles routes ont un embouteillage, en utilisant les positions de la boucle for d'en haut. La position du nom des routes est toujours la même et commence 7 caractères et se termine 10 caractères après le mot route.

Nous définissons maintenant le tableau nameOfRoadArray, qui sera rempli dans la prochaine boucle for:

String nameOfRoadArray[20];

Boucle for n°2: Trouvez tous les noms des routes avec l'entrée de la boucle for n°2. 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); }

Le tableau nameOfRoudArray doit être rempli avec tous les embouteillages signalés.

Ensuite, vous allez vérifier si votre route fait partie du réseau de routes avec un embouteillage. Imprimez le nameOfRoadArray pour obtenir les routes dans les données. Pour ce faire, ajoutez Serial.println(nameOfRoadArray[k]); dans la 2ème boucle for comme:

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 c'est le cas, vous verrez toutes les routes avec un embouteillage dans le moniteur série.

Avant d'écrire la dernière boucle For, vous devez déclarer un booléen comme variable globale. Le booléen, appelé trafficJam est par défaut false et changera si la fonction extractData retournera true pour un embouteillage. Le code suivant s'ajoute au fichier.ino:

booléen trafficJam = false;

Pour la boucle n°3: Vérifiez si la route, en l'occurrence l'A1, est dans la liste des embouteillages.

for(int l=0; l < 20; l++){ if(nameOfRoadArray[l] == "A1\""){ //changer A1 en route de votre faveur trafficJam = true; }

Si vous imprimez trafficJam dans le moniteur série, vous savez s'il y a un embouteillage sur l'A1 ou non.

Mettez ce code au bas de la fonction extractData:

Serial.println(trafficJam); // voir s'il y a un embouteillage

Avec ces informations, nous allons continuer à travailler sur le retour d'informations du système à l'étape 5.

Étape 4: Installez le déclencheur

Installer le déclencheur
Installer le déclencheur
Installer le déclencheur
Installer le déclencheur
Installer le déclencheur
Installer le déclencheur

Puisque nous pouvons maintenant récupérer les données avec succès à partir de la source, il est temps de créer un capteur qui déclenchera le nodeMCU pour exécuter la fonction extractData. J'ai choisi de faire un capteur analogique de mon paillasson. Vous pouvez changer le déclencheur en utilisant un autre capteur.

Construire le capteur analogique

J'ai utilisé 2 morceaux de papier d'aluminium, deux fils de liaison et une éponge.

Percez un trou dans l'éponge, c'est l'endroit où les feuilles d'aluminium entreront en contact. Collez du papier aluminium des deux côtés de la génoise. Connectez les fils de liaison à la feuille d'aluminium. Connectez les cavaliers au nodeMCU. Un côté à la broche A0 et l'autre à une broche V3. Mettez l'éponge sous votre paillasson et vous venez de changer votre paillasson en capteur. Impressionnant!

Le code pour lire la valeur du capteur pour voir si quelqu'un se tient sur le paillasson:

int sensorValue = analogRead(A0);

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

Lorsque la feuille d'aluminium entre en contact (quand quelqu'un est debout sur le tapis), la sensorValue est 1024. Cela entraîne le déclenchement de la fonction extractData(). Et c'est exactement ce que nous voulons que le système fasse.

Étape 5: Commentaires sur la conception

J'ai utilisé une bande LED pour donner un retour à l'utilisateur. Lorsqu'il y a un embouteillage, le feu devient rouge. Quand la route est bonne, elle devient verte. J'ai utilisé la bibliothèque adafruit neopixel pour contrôler ma bande LED.

Écrivez ce code en haut de votre fichier pour vous assurer que la bande LED est définie:

#comprendre

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

Écrivez le code suivant dans la fonction de configuration:

//néopixel

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

Et le code suivant dans la fonction loop:

if (trafficJam == true){

for(int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 255, 0, 0); // pixels rouges.show(); retard (200); } } else{ for(int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 0, 255, 0); // pixels verts.show(); retard (200); }

Dans le code ci-dessus, il y a une fonction if/else. Lorsque la fonction extractData renvoie la présence d'un embouteillage, la bande LED devient rouge. Sinon, la bande LED deviendra verte.

Étape 6: Exécutez le code

Si nous exécutons le code complet maintenant, le capteur et la lumière devraient fonctionner. Lorsque vous vous tenez sur le paillasson, le capteur se connecte et la fonction extractData s'exécute. Lorsque dans le tableau des noms de route, la route que nous recherchons est présente, la bande LED devient rouge, signalant un embouteillage. S'il n'est pas dans le tableau, la bande LED deviendra verte et vous saurez que vous êtes prêt à partir !

Bon voyage et merci d'avoir lu. J'espère que vous avez trouvé de l'inspiration ou des informations. Si vous avez des retours, n'hésitez pas à répondre !

Conseillé: