//Librerias necesarias
#include <WiFi.h> // Para la conexion WIFI
#include <HTTPClient.h> // Para las solicitudes HTTP
/*
//Parámetros de WiFi.begin()
const char* ssid = "TU WIFI"; // Nombre de red Wi-Fi
const char* password = "TU CONTRA"; // Contraseña de la red Wi-Fi
*/
// Datos para ThinkSpeak
const char* server = "api.thingspeak.com";
const String apiKey = "NMQ8SCW82RPONBYF";
unsigned long channelID = 2326542;
// Número de campo para enviar la señal de movimiento
const int dataFieldMove = 1;
const int dataFieldDistance = 2;
const int PIN_SENSOR = 14;
const int PIN_SENSOR_ULTRA_TRIGGER = 12;
const int PIN_SENSOR_ULTRA_ECHO = 13;
const int PIN_BUZZER = 27;
void setup() {
// Inicializa la comunicación serial para ver los resultados
Serial.begin(115200); //cambiar a 9600
delay(30);
// Conexion a la red WIFI
//Wokwi-GUEST es una red proporcionada por el simulador
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println("Conectandose a la red Wi-Fi...");
}
Serial.println("Conexion exitosa");
Serial.println("----------------");
// Inicialización de pines
pinMode(PIN_SENSOR, INPUT);
pinMode(PIN_SENSOR_ULTRA_ECHO, INPUT);
pinMode(PIN_SENSOR_ULTRA_TRIGGER, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
}
void loop() {
// Leer estado del sensor
int estadoSensor = digitalRead(PIN_SENSOR);
// Verificar estado del sensor
if (estadoSensor == HIGH) {
Serial.println("Se ha detectado movimiento");
int distancia = medirDistanciaUltraSonido();
Serial.print("Distancia medida: ");
Serial.print(distancia);
Serial.println(" cm");
Serial.println("--------------------------");
int frecuencia = hacerSonarZumbador();
Serial.print("Emitiendo una frecuencia de: ");
Serial.print(frecuencia);
Serial.println(" Hz");
Serial.println("--------------------------");
// Enviar datos a ThingSpeak
sendDataThinkSpeak(channelID, apiKey, 1, distancia);
} else {
Serial.println("Sin movimiento");
Serial.println("--------------");
// Enviar datos a ThingSpeak
sendDataThinkSpeak(channelID, apiKey, 0, 0);
detenerSonidoZumbador();
}
//Tiempo de espera en milisegundos
delay(15000);
}
long medirDistanciaUltraSonido() {
//Apagamos el emisor de sonido
digitalWrite(PIN_SENSOR_ULTRA_TRIGGER, LOW);
//Retrasamos la emision por 2 milesimas de segundo
delayMicroseconds(2);
//Comenzamos a emitir sonido
digitalWrite(PIN_SENSOR_ULTRA_TRIGGER, HIGH);
//Retrasamos la emision por 10 milesimas de segundo
delayMicroseconds(10);
//Comenzamos a escuchar el sonido
digitalWrite(PIN_SENSOR_ULTRA_TRIGGER, LOW);
return pulseIn(PIN_SENSOR_ULTRA_ECHO, HIGH) / 58;
}
int hacerSonarZumbador(){
int frecuencia = random(15000, 25001); // Genera un número aleatorio entre 15000 y 25000
tone(PIN_BUZZER, frecuencia);
return frecuencia;
}
void detenerSonidoZumbador() {
noTone(PIN_BUZZER);
}
void sendDataThinkSpeak(unsigned long id, const String apikey, int moveValue, int distanceValue) {
// Realizar solicitudes HTTP
HTTPClient http;
// Construcción de la url para la solicitud
String url = "/update?api_key=" + apikey;
url = url + "&field" + String(dataFieldMove) + "=" + String(moveValue);
url = url + "&field" + String(dataFieldDistance) + "=" + String(distanceValue);
if (http.begin(server, 80, url)) {
int httpCode = http.GET();
if (httpCode == 200) {
Serial.println("Los datos se enviaron exitosamente");
Serial.println("----------------------------------");
} else {
Serial.println("Problema actualizando Canal, HTTP error code " + String(httpCode));
}
http.end();
}
}