/*
------------------ FIAP --------------------
SPRINT 3 - TECH MAHINDRA
EDGE COMPUTING & COMPUTER SYSTEMS
Participantes:
Prof. Paulo Marcotti PF2150
Arthur Cotrick Pagani RM554510
Diogo Leles Franciulli RM558487
Felipe Sousa de Oliveira RM559085
Ryan Brito Pereira Ramos RM554497
--------------------------------------------
Canal ThingSpeak para Processamento dos Dados
https://thingspeak.com/channels/2642712
Este projeto desenvolvido como parte da entrega
para a Sprint 3 do Challenge da Tech Mahindra na
FIAP demonstra uma aplicação de Internet das Coisas
(IoT) usando o microcontrolador ESP32 para monitorar
dados ambientais e a velocidade de um carro de Fórmula
E, além de um sistema de alerta de proximidade.
Utilizando um Sensor DHT22, um Potenciômetro (utilizado
para simular um velocímetro) e um Sensor Ultrassônico
de Distância HC-SR04 (em conjunto de um Buzzer e um LED),
o sistema mede continuamente a temperatura e umidade do
ambiente onde se encontra o veículo, bem como sua velocidade
atual, enviando esses dados para a nuvem via Wi-Fi, onde são
armazenados e analisados em tempo real através do software
ThingSpeak. Localmente, ele emite avisos ao piloto quando
seu veículo se encontra muito próximo em relação ao veículo
da frente (1 metro ou menos de distância).
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTPIN 15 // Pino GPIO15 do ESP32 para o DHT22
#define DHTTYPE DHT22 // Tipo de sensor DHT (DHT22)
DHT dht(DHTPIN, DHTTYPE);
#define POT_PIN 34 // Pino GPIO34 do ESP32 para o Potenciômetro
// Pinos do sensor ultrassônico
#define TRIGGER_PIN 5
#define ECHO_PIN 18
// Pinos do LED e Buzzer
#define ALERT_LED_PIN 2 // Pino GPIO2 do ESP32 para o LED Vermelho
#define BUZZER_PIN 4 // Pino GPIO4 do ESP32 para o Buzzer
// Credenciais
const char* ssid = "Wokwi-GUEST"; // Rede Wi-Fi
const char* password = ""; // Senha da rede Wi-Fi
const char* apiKey = "9S57D76C87Z162OP"; // Write API Key
const char* server = "http://api.thingspeak.com"; // Servidor ThingSpeak
void setup() {
Serial.begin(115200);
dht.begin();
// Configuração dos pinos
pinMode(POT_PIN, INPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ALERT_LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Inicialização do estado dos LEDs e Buzzer
digitalWrite(ALERT_LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
// Inicialização e loop de verificação da rede Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Conectando ao WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" conectado!");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
// Leitura dos sensores
float h = dht.readHumidity();
float t = dht.readTemperature();
int potValue = analogRead(POT_PIN); // Leitura do valor do Potenciômetro
float speed = map(potValue, 0, 4095, 0, 322); // Mapeamento do valor do potenciômetro para simular a velocidade de um carro da Fórmula E (0 a 322 km/h)
if (isnan(h) || isnan(t)) {
Serial.println("Falha ao ler o sensor DHT22!");
return;
}
// Leitura do sensor ultrassônico
long duracao, distancia;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duracao = pulseIn(ECHO_PIN, HIGH);
distancia = (duracao / 2) * 0.0344; // Conversão da distância em cm
// Controle do LED e Buzzer com base na distância
if (distancia <= 100) { // Distância crítica de 100 cm (1 metro)
// Mantém o LED aceso
digitalWrite(ALERT_LED_PIN, HIGH);
// Ativa o Buzzer
tone(BUZZER_PIN, 1000);
} else {
// Desliga o LED e o Buzzer quando a distância é maior que 100 cm
digitalWrite(ALERT_LED_PIN, LOW);
noTone(BUZZER_PIN);
}
// Envio de dados para o ThingSpeak
HTTPClient http;
String url = String(server) + "/update?api_key=" + apiKey + "&field1=" + String(t) + "&field2=" + String(h) + "&field3=" + String(speed);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString(); // Resposta da requisição HTTP
Serial.println("Dados enviados ao ThingSpeak.");
Serial.print("Código HTTP: ");
Serial.println(httpCode);
Serial.println("Resposta: ");
Serial.println(payload);
} else {
Serial.print("Erro ao enviar dados. Código HTTP: ");
Serial.println(httpCode);
}
http.end();
} else {
Serial.println("WiFi não conectado. Tentando reconectar...");
}
// Espera 15 segundos para enviar a requisição novamente
delay(15000);
}