Вдохновленные мастерклассами некоторых профессионалов в мире плат и микроконтроллеров мы отправились собирать собственный микроразмерный детектор электромагнитного поля. Целью было сделать устройство как можно меньшего размера, сохраняя при этом достаточную стабильность работы и чтобы не сломался в кармане.
Конечно, главной проблема было непонимание того как сделать антенну. Мы решили использовать макетную плату, чтобы антенна сохраняла свою форму. Как и прежде, изображение готового устройства пойдет в самом начале.
Шаг 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: Итог
В проекте изначально не должно было быть кнопки, а нужно было просто отключить батарею для включения / выключения питания. Но мы решили добавить одну, что видно на рисунке выше с обратной стороны платы.
Также мы добавили несколько обмоток, чтобы изолировать провода и избежать короткого замыкания.
На этом всё. Хороших вам проектов!