Construye un Detector EMF Ultrasensible con Arduino Nano
Componentes y Suministros
| Componente | Descripción | Cantidad |
|---|---|---|
| Arduino Nano R3 | Microcontrolador principal | 1 |
| Pantalla LCD Estándar Adafruit 16x2 Blanco sobre Azul | Visualización de intensidad de campo | 1 |
| Zumbador (Buzzer) | Señalización acústica | 1 |
| LED (genérico) | Señalización visual | 1 |
| Interruptor Toggle | Selección de sensibilidad | 1 |
Aplicaciones y Servicios Online
- Arduino IDE - Entorno de desarrollo
Sobre el Proyecto
Este dispositivo simple es capaz de detectar campos electromagnéticos muy débiles. La intensidad relativa del campo se muestra en la pantalla LCD, acompañada de señalización acústica (zumbador) y visual (LED). El sensor consiste en un simple cable de cobre de 1.5mm de diámetro, aunque puede usarse cualquier pieza de alambre o lámina metálica.
La sensibilidad es ajustable mediante código y cambiando el valor del resistor conectado entre A0 y tierra. Con el interruptor se selecciona uno de dos valores de resistencia, cambiando así el grado de sensibilidad. Esto permite calibrar fácilmente el dispositivo comparándolo con un equipo industrial calibrado.
El circuito es muy simple: Arduino Nano y pocos componentes externos. El código combina dos partes: medidor VU para Arduino por KTAudio (parte de visualización LCD) y Detector EMF de Aaron ALAI (parte del sensor), con modificaciones para mayor estabilidad.
Como se muestra en el video, el dispositivo detecta fácilmente campos electromagnéticos de cables de alimentación solo con tensión (sin carga conectada). Por ejemplo, el campo de un monitor CRT antiguo se detecta a 3 metros o más.
El detector está montado en una carcasa conveniente y alimentado por batería de 9V.
Código
/* Medidor VU para Arduino por KTAudio. Desarrollado por ThomAce (Tamas Kamocsai) basado en siemenwauters, theredstonelabz y michiel H. Licencia GNU GPL v3. Modificado por mircemk (Mirko Pavleski) */
#include <LiquidCrystal.h>
byte Bar[8] = { B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111 };
byte L[8] = { B00111, B01000, B10100, B10100, B10100, B10111, B01000, B00111 };
byte R[8] = { B00111, B01000, B10110, B10101, B10110, B10101, B01000, B00111 };
byte EndMark[8] = { B10000, B01000, B00100, B00100, B00100, B00100, B01000, B10000 };
byte EmptyBar[8] = { B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111 };
byte peakHoldChar[8] = { B11111, B00000, B01110, B01110, B01110, B01110, B00000, B11111 };
String main_version = "1.0";
int right;
const int numReadings = 5;
int indexR = 0;
int totalR = 0;
int maxR = 0;
int inputPinR = A0;
int volR = 0;
int rightAvg = 0;
long peakHoldTime = 100;
long peakHold = 0;
int rightPeak = 0;
long decayTime = 0;
long actualMillis = 0;
int pin10 = 10;
int val = 0;
int pin9 = 9;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(40, 2);
lcd.createChar(1, Bar);
lcd.createChar(3, R);
lcd.createChar(4, EmptyBar);
lcd.createChar(5, EndMark);
lcd.createChar(6, peakHoldChar);
String KTAudio = " MIRCEMK";
for (int i = 0; i <= 16; i++) {
lcd.setCursor(0, 0);
lcd.print(KTAudio.substring(0, i));
delay(50);
}
KTAudio = " EMF-detector " + main_version;
for (int i = 0; i <= KTAudio.length(); i++) {
lcd.setCursor(0, 1);
lcd.print(KTAudio.substring(0, i));
delay(50);
}
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Loading...");
for (int i = 0; i < 16; i++) {
lcd.setCursor(i, 1);
lcd.write(4);
}
for (int i = 0; i < 16; i++) {
lcd.setCursor(i, 1);
lcd.write(1);
delay(50);
}
delay(500);
lcd.clear();
decayTime = millis();
}
void loop() {
lcd.setCursor(0, 0);
lcd.write(" EMF-intensity");
actualMillis = millis();
lcd.setCursor(0, 1);
lcd.write(3);
lcd.setCursor(15, 1);
lcd.write(5);
totalR = analogRead(inputPinR);
if(totalR >= 1){
totalR = constrain(totalR, 0, 100);
totalR = map(totalR, 0, 100, 1, 255);
analogWrite(pin10, totalR);
analogWrite(pin9, totalR);
}else{
analogWrite(pin10, 0);
analogWrite(pin9, 0);
}
if(totalR > maxR) { maxR = totalR; }
indexR++;
if (indexR >= numReadings) { indexR = 0; right = maxR; maxR = 0; }
volR = right / 3;
if(volR > 14) { volR = 14; }
if (volR < (rightAvg - 2)) {
if (decayTime < actualMillis) rightAvg--;
volR = rightAvg;
} else if (volR > (rightAvg + 2)) {
volR = (rightAvg + 2);
rightAvg = volR;
} else {
rightAvg = volR;
}
if (volR > rightPeak) { rightPeak = volR; }
drawBar(volR, rightPeak, 1);
if (decayTime < actualMillis) decayTime = (millis() + 50);
if (peakHold < actualMillis) {
peakHold = (millis() + peakHoldTime);
rightPeak = -1;
}
}
void drawBar(int data, int peakData, int row) {
if (peakData < 2) { peakData = -1; }
for (int col = 1; col < 15; col++) {
lcd.setCursor(col, row);
if (col < data) { lcd.write(1); }
else if (peakData == col) { lcd.write(6); }
else { lcd.write(4); }
}
}
Esquemáticos
Proceso de manufactura
- Construya un osciloscopio Arduino de 20 kHz en LCD Nokia 5110: Guía DIY fácil
- Detector de terremotos DIY con ADXL335 – Acelerómetro 3 ejes de baja potencia
- Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
- Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
- Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
- Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
- Osciloscopio DIY con Arduino Nano (10 Hz–50 kHz) y LCD 128×64
- Construye un dispositivo de tratamiento radiónico EMR con Arduino DIY
- Construye una Estación Meteorológica Arduino Fiable con Sensores DHT
- Detector de Rayos Económico con Arduino Uno
- Construye un Cerco RFID Portátil con Arduino – Guía Paso a Paso