#include <Wokwi_Expander.h> // Necesario para la funcionalidad de Wokwi Expander
// Definición de pines para el sensor ultrasónico
const int trigPin = 9; // Pin Trigger del sensor ultrasónico
const int echoPin = 10; // Pin Echo del sensor ultrasónico
// Definición de pin para el LED
const int ledPin = 13; // Pin digital para el LED (usaremos el LED integrado en muchas placas Arduino)
// Variables para la medición de distancia
long duration; // Variable para almacenar la duración del pulso
int distanceCm; // Variable para almacenar la distancia en centímetros
// Umbral de distancia para la alerta
const int UMBRAL_DISTANCIA = 130;
void setup() {
// Configuración de pines
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT); // Configura el pin del LED como salida
// Inicialización de la comunicación serial
Serial.begin(115200); // Usamos una velocidad más alta para WebSockets, aunque el serial no es directo
WokwiExpander.begin(); // Inicializa el Wokwi Expander para la comunicación externa
}
void loop() {
// Limpiar el pin Trig
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Generar un pulso de 10 microsegundos en el pin Trig
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Leer la duración del pulso en el pin Echo
duration = pulseIn(echoPin, HIGH);
// Calcular la distancia en centímetros (velocidad del sonido en el aire: 0.034 cm/microsegundo)
// Dividimos por 2 porque el sonido viaja de ida y vuelta
distanceCm = duration * 0.034 / 2;
int distanciaViento = distanceCm; // La distancia medida es la "distancia al viento"
// Construir el mensaje para enviar a Node-RED
// WokwiExpander.println() envía el mensaje a través de WebSockets
String message = "Distancia: " + String(distanciaViento) + " cm";
WokwiExpander.println(message);
// Control del LED y envío de mensaje de alerta a Node-RED
if (distanciaViento > UMBRAL_DISTANCIA) {
digitalWrite(ledPin, HIGH); // Enciende el LED
WokwiExpander.println("ALERTA: Distancia al viento es MUCHO"); // Mensaje de alerta para Node-RED
} else {
digitalWrite(ledPin, LOW); // Apaga el LED
}
// Pequeña pausa antes de la siguiente lectura
delay(100); // Lee cada 100 milisegundos
}