#include <ESP32Servo.h> // Inclui a biblioteca do Servo Motor
#include <ThingSpeak.h>
#include <WiFi.h>
#define trigIn 26 // Pino que lê a distância (Sensor Esquerdo)
#define echoIn 27 // Pino que envia a distância (Sensor Esquerdo)
#define trigOut 19 // Pino que lê a distância (Sensor Direito)
#define echoOut 18 // Pino que envia a distância (Sensor Direito)
Servo servo1; // Cria um objeto de Servo
int ledRed = 4;
int aberto;
int ledTS = 0;
int tempo, ulttempo = 0;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
unsigned long myChannelNumber = 2654013;
const char* myWriteAPIKey = "RVTKUO39ENLDEPPH";
WiFiClient client;
void setup() {
Serial.begin(115200); // Inicializa a comunicação serial
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi...");
}
Serial.println("Conectado ao WiFi");
ThingSpeak.begin(client);
pinMode(trigIn, OUTPUT); // Define o pino TRIG do sensor esquerdo como saída
pinMode(echoIn, INPUT); // Define o pino ECHO do sensor esquerdo como entrada
pinMode(trigOut, OUTPUT); // Define o pino TRIG do sensor direito como saída
pinMode(echoOut, INPUT); // Define o pino ECHO do sensor direito como entrada
servo1.attach(17); // Define o pino em que o Servo está conectado no Arduino
pinMode(ledRed, OUTPUT); // Define o pino do LED como saída
}
void loop() {
// Inicia a medição do Sensor Esquerdo:
digitalWrite(trigIn, HIGH);
delayMicroseconds(10);
digitalWrite(trigIn, LOW);
// Lê o resultado:
float duration1 = pulseIn(echoIn, HIGH);
float distIn = duration1 / 58.0; // Calcula a distância do Sensor Esquerdo
// Inicia a medição do Sensor Direito:
digitalWrite(trigOut, HIGH);
delayMicroseconds(10);
digitalWrite(trigOut, LOW);
// Lê o resultado:
float duration2 = pulseIn(echoOut, HIGH);
float distOut = duration2 / 58.0; // Calcula a distância do Sensor Direito
// Controle do servo motor baseado na distância do Sensor Direito
if (distOut < 15) {
servo1.write(90); // Abre o servo motor
aberto = 1;
} else {
servo1.write(0); // Fecha o servo motor
aberto = 0;
}
// Controle do LED baseado na distância do Sensor Esquerdo
if (aberto == 0 && distIn < 15) {
digitalWrite(ledRed, HIGH); // Acende o LED se o servo estiver fechado e o objeto estiver próximo
ledTS = 1;
}
else {
digitalWrite(ledRed, LOW); // Apaga o LED
ledTS = 0;
}
// Condição adicional para quando ambos os sensores detectarem proximidade
if (distIn < 15 && distOut < 15) {
servo1.write(90); // Abre o servo motor
digitalWrite(ledRed, HIGH); // Acende o LED
ledTS = 1;
}
// Envia dados para o ThingSpeak
ThingSpeak.setField(1, ledTS); // Envia a distância do Sensor Direito (ou qualquer dado relevante)
int status = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (status == 200) {
Serial.println("Dados enviados ao ThingSpeak");
} else {
Serial.print("Falha ao enviar dados. Código: ");
Serial.println(status);
}
delay(200); // Pequena pausa antes de reiniciar o loop
}