- Componentes necessários
- Diagrama de circuito
- Programação ESP8266 NodeMCU para solução de estacionamento inteligente
Com a crescente popularidade das Smart Cities, sempre há uma demanda por soluções inteligentes para cada domínio. A IoT possibilitou a possibilidade de Smart Cities com seu recurso de controle pela Internet. Uma pessoa pode controlar os dispositivos instalados em sua casa ou escritório de qualquer lugar do mundo usando apenas um smartphone ou qualquer dispositivo conectado à Internet. Existem vários domínios em uma cidade inteligente e o Smart Parking é um dos domínios mais populares na cidade inteligente.
A indústria de estacionamento inteligente viu uma série de inovações, como Sistema de gerenciamento de estacionamento inteligente, controle de portão inteligente, câmeras inteligentes que podem detectar tipos de veículos, ANPR (reconhecimento automático de matrículas), sistema de pagamento inteligente, sistema de entrada inteligente e muito mais. Hoje, uma abordagem semelhante será seguida e uma solução de estacionamento inteligente será construída, que usará um sensor ultrassônico para detectar a presença de veículos e acionar o portão para abrir ou fechar automaticamente. O ESP8266 NodeMCU será usado aqui como o controlador principal para controlar todos os periféricos conectados a ele.
ESP8266 é o controlador mais popular para construir aplicativos baseados em IoT, pois tem suporte embutido para Wi-Fi para se conectar à Internet. Nós o usamos anteriormente para construir muitos projetos de IoT, como:
- Sistema de segurança baseado em IOT
- Caixa de junção inteligente para automação residencial
- Sistema de monitoramento da poluição do ar baseado em IOT
- Envie dados para ThingSpeak
Verifique todo o projeto baseado em ESP8266 aqui.
Neste IoT Smart Parking System, enviaremos dados ao servidor da web para verificar a disponibilidade de vagas para estacionamento de veículos. Aqui, estamos usando o firebase como banco de dados Iot para obter os dados de disponibilidade de estacionamento. Para isso, precisamos encontrar o endereço do host Firebase e a chave secreta para autorização. Se você já sabe como usar o firebase com NodeMCU, pode seguir em frente, caso contrário, deve primeiro aprender a usar o Google Firebase Console com ESP8266 NodeMCU para obter o endereço do host e a chave secreta.
Componentes necessários
- ESP8266 NodeMCU
- Sensor ultrasônico
- Servo Motor DC
- Sensores IR
- Visor LCD i2c 16x2
- Jumpers
Diagrama de circuito
O diagrama do circuito para este sistema de estacionamento de veículos baseado em IoT é fornecido abaixo. Envolve dois sensores IR, dois servo motores, um sensor ultrassônico e um LCD 16x2.
Aqui o ESP8266 controlará todo o processo e também enviará as informações de disponibilidade de estacionamento para o Google Firebase para que possa ser monitorado de qualquer lugar do mundo pela internet. Dois sensores IR são usados no portão de entrada e saída para detectar a presença do carro e abrir ou fechar o portão automaticamente. O sensor IR é usado para detectar qualquer objeto enviando e recebendo os raios IR, saiba mais sobre o sensor IR aqui.
Dois servos atuarão como portão de entrada e saída e giram para abrir ou fechar o portão. Finalmente, um sensor ultrassônico é usado para detectar se a vaga de estacionamento está disponível ou ocupada e enviar os dados para ESP8266 de acordo. Confira o vídeo fornecido no final deste tutorial para entender o funcionamento completo do projeto.
Esta é a aparência deste protótipo completo do sistema de estacionamento inteligente:
Programação ESP8266 NodeMCU para solução de estacionamento inteligente
O código completo com um vídeo de trabalho é fornecido no final deste tutorial, aqui estamos explicando o programa completo para entender o funcionamento do projeto.
Para programar o NodeMCU, basta conectar o NodeMCU ao computador com um cabo micro USB e abrir o IDE do Arduino. As bibliotecas são necessárias para display I2C e servo motor. O LCD exibirá a disponibilidade de vagas de estacionamento e os servo motores serão usados para abrir e fechar os portões de entrada e saída. A biblioteca Wire.h será usada para fazer a interface do LCD no protocolo i2c. Os pinos para I2C no NodeMCU ESP8266 são D1 (SCL) e D2 (SDA). O banco de dados aqui usado será Firebase, então aqui também incluímos a biblioteca (FirebaseArduino.h) para o mesmo.
#incluir
Em seguida, inclua as credenciais do Firebase obtidas do Google Firebase. Isso incluirá o nome do host contendo o nome do seu projeto e uma chave secreta. Para encontrar esses valores, siga o tutorial anterior no Firebase.
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
Inclui as credenciais de Wi-Fi, como SSID e senha de WiFi.
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
Inicialize o LCD I2C com o endereço do dispositivo (aqui é 0x27) e o tipo de LCD. Inclui também os servo motores para portão de entrada e saída.
LiquidCrystal_I2C lcd (0x27, 16, 2); Servo myservo; Servo myservo1;
Inicie a comunicação I2C para LCD I2C.
Wire.begin (D2, D1);
Conecte o servo motor de entrada e saída aos pinos D5, D6 do NodeMCU.
myservo.attach (D6); myservos.attach (D5);
Selecione o Trigger Pin do sensor ultrassônico como Output e Echo Pin como Input. O sensor ultrassônico será usado para detectar a disponibilidade de vagas de estacionamento. Se o carro ocupou o espaço, ele brilhará, caso contrário, não brilhará.
pinMode (TRIG, OUTPUT); pinMode (ECHO, INPUT);
Os dois pinos D0 e D4 do NodeMCU são usados para fazer a leitura do sensor IR. O sensor IR atuará como sensor de portão de entrada e saída. Isso detectará a presença do carro.
pinMode (carExited, INPUT); pinMode (carEnter, INPUT);
Conecte-se ao WiFi e espere algum tempo até que ele seja conectado.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ("Conectando a"); Serial.print (WIFI_SSID); while (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); atraso (500); }
Comece a conexão com o Firebase com Host e Chave secreta como credenciais.
Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Comece LCD 16x2 i2c e conjunto de posição do cursor em 0 º fileira 0 th coluna.
lcd.begin (); lcd.setCursor (0, 0);
Meça a distância do sensor ultrassônico. Isso será usado para detectar a presença do veículo em um determinado local. Primeiro envie o pulso de 2 microssegundos e depois leia o pulso recebido. Em seguida, converta-o para 'cm'. Saiba mais sobre como medir distâncias usando sensor ultrassônico aqui.
digitalWrite (TRIG, LOW); atrasoMicrosegundos (2); digitalWrite (TRIG, HIGH); delayMicroseconds (10); digitalWrite (TRIG, LOW); duração = pulseIn (ECO, ALTO); distância = (duração / 2) / 29,1;
Leia digitalmente o pino do sensor IR como sensor de entrada e verifique se ele está alto. Se estiver alto, aumente a contagem de entrada e imprima no display LCD 16x2 e também no monitor serial.
int carEntry = digitalRead (carEnter); if (carEntry == HIGH) { countYes ++; Serial.print ("Carro inserido ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Carro inserido");
Mova também o ângulo do servo motor para abrir o portão de entrada. Altere o ângulo de acordo com seu caso de uso.
para (pos = 140; pos> = 45; pos - = 1) { myservos.write (pos); atraso (5); } atraso (2000); for (pos = 45; pos <= 140; pos + = 1) { // em passos de 1 grau myservos.write (pos); atraso (5); }
E envie a leitura para o firebase usando a função pushString da biblioteca do Firebase.
Firebase.pushString ("/ Parking Status /", fireAvailable);
Execute etapas semelhantes às acima para o sensor IR de saída e o servo motor de saída.
int carExit = digitalRead (carExited); if (carExit == HIGH) { contarSim--; Serial.print ("Carro saiu ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Carro saiu"); para (pos1 = 140; pos1> = 45; pos1 - = 1) { myservo.write (pos1); atraso (5); } atraso (2000); para (pos1 = 45; pos1 <= 140; pos1 + = 1) { // em etapas de 1 grau myservo.write (pos1); atraso (5); } Firebase.pushString ("/ Parking Status /", fireAvailable); lcd.clear (); }
Verifique se o carro chegou ao local de estacionamento e se chegou então o led acende dando o sinal de que o local está cheio.
if (distância <6) { Serial.println ("Ocupado"); digitalWrite (led, HIGH); }
Caso contrário, mostre que o local está disponível.
if (distância> 6) { Serial.println ("Disponível"); digitalWrite (led, LOW); }
Calcule o espaço vazio total dentro do estacionamento e salve-o na string para enviar os dados ao firebase.
Vazio = allSpace - contagemSim; Disponível = String ("Disponível =") + String (Vazio) + String ("/") + String (allSpace); fireAvailable = String ("Available =") + String (Empty) + String ("/") + String (allSpace); Imprima também os dados no LCD i2C. lcd.setCursor (0, 0); lcd.print (disponível);
É assim que a disponibilidade de estacionamento pode ser rastreada online no Firebase, conforme mostrado no instantâneo abaixo:
Isso termina o sistema de estacionamento inteligente completo usando o módulo ESP8266 NodeMCU e diferentes periféricos. Você pode usar outros sensores também em substituição ao sensor ultrassônico e infravermelho. Existe uma vasta aplicação do Sistema de Estacionamento Inteligente e diferentes produtos podem ser adicionados para torná-lo mais inteligente. Comente abaixo se tiver alguma dúvida ou entre em contato com nosso fórum para obter mais suporte.