Projeto de IoT II cujo objetivo é desenvolver uma aplicação onde o Arduino Wemos seja configurado como um cliente TCP que envia informações de luminosidade e distância para um servidor web gerenciar e informar as atividades que os sensores estão sendo utilizados.
Professor: Vagner Rodrigues
Acadêmicos: Vitor Hugo de Souza e Vladson Ramos
- Wemos ESP 8266
- Sensor de Luz Fotossensível - Ldr
- Sensor Ultrassônico de distância
- Led
- Arduino IDE
- React
- Firebase em Realtime Database
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#define FIREBASE_HOST "link host server"
#define FIREBASE_AUTH "key de autenticação"
#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "PASSWORD"
#define TRIG D3
#define ECHO D4
#define sensor_iluminacao A0
#define PUBLISH_INTERVAL 2000 >
FirebaseData monitoramento;
const int led_R = D5;
const int led_G = D6;
const int led_B = D7;
unsigned long duracao;
float medicao_sensor, altura_atual;
float altura_max = 100;
float pi = 3.14;
float raio = 1.50;
float resultado = 0;
int valorLuz = 0;
String state_lampada;
bool publishNewState = true;
void publish(){
publishNewState = true;
}
void setupPins(){
pinMode(TRIG,OUTPUT);
pinMode(ECHO,INPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(led_R, OUTPUT);
digitalWrite(led_R, 0);
pinMode(led_G, OUTPUT);
digitalWrite(led_G, 0);
pinMode(led_B, OUTPUT);
digitalWrite(led_B, 0);
}
void setupWifi(){
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
setupPins();
setupWifi();
setupFirebase();
delay(2000);
}
void loop() {
if(publishNewState){
digitalWrite(TRIG, LOW);
delay(5);
digitalWrite(TRIG, HIGH);
delay(10);
digitalWrite(TRIG, LOW);
duracao = pulseIn(ECHO, HIGH);
digitalWrite(LED_BUILTIN, LOW);
medicao_sensor = (duracao*0.034)/2;
altura_atual = altura_max - medicao_sensor;
resultado = (pi * raio * raio * altura_atual) / 100;
if (resultado <= 9) {
Serial.println("Volume " + String(resultado) + "m³ de preenchimento do silo");
if(resultado <= 5) {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
Serial.println("ATENÇÃO!! Nível crítico");
} else {
digitalWrite(LED_BUILTIN, LOW);
}
} else {
Serial.println("Volume não pode ser lido");
}
valorLuz = analogRead(sensor_iluminacao);
if(valorLuz>100){
digitalWrite(led_G, LOW);
digitalWrite(led_R,HIGH);
Serial.println("Lampada apagada");
} else {
digitalWrite(led_R, LOW);
digitalWrite(led_G,HIGH);
Serial.println("Lampada acesa");
}
if(!isnan(resultado) && !isnan(valorLuz)){
Firebase.setFloat(monitoramento, "placa-2/distancia", resultado);
Firebase.setFloat(monitoramento, "placa-2/luminosidade", valorLuz);
}else{
Serial.println("Error Publishing");
}
}
delay(200);
}
- React
- Antd - framework para estilização visual
- Craco - plugin para edição da estilização
- Firebase - serviço que recebe as informações dos sensores
Para executar o projeto, capturamos os valores que os sensores enviam para o Firebase em Realtime Database e criamos 3 cards para cada placa. Onde são demonstrados as informações propostas pelo exercício do silo. Cada valor é determinante para uma ação de monitoramento. Elas são, volume do silo, luminosidade e volume atual. Assim cada valor recebido, executa uma ação pré-estabelecida no sistema.
É necessário ter uma conta no Google para configurar o Firebase e o projeto dentro dele. Após criar o projeto, será preciso alterar a configuração de conexão do React com o Firebase, no arquivo (src/services/firebase.js).
Para instalar as libs do projeto execute o comando:
npm install
Após, execute :)
npm start