Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сверхчувствительный детектор ЭМП на Arduino Nano: пошаговая инструкция

Компоненты и материалы

Компонент Описание Кол-во
Arduino Nano R3 Микроконтроллер 1
Adafruit LCD 16x2 (белый на синем) Дисплей для индикации уровня поля 1
Пьезоизлучатель (Buzzer) Звуковая сигнализация 1
Светодиод Световая индикация 1
Переключатель (Toggle Switch) Выбор диапазона чувствительности 1

Приложения и сервисы

О проекте

Простое устройство для обнаружения слабых электромагнитных полей. Относительная интенсивность отображается на LCD, сопровождается звуковым и световым сигналом. В качестве антенны используется медный провод (диаметр 1.5 мм), можно применить любой провод или металлическую пластину.

Чувствительность регулируется в коде и заменой резистора между A0 и землей. Переключатель переключает два значения резистора, меняя диапазон чувствительности — это позволяет калибровать прибор, сравнивая с эталонным промышленным детектором.

Сверхчувствительный детектор ЭМП на Arduino Nano: пошаговая инструкция

Схема минимальна: Arduino Nano и несколько внешних компонентов.

Код объединяет два проекта: VU-метр на LCD (автор KTAudio) и EMF-детектор Aaron ALAI, с модификациями для стабильности. Доступен для скачивания по ссылке.

Устройство обнаруживает поля от кабелей под напряжением (без нагрузки). Поле от старого CRT-монитора улавливается на расстоянии 3+ метров.

Детектор размещен в удобном корпусе, питание — крона 9В.

Код

EMF Detector (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); }
  }
}

Схемы

Сверхчувствительный детектор ЭМП на Arduino Nano: пошаговая инструкция

Производственный процесс

  1. Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
  2. DIY детектор землетрясений на ADXL335 с усилением ОУ OP07
  3. Создание анимации и игр на LCD 16×2 с Arduino UNO
  4. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  5. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  6. Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
  7. Самодельный осциллограф на Arduino Nano (10 Гц – 50 кГц) с ЖК-дисплеем 128×64
  8. DIY Arduino Radionics EMR Treatment Device — радионическое устройство
  9. Надежная погодная станция на Arduino с датчиками DHT
  10. Создание дешевого детектора молний на Arduino Uno