Детектор электромагнитного поля на основе Atmel ATTiny

Вдохновленные мастерклассами некоторых профессионалов в мире плат и микроконтроллеров мы отправились собирать собственный микроразмерный детектор электромагнитного поля. Целью было сделать устройство как можно меньшего размера, сохраняя при этом достаточную стабильность работы и чтобы не сломался в кармане.

Конечно, главной проблема было непонимание того как сделать антенну. Мы решили использовать макетную плату, чтобы антенна сохраняла свою форму. Как и прежде, изображение готового устройства пойдет в самом начале.

Шаг 1: Комплектующие

[1x] Atmel ATTiny85V  микроконтроллер

[1x] 100Ω сопротивление

[4x] Светодиоды, цвет не важен

[-] Провода

[1x] Кнопка или переключатель

[1x] Батарея и держатель батарей

Шаг 2: Готовим антенну

Сверните антенну в нужную форму. Это можно легко сделать, обернув участок проволоки вокруг карандаша, а затем растягивая его до хорошей длины. Какую длину вы спрашиваете?

Как вы знаете длина провода будет влиять на частоту, которую он подбирает. Однако, поскольку мы не ищем определенную частоту и вместо этого в основном ищем любые электрические шумы, длина не имеет решающего значения для сборки. Наш провод оказался немного больше, чем отверстия макетной платы, поэтому мы просверлили ее немного.

Шаг 3: Собираем всё вместе

После того как самый большой компонент на месте, антенна, мы решили где разместить остальные части.

Шаг 4: Программируем

Загрузите код в ATTiny85, инструкции для этого можно найти по всему Интернету, так что обратитесь к одной из них, если вы никогда раньше не работали с «сырым» микроконтроллером.

// EMF Detector Attiny85 and 4 led v1.0
// 23.10.2015
// original code/project by Aaron ALAI - aaronalai1@gmail.com
// modified for use by Giovanni Gentile - giovanni@0lab.it
//              Attiny 85
//                ____
//       Reset  -      - vcc+
//          led -      - led
//  4Moh + ante -      - led
//          GND -      - led
//
// Put the 4 Mohm resistor to pin 3 and GND and put antenna

#define NUMREADINGS 15 // Number of readings

int senseLimit = 15; // raise this num to decrease sensitivity
int val = 0; 
int antenna = A2;

int LED[] = {2,0,1,3};

// Variables for smoothing
int readings[NUMREADINGS];
int index = 0;
int total = 0;
int averange = 0;

void setup() {
  
  pinMode(2, OUTPUT);
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(A2, INPUT);

// Test leds
  for (int i=0; i<4; i++) {
    digitalWrite(LED[i],HIGH);
    delay(500);
  }
  for (int i=0; i<4; i++) {
    digitalWrite(LED[i],LOW);
  }
  
// Initialize all the readings
  for (int i = 0; i < NUMREADINGS; i++) {
  readings[i] = 0;
  }
}

void loop() {
  int val = analogRead(antenna);
  
  if(val >= 1){
    
    val = constrain(val, 1, senseLimit); // turn any readings higher than the senseLimit into the senseLmit value
    val = map(val, 1, senseLimit, 1, 1023); // remap the values
    
    total -= readings[index]; // subtract the last reading
    readings[index] = val;    // read from the sensor
    total+= readings[index];  // add the reading to the total
    index = (index + 1);      // advance to the next index
    
    if (index >= NUMREADINGS)
      index = 0;
  
    averange = total / NUMREADINGS;
    
    if (averange > 50) {
      digitalWrite(2,HIGH);
    }
    else {
      digitalWrite(2,LOW);
    }

    if (averange > 350) {
      digitalWrite(0,HIGH);
    }
    else {
      digitalWrite(0,LOW);
    }
  
    if (averange > 750) {
      digitalWrite(1,HIGH);
    }
    else {
      digitalWrite(1,LOW);
    }
  
    if (averange > 950) {
      digitalWrite(3,HIGH);
    }
    else {
      digitalWrite(3,LOW);
    }
  }
}

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

Шаг 5: Итог

В проекте изначально не должно было быть кнопки, а нужно было просто отключить батарею для включения / выключения питания. Но мы решили добавить одну, что видно на рисунке выше с обратной стороны платы.

Также мы добавили несколько обмоток, чтобы  изолировать провода и избежать короткого замыкания.

На этом всё. Хороших вам проектов!

Ардуино+