Construa um Detector de EMF Ultra-Sensível com Arduino Nano
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Nano R3 | 1 |
| Display LCD Padrão Adafruit 16x2 Branco no Azul | 1 |
| Buzzer | 1 |
| LED (genérico) | 1 |
| Chave Seletora (Toggle Switch) | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Este é um dispositivo simples capaz de detectar campos eletromagnéticos muito fracos. A intensidade relativa do campo é exibida no display LCD, acompanhada de sinalização sonora (buzzer) e visual (LED). O sensor consiste em um fio de cobre simples com 1,5 mm de diâmetro, mas qualquer pedaço de fio ou placa metálica pode ser usado. A sensibilidade pode ser ajustada via código e alterando o valor do resistor conectado entre A0 e o ground. Com a chave seletora, escolhe-se entre dois valores de resistor, ajustando o grau de sensibilidade. Isso permite calibração fácil comparando com um dispositivo industrial recalibrado.
O circuito é muito simples, consistindo no microcontrolador Arduino Nano e poucos componentes externos.
O código combina duas partes: medidor VU baseado em Arduino por KTAudio (parte do display LCD) e Detector EMF de Aaron ALAI (parte do sensor), com modificações para maior estabilidade. O código completo está disponível para download.
Conforme demonstrado no vídeo, o dispositivo detecta facilmente campos eletromagnéticos gerados por cabos de energia apenas sob tensão (sem carga conectada). Por exemplo, o campo de um monitor CRT antigo é detectado a 3 metros ou mais.
O detector é montado em uma caixa conveniente e alimentado por bateria de 9V.
Código
Código (C/C++)
/* Arduino based VU meter by KTAudio. Developed by ThomAce (Tamas Kamocsai) based on siemenwauters, theredstonelabz and michiel H's VU meter. GNU GPL License v3 Developer: ThomAce (Tamas Kamocsai) Mail: thomacepcg@gmail.com Version: 1.0 Last modification date: 2019.09.24 Original version: https://www.instructables.com/id/ARDUINO-VU-METER/ Original description: VU meter by siemenwauters, theredstonelabz and michiel H don't forget to like and subscribe to support my work. tnx Modified by 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ático
Diagrama de conexões disponível na documentação original.
Processo de manufatura
- Construa um Osciloscópio Arduino de 20 kHz em LCD Nokia 5110 – Guia DIY Fácil
- Detector de Terremoto DIY ADXL335 – Acelerômetro 3-Eixos de Baixa Potência
- Crie Animações e Jogos Envolventes em LCD com Arduino UNO
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Construa um Skate VR DIY com Arduino, Google Cardboard e Bluetooth
- Osciloscópio DIY com Arduino Nano (10 Hz–50 kHz) e LCD 128×64
- Dispositivo de Tratamento Radiônico EMR DIY com Arduino Nano
- Construa uma Estação Meteorológica Arduino Confiável com Sensores DHT
- Construa um Detector de Raios de Baixo Custo com Arduino Uno