цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Детектор электромагнитного излучения на Arduino своими руками

Детектор электромагнитного излучения на Arduino своими руками

Автор: Mike(admin) от 19-02-2017, 07:15

Платформа 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<ledcount+ledPinOffset; i++) {
      pinMode(i, OUTPUT);
   }
   for (int i=0; i<MEASURES; i++) {
      bucket[i] = 0;
   }
}
void loop() {
   val = analogRead(probe);
   if (val >= 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<ledcount; i++) {
         if (avg > ranges[i]) {
            digitalWrite(i+ledPinOffset, HIGH);
         } else {
            digitalWrite(i+ledPinOffset, LOW);
         }
      }
   Serial.println(val);
}



Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Xalius

  • 1 декабря 2017 10:54
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
В ф-и loop подсчитайте кол-во открывающихся/закрывающихся {}.