Детектор электромагнитного излучения на Arduino своими руками
Платформа Arduino уникальна тем, что с помощью нее можно создавать различные полезные (и не очень полезные) в быту устройства. К одним из таких можно причислить детектор электромагнитного поля, простая реализация которого может быть основана на плате Arduino. Такой самодельный детектор может определять присутствие вблизи магнитных полей, генерируемых различными бытовыми приборами, компьютерами, радиосистемами и другим электронным и электричским оборудованием.
Данный проект является довольно простым и рекомендуется новичкам, которые начинают изучать экосистему Arduino.
Схема детектора электромагнитного излучения на базе Arduino представлена ниже.
Схема помимо самой платы Arduino Uno состоит из входной цепи и выходной цепи. Входная цепь, предназначенная для регистрации электромагнитного излучения, в свою очередь состоит из конденсатора и двух диодов. Емкость конденсатора в данном случае составляет 1.5 нФ. В качестве диодов здесь используются диоды 1N4148. Сигнал входной цепи заводится на аналоговый вход A0 платы Arduino. Выходная цепь предназначена для определения уровня электромагнитного излучения и представляет собой светодиодный индикатор, то есть она состоит из десяти светодиодов и десяти подключенным к этим светодиодам токоограничительных резисторов номиналом 470 Ом. Светодиоды в данном случае используются LDA-B10ZX. Светодиоды с резисторами подключаются к цифровым портам ввода/вывода D2-D11.
Ниже представлен скетч (код) для работы детектора электромагнитного излучения на основе Arduino.
#define MEASURES 15
int senseLimit = 15;
int probe = A0;
int ranges[] = {50, 150, 250, 350, 450, 550, 650, 750, 850, 950};
int ledcount = sizeof(ranges)/sizeof(int);
int ledPinOffset = 2;
int bucket[MEASURES];
int total = 0;
int pos = 0;
int avg = 0;
int val = 0;
void setup() {
Serial.begin(9600);
pinMode(probe, INPUT);
for (int i=ledPinOffset; i= 1){
val = constrain(val, 1, senseLimit);
val = map(val, 1, senseLimit, 1, 1023);
total -= bucket[pos];
bucket[pos] = val;
total += bucket[pos];
pos = (pos + 1);
if (pos >= MEASURES) {
pos = 0;
}
avg = total / MEASURES;
for (int i=0; i ranges[i]) {
digitalWrite(i+ledPinOffset, HIGH);
} else {
digitalWrite(i+ledPinOffset, LOW);
}
}
Serial.println(val);
}