Sistema Recordatorio Distanciamiento Social COVID-19 con Arduino
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | Arduino Nano es mejor, pero usé UNO |
| Shield Proto Arduino | 1 | Opcional |
| Mini protoboard Adafruit | 1 | |
| Pantalla LCD 16x2 Elegoo | 1 | |
| Sensor ultrasónico HC-SR04 | 1 | |
| Sensor táctil | 1 | También sirve un botón con pull-down |
| Termistor NTC | 1 | |
| Resistencia 10kΩ | 1 | |
| Zumbador | 1 | |
| Potenciómetro rotativo | 1 | Para contraste LCD |
| Cables jumpers | 1 juego | |
| Caja transparente estanca | 1 | Transparente para ver LCD, resistente a lluvia ligera |
Aplicaciones y servicios
- Arduino IDE
Descripción del proyecto
¿Qué es?
La forma más fiable de frenar la propagación del coronavirus es mantener la distancia; prevenir es mejor que curar. Pero resulta molesto girarse cada 30 segundos para ver si alguien se acerca. Sería útil un dispositivo que avise a los demás que mantengan 2 metros. Ese es el propósito: alertar para mantener 2 m de distancia. Es un 2-en-1: el termistor no solo mejora la precisión de la medida de distancia (la velocidad del sonido varía con la temperatura), sino que permite dos modos mediante botón/sensor táctil:
- Modo 1: Alerta si alguien se acerca.
- Modo 2: Muestra temperatura y distancia en el LCD.
¿Cómo funciona?
- Arduino mide la temperatura.
- Usa la temperatura para calcular la distancia con mayor precisión.
Modo 1 (Alerta):
- 2-1 m: Retroiluminación LCD encendida, muestra "Please keep away" + distancia.
- 1-0.5 m: Retroiluminación parpadea, muestra "Keep away".
- <0.5 m: Retroiluminación parpadea 2 veces/seg, muestra "STAY AWAY!".
Modo 2 (Medición): LCD muestra distancia (arriba) y temperatura (abajo).
Para proteger de la lluvia, usé media botella plástica que se sube cuando llueve. Se sujeta a la mochila con dos cuerdas y se quita fácilmente.
El sensor táctil cambia entre modos.
¿Cómo construirlo?
- Conecta los componentes según el esquema.
- Importa las librerías (sección Código): en Arduino IDE → Sketch → Include Library → Add .ZIP Library... Selecciona ambos .zip (son necesarios).
- Sube el código.
Código
Código principal (Arduino)
#include <HCSR04.h>
#include <LiquidCrystal.h>
#define trigPin 7
#define echoPin 6
#define buzzer 9
#define backlight 10
LiquidCrystal lcd(12, 11, 5, 4, 3, 8);
UltraSonicDistanceSensor distanceSensor(trigPin, echoPin);
int tempReading;
double tempK;
float tempC;
int rounded, temp_round;
volatile boolean modes = 0;
double distance;
void setup() {
lcd.begin(16, 2);
attachInterrupt(0, changeMode, FALLING);
pinMode(2, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(backlight, OUTPUT);
digitalWrite(backlight, HIGH);
backlightOn();
}
void loop() {
tempReading = analogRead(A0);
tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK)) * tempK);
tempC = tempK - 273.15;
distance = distanceSensor.measureDistanceCm(tempC);
temp_round = round(tempC);
if (modes == 1) { // Modo 2: Medición
backlightOn();
if (distance >= 300 || distance <= 0) {
rounded = 0;
lcd.clear();
lcd.print("Out of range");
lcd.setCursor(0, 1);
lcd.print("Temperature:" + String(temp_round) + " C");
} else {
rounded = round(distance);
lcd.clear();
lcd.print("Distance: "); lcd.print(rounded); lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Temperature:" + String(temp_round) + " C");
}
} else { // Modo 1: Alerta
if (distance >= 300 || distance <= 0) {
rounded = 0; lcd.clear(); backlightOff();
} else {
rounded = round(distance);
if (distance >= 200) { backlightOff(); lcd.clear(); }
else if (distance <= 200 && distance > 100) {
backlightOn(); lcd.clear();
lcd.print("Please keep away");
lcd.setCursor(0, 1); lcd.print("Distance:"); lcd.print(rounded); lcd.print(" cm");
}
else if (distance <= 100 && distance > 50) {
backlightOn(); lcd.clear();
lcd.print("Keep away");
lcd.setCursor(0, 1); lcd.print("Distance:"); lcd.print(rounded); lcd.print(" cm");
delay(200); buzz(); backlightOff(); delay(100); unbuzz(); backlightOn(); delay(100);
}
else if (distance <= 50) {
backlightOn(); lcd.clear();
lcd.print("STAY AWAY!");
lcd.setCursor(0, 1); lcd.print("Distance:"); lcd.print(rounded); lcd.print(" cm");
delay(200); buzz(); backlightOff(); delay(200); unbuzz(); backlightOn(); delay(200);
buzz(); backlightOff(); delay(200); unbuzz(); backlightOn();
}
}
}
delay(700);
}
void changeMode() { modes = !modes; }
void backlightOn() { digitalWrite(backlight, HIGH); }
void backlightOff() { digitalWrite(backlight, LOW); }
void buzz() { digitalWrite(buzzer, HIGH); }
void unbuzz() { digitalWrite(buzzer, LOW); }
Librerías necesarias
Esquemáticos
- Archivo Fritzing:
coronavirus_distancing_WQxTcxgmYm.fzz
Proceso de manufactura
- Muñeca interactiva "El Juego del Calamar" con Arduino UNO: Proyecto DIY
- Construye un reloj en tiempo real con Arduino para horarios de oración islámica
- Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso
- Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
- Calculadora Básica con Arduino UNO - Proyecto Fácil para Principiantes
- Cómo mostrar imágenes en una pantalla TFT LCD de 1.17 pulgadas con Arduino UNO
- Construir una pantalla de persistencia de visión portátil con Arduino UNO y ATtiny85
- Temporizador de Lavado de Manos con Arduino: Herramienta DIY Simple para Combatir el COVID‑19
- Control de Matriz LED 8×8 con Arduino Uno: Guía Paso a Paso
- Construye un Cubo LED 4x4x4 con Arduino Uno y 1Sheeld – Proyecto LED Interactivo
- Control de Ventilador PWM de 4 Pines a 25 kHz con Arduino Uno – Montaje, Código y Pruebas