Índice:

Verificação de relatório de tráfego (NL) com capacho: 6 etapas
Verificação de relatório de tráfego (NL) com capacho: 6 etapas

Vídeo: Verificação de relatório de tráfego (NL) com capacho: 6 etapas

Vídeo: Verificação de relatório de tráfego (NL) com capacho: 6 etapas
Vídeo: Relatório de Anúncios - Face Ads 2024, Novembro
Anonim
Verificação de relatório de tráfego (NL) com capacho
Verificação de relatório de tráfego (NL) com capacho

Neste instrutível, descreverei como construir um capacho que verificará os relatórios de tráfego das rodovias holandesas. Assim que você sair do capacho e houver um engarrafamento no seu percurso, o tapete ficará vermelho. Quando não houver engarrafamento, o tapete ficará verde.

Eu estarei trabalhando em um NodeMCU 1.0 (Módulo ESP0-12E). O código para este projeto também pode funcionar em outros dispositivos (por exemplo, placas Arduino). Este projeto é baseado em uma fonte holandesa de relatórios de tráfego, o ANWB.

O que precisamos para este projeto:

- NodeMCU - Fios de ligação - LEDlight ou tira - Sensor analógico (folha de Aluminiuim, esponja) - Conexão Wi-Fi - Capacho

Passos que devemos dar:

1. Conecte o NodeMCu ao Wi-Fi 2. Solicite dados via HTTPS de ANWB.nl 3. Transforme os dados em informações utilizáveis 4. Instale o acionador 5. Feedback do projeto

Etapa 1: conecte o NodeMCU ao Wi-Fi

Esta etapa mostrará como fazer um HTTPSRequest com êxito para ver se o dispositivo está conectado à Internet.

Primeiro, instale a biblioteca ESP8266 no Arduino IDE. Abra a partir dos exemplos ESP8266>

Preencha suas credenciais de Wi-Fi na parte superior do seu código, conforme mostrado abaixo:

const char * ssid = "YOUR_SSID";

const char * password = "YOUR_PASS";

Faça upload do código para o seu dispositivo e verifique se o NodeMCU está se conectando à Internet. O exemplo HTTPSRequest usa o Github como padrão para obter informações. Quando o HTTPSRequest for bem-sucedido, você receberá os dados do Github no monitor serial.

Etapa 2: Solicitar dados de HTTPS de ANWB.nl

Nesta segunda etapa, você altera a fonte de dados do padrão para a fonte necessária para este projeto: ANWB.nl.

No topo do seu código, altere char * host para www.anwb.nl (ou outra fonte da qual você gostaria de obter seus dados):

const char * host = "www.anwb.nl";!! Se você usar outra fonte, a etapa 3 será diferente do meu código. A etapa 3 precisa de codificação específica para recuperar informações úteis!

Em seguida, altere o URL da string na configuração da função para "/ feeds / gethf", o caminho de onde as informações são obtidas:

String url = "/ feeds / gethf";!! Se você usar outra fonte, use o caminho para sua fonte!

Ao fazer upload do código, você deve obter uma resposta com todos os dados de www.anwb.nl/feeds/gethf. Este código é salvo em uma string chamada linha.

Etapa 3: Transforme os dados em informações utilizáveis

Até agora, o código só rodava quando o NodeMCU era inicializado ou zerado, pois todo o código estava na função de configuração. Para definir o gatilho para executar o código continuamente, você deve alterar a posição do código que executa a solicitação HTTPS. Abaixo da função de loop, você adiciona outra função. Eu chamei de void extractData:

extractData () {

}

Copie parte do código da função de configuração para extractData (). Comece com a seguinte linha até o final da função de configuração:

if (! client.connect (host, O código agora está em sua nova função, portanto, remova o código copiado da função de configuração.

Em seguida, chame a função extractData na função de loop e adicione algum atraso para dar tempo ao nodeMCU para descansar:

void loop () {

extractData (); atraso (30000); // isso será removido mais tarde, quando tivermos um sensor analógico}

Como os dados que você recebe são armazenados em uma string e apenas partes dessa string são necessárias, você deve escrever alguns loops for.

Primeiro, verifique todas as posições da palavra 'estrada'. Após a palavra 'estrada', segue-se o nome da estrada (A1, A2, etc.).

Antes de começar a escrever os loops for, você deve declarar algumas variáveis que usará:

int noOfPos = 0;

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

Agora é hora de escrever alguns loops. Eu escrevi os loops for na parte inferior da função extractData. Tentei dividi-lo em funções separadas, mas não consegui fazer funcionar.

Para o loop nº 1: encontre as posições da palavra estrada na linha da string:

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

Em seguida, verifique quais estradas têm um engarrafamento, usando as posições do loop for de cima. As posições dos nomes das estradas são sempre as mesmas e começam com 7 caracteres e terminam com 10 caracteres após a palavra estrada.

Agora definimos o array nameOfRoadArray, que será preenchido no próximo loop for:

String nameOfRoadArray [20];

Para o loop nº 2: Encontre todos os nomes das estradas com a entrada de para o loop no. 1

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

O array nameOfRoudArray deve ser preenchido com todos os engarrafamentos sinalizados.

A seguir, você verificará se sua estrada está dentro de um conjunto de estradas com congestionamento. Imprima o nameOfRoadArray para obter as estradas nos dados. Faça isso adicionando o Serial.println (nameOfRoadArray [k]); no segundo loop for como:

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

Se estiver certo, você verá todas as estradas com engarrafamento no monitor serial.

Antes de escrever o último loop For, você deve declarar um booleano como uma variável global. O booleano, chamado trafficJam, é falso por padrão e mudará se a função extractData retornar true para um congestionamento. O código a seguir vai no topo do arquivo.ino:

boolean trafficJam = false;

Para o laço nº 3: verifique se a estrada, neste caso A1, está na lista de engarrafamentos.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// mude A1 para a estrada de seu favor trafficJam = true;}

Se você imprimir o engarrafamento no monitor serial, saberá se há um engarrafamento na A1 ou não.

Coloque este código na parte inferior da função extractData:

Serial.println (trafficJam); // veja se há um engarrafamento

Com essas informações, trabalharemos mais no feedback do sistema na etapa 5.

Etapa 4: instalar o acionador

Instale o gatilho
Instale o gatilho
Instale o gatilho
Instale o gatilho
Instale o gatilho
Instale o gatilho

Como agora podemos recuperar os dados com sucesso da fonte, é hora de construir um sensor que irá acionar o nodeMCU para executar a função extractData. Decidi fazer um sensor analógico com meu capacho. Você pode alterar o gatilho usando outro sensor.

Construindo o sensor analógico

Usei 2 pedaços de papel alumínio, dois fios de ligação e uma esponja.

Faça um furo na esponja, este é o local onde as folhas de alumínio entrarão em contato. Cole a folha de alumínio em ambos os lados da esponja. Conecte os fios do jumper à folha de alumínio. Conecte os fios do jumper ao nodeMCU. Um lado para o pino A0 e o outro para um pino V3. Coloque a esponja sob o capacho e você acaba de transformá-lo em um sensor. Incrível!

O código para ler o valor do sensor para ver se alguém está no capacho:

int sensorValue = analogRead (A0);

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

Quando a folha de alumínio está fazendo contato (quando alguém está em cima do tapete), o sensorValue é 1024. Isso resulta no disparo da função extractData (). E é exatamente isso que queremos que o sistema faça.

Etapa 5: Feedback do projeto

Usei um LEDstrip para dar feedback ao usuário. Quando há um engarrafamento, a luz fica vermelha. Quando a estrada estiver pronta, ela ficará verde. Usei a biblioteca adafruit neopixel para controlar meu LEDstrip.

Escreva este código no topo do seu arquivo para se certificar de que a LEDstrip está definida:

#incluir

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

Escreva o próximo código na função de configuração:

// neopixel

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

E o seguinte código na função de loop:

if (trafficJam == true) {

para (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // pixels vermelhos.show (); atraso (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixels verdes.show (); atraso (200); }

No código acima, existe uma função if / else. Quando a função extractData retorna a presença de um engarrafamento, o LEDstrip fica vermelho. Caso contrário, o LEDstrip ficará verde.

Etapa 6: execute o código

Se executarmos o código completo agora, o sensor e a luz devem funcionar. Quando você estiver no capacho, o sensor se conectará e a função extractData será executada. Quando no conjunto de nomes de estradas, a estrada que procuramos estiver presente, a faixa de LED ficará vermelha, sinalizando um engarrafamento. Se não estiver na matriz, o LEDstrip ficará verde e você saberá que está pronto para prosseguir!

Tenha uma boa viagem e obrigado pela leitura. Espero que você tenha encontrado alguma inspiração ou informação. Se você recebeu algum feedback, fique à vontade para responder!

Recomendado: