Подключаем датчик движения к ардуино

Hints

If you do not know which protocol your IR transmitter uses, you have several choices.

  • Use the IRreceiveDump example to dump out the IR timing.
    You can then reproduce/send this timing with the IRsendRawDemo example.
    For long codes with more than 48 bits like from air conditioners, you can change the length of the input buffer in .
  • The prints the protocol and data for one of the 40 supported protocols.
    The same library can be used to send this codes.
  • If you have a bigger Arduino board at hand (> 100 kByte program space) you can try the
    IRremoteDecode example of the Arduino library DecodeIR.
  • To increase strength of sent output signal you can increase the current through the send diode, or use 2 diodes in series,
    since one IR diode requires only 1.5 volt. Changing to 50 increases the signal current by 40%.

Compile options / macros for this library

Name File Default value Description
Before disabled If activated, BOSEWAVE, MAGIQUEST,WHYNTER and LEGO_PF are excluded in and in sending with . Saves up to 900 bytes program space.
Before 20 MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, to compensate for the signal forming of different IR receiver modules.
IRremoteInt.h disabled Enable it if you use a RF receiver, which has an active HIGH output signal.
IRremote1.h disabled Enables lots of lovely debug output.
IRremote.h disabled Use no carrier PWM, just simulate an active low receiver signal.
IRremote.h disabled Use carrier PWM generation in software, instead of hardware PWM.
IRremote.h 3 If USE_SOFT_SEND_PWM, this amount is subtracted from the on-time of the pulses.
IRremote.h disabled If USE_SOFT_SEND_PWM, use spin wait instead of delayMicros().
IRremote.h enabled If activated, BOSEWAVE and LEGO_PF are supported in the write method. Costs around 500 bytes program space.
IRremoteint.h 101 Buffer size of raw input buffer. Must be odd!
IRremoteBoardDefs.h 30 Duty cycle of IR send signal.
IRremoteBoardDefs.h 50 Resolution of the raw input buffer data.
irSend.cpp disabled Use old custom_delay_usec() function for mark and space delays.
TinyIRReceiver.h 2 The pin number for TinyIRReceiver IR input, which gets compiled in.
TinyIRReceiver.h The pin number for TinyIRReceiver feedback LED, which gets compiled in.
TinyIRReceiver.h disabled Enable it to disable the feedback LED function.

Modifying compile options with Arduino IDE

First use Sketch > Show Sketch Folder (Ctrl+K).
If you did not yet stored the example as your own sketch, then you are instantly in the right library folder.
Otherwise you have to navigate to the parallel folder and select the library you want to access.
In both cases the library files itself are located in the directory.

Шаг 5. Программирование

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

  1. Adafruits SSD1306
  2. Adafruits MLX90614

Программа постоянно считывает данные о температуре с MLX90614, но отображается на OLED только при нажатии кнопки триггера. Если нажать на курок, лазер также включается, чтобы помочь определить, какой объект измеряется.

Код для нашего инфракрасного термометра Ардуино ниже:

#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Ширина дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота дисплея, в пикселях

const int Laser_Pin=5;  //Laser Pin
int buttonState = 0; 
const int buttonPin = 2;     // количество пинов кнопки

// Декларация для дисплея SSD1306, подключенного к I2C (выводы SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit MLX90614 test"); 
  
  pinMode(Laser_Pin,OUTPUT);
  pinMode(buttonPin, INPUT);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Адрес 0x3D для 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  

  display.clearDisplay();
  display.setRotation(2);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 35);
  display.println("Initializing Temp");
  display.display();
  delay(250);
  display.clearDisplay();

  mlx.begin(); 
  
}

void loop() {

  buttonState = digitalRead(buttonPin);
  Serial.println(buttonState);
  
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 
  Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");
  
  // проверяем, нажата ли кнопка и если это так, то buttonState - HIGH:
  if (buttonState == HIGH) {
    // включаем LED (светодиод):
    digitalWrite(Laser_Pin, HIGH);
    
    display.clearDisplay();
    display.setTextSize(2);  // Размер 2 означает, что каждый пиксель имеет ширину 12 и высоту 16
    display.setCursor(25, 10);
    display.print(mlx.readObjectTempC());
    display.setCursor(95, 10);
    display.print("C");
    display.setTextSize(2);
    display.setCursor(25, 36);
    display.print(mlx.readObjectTempF());
    display.setCursor(95, 36);
    display.print("F");
    display.display();    
    
  } else {
    // turn LED off:
    digitalWrite(Laser_Pin, LOW);
  
    display.clearDisplay();
    display.setTextSize(2);  // Размер 2 означает, что каждый пиксель имеет ширину 12 и высоту 16
    display.setCursor(35, 10);
    display.print("-----");
    display.setCursor(105, 10);
    display.print("");
    display.setTextSize(2);
    display.setCursor(35, 36);
    display.print("-----");
    display.setCursor(105, 36);
    display.print("");
    display.display();    
    
  }

  Serial.println();
  delay(500);
}

random — генерация случайных чисел Ардуино

Функция random (min, max) позволяет вернуть псевдослучайное число в диапазоне, заданном значениями min и max. Разберем примеры с разными типами данных.

Arduino random int

В представленном примере выбран тип данных byte, хранящий целые числа в диапазоне от 0 до 250. Можно использовать и другие типы данных: int, long, unsigned long, unsigned int и другие. Соответственно задается нужный диапазон (min, max).

byte data;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data = random(100, 200); // ардуино рандомное число в диапазоне
   Serial.println(data);
   delay(250);
}

Arduino random float

Генерировать микроконтроллер может только целые числа. Поэтому чтобы получить тип данных float с двумя знаками после запятой, следует отдельно генерировать целое число и добавлять к нему десятичные дроби. Пример такой программы:

float data;
float data1;
float data2;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data1 = random(0, 10);        // генерируем целые числа
   data1 = random(0, 100);      // генерируем числа после запятой
   data = data1 + data2 / 100; // складываем полученные значения
   Serial.println(data);
   delay(250);
}

Arduino random bool

Если нужна случайная переменная boolean, которая может принимать только два значения true или false. То можно генерировать случайное true/false с заданной вероятностью. Просто присваиваем переменной bool результат функции random, в которой указываем число, обратное вероятности получения false. Пример:

bool data;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data = random(5); // переменная data получит значение 0 с вероятностью 1/5
   Serial.println(data);
   delay(250);
}

Подключение датчика геркона к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • герконовый датчик KY-021;
  • один светодиод и резистор;
  • беспаечная макетная плата;
  • провода «папа-папа», «папа-мама».


Подключение датчика геркона (reed switch) к Ардуино

Для получения данных с датчика мы будем использовать цифровой порт общего назначения, так как использовать аналоговый сигнал в этом случае не имеет смысла. В отличии от датчика звука для Arduino, который может дополнительно сообщать характеристику сигнала (уровень шума), геркон работает, как простая кнопка. Модуль ky-021 замыкает и размыкает контакт под действием магнитного поля.

Скетч для модуля с герконом Arduino (KY-021)

#define  gerconPin  2 // задаем имя для порта 2
#define  ledPin  13     // задаем имя для порта 13

byte  gercon;

void setup() {
   Serial.begin(9600);
   pinMode(gerconPin, INPUT);
   pinMode(ledPin, OUTPUT);
}

void loop() {

   gercon = digitalRead(gerconPin);        // считываем данные с датчика

   Serial.print("Reed Switch Sensor - ");  // выводим данные на монитор
   Serial.println(gercon);

   if (gercon == HIGH)
      digitalWrite(ledPin, HIGH);
   else
      digitalWrite(ledPin, LOW);
}

Пояснения к коду:

  1. для приема сигнала с датчика KY-021 используется цифровой порт 2;
  2. в нашем примере используется нормально разомкнутый геркон, то есть контакты датчика разомкнуты при отсутствии магнитного поля.

Цифровой датчик геркона для Ардуино кроме установленного на плате подстроечного резистора для настройки чувствительности сенсора имеет компаратор LM393. Этот элемент также называют микросхема LM393, компаратор служит для генерирования цифрового сигнала при срабатывании сенсора и установлена на многих подобных модулях (например, датчик препятствий) для микроконтроллера Arduino.

Модуль фоторезистора KY-018

Данный модуль представляет собой делитель напряжения, состоящий из фоторезистора и постоянного резистора сопротивлением 10 кОм

Модуль имеет габаритный размер 30 x 14 мм и массу 1,2 г. Для подключения служит трехконтактный разъем. Центральный контакт – питание +5В, контакт «-» — общий, контакт «S» — информационный. Потребляемый ток 270 мкА.

При изменении освещенности происходит изменение сопротивления фоторезистора, что приводит к изменению уровня напряжения на сигнальном выводе модуля.

Если загрузить в Arduino программу AnalogInput2, то в мониторе последовательного порта среды разработки Arduino IDE можно наблюдать, как меняются показания, снимаемые с аналогового входа платы Arduino.

Модуль легко сделать глазом робота или датчиком освещенности умного дома.

Принцип работы

Каждый теплокровный объект является источником теплового излучения. Длина волны теплового излучения зависит от температуры и находится в инфракрасной части спектра. ИК излучение невидимо для глаза, но улавливается пироэлектрическими датчиками.

  • В радиусе видимости датчика полная тишина. Каждый чувствительный элемент PIR-сенсора получает постоянную дозу излучения. Следовательно выдаваемое напряжение равноценно.
  • В области видимости появляется человек. Персонаж первым делом попадает в зону обозрения первого элемента, на котором появляется положительный электрический импульс.
  • Человек движется и пересекает второй элемент, который генерирует отрицательный импульс.
  • Разнонаправленные импульсы регистрируются электронной схемой модуля, которая фиксирует перемещение объекта. В результате на выходе модуля генерируется положительный импульс.

Инструкция по изготовлению лодки с пультом

Проверку работы ИК-приемника и сервомотора на Ардуино лучше проводить с отключенным электромоторчиком, поскольку он будет создавать сильные вибрации при работе. На этом этапе тестирования проекта следует лишь оценить подвижность киля и отцентровать рычаг привода на сервомоторе. Необходимо сделать так, чтобы при нажатии кнопки «вперед» или «стоп» на пульте, киль вставал по центру.

1. Изготовление корпуса лодки из пеноплекса

Изготовление корпуса лодки на Ардуино своими руками

Размеры и форма лодки могут быть абсолютно разными — все зависит лишь от фантазии. Что касается прорезей, то они должны соответствовать размерам деталей. На трафарете (слева-направо) размечены прорези для: платы Ардуино UNO, сервомотора, привода киля и микромоторчика. Учтите, что привод от сервомотора к килю должен свободно ходить в прорези, для этого надо точно рассчитать радиус.

2. Изготовление деталей для привода и управления

Изготовление деталей для привода и управления лодкой

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

Сборка деталей для привода радиоуправляемой лодки

3. Сборка лодки на Ардуино с управлением

Для начала следует установить плату, сервопривод и двигатель

В этом проекте мы обошлись без использования макетной платы. Если вспомнить схему подключения ИК приемника к Ардуино, то она очень проста (слева-направо): A0 — GND — 5V  и не требует расходов на приобретение макетной платы. Транзистор мы использовали в этой схеме для включения советского электромоторчика от 3,3 V.

Сборка электрической схемы лодки на ИК управлении

Транзистор размещен на пинах 12, 11 и 10. На Pin11 (средняя ножка транзистора — это база) мы подаем напряжение для включения электродвигателя. Pin12 и Pin10 в скетче не используются, поэтому служат нам эмиттером и коллектором. К Pin12 подключен выход 3,3 V, а к Pin10 подключен электромоторчик (красный плюсовой провод).

4. Крепление привода винта на валу двигателя

Разогрейте стержень от ручки над паяльником и он зайдет на вал двигателя

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

Скетч для лодки на Ардуино с ИК пультом

#include <IRremote.h> // библиотека для IR-приемника
#include <Servo.h>      // библиотека для сервомотора

// Замените коды команд от пульта ДУ на свои значения
#define forward 16736925
#define left 16769565
#define right 16754775
#define turm_left 16712445
#define turm_right 16711935
#define stope 16755285

Servo servo; // присваиваем имя сервомотору

int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600); // подключаем монитор, чтобы узнать коды кнопок пульта
  irrecv.enableIRIn();
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT);
  servo.attach (7);
}

void loop() {
  
    if (irrecv.decode(&results)) {
    
    Serial.println(results.value); // выводим на монитор порта коды с пульта ДУ

    if (results.value == left) {
    servo.write(60);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == right) {
    servo.write(120);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == turm_left) {
    servo.write(10);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == turm_right) {
    servo.write(170);
    digitalWrite(11, HIGH);  
   }
   
    if (results.value == forward) {
    servo.write(90);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == stope) {
    servo.write(90);
    digitalWrite(11, LOW);
   }
   
    irrecv.resume(); // Ждем следующий сигнал от пульта
  }  
}

Шаг 1. Вступление

Инфракрасные термометры широко используются для определения температуры поверхности объектов. Часто в технических системах или в электронной цепи повышение температуры является одним из первых признаков того, что что-то не так. Быстрая бесконтактная проверка с помощью инфракрасного термометра поможет понять, что происходит с температурой системы, что позволит отключить ее, прежде чем это приведет к необратимому повреждению.

Инфракрасное излучение — это просто еще один тип излучения, которое существует в электромагнитном спектре. Мы этого не видим, но если бы вы поместили руку рядом с чем-то горячим, например, с плитой, вы бы почувствовали воздействие инфракрасного излучения. Все объекты излучают энергию в виде инфракрасного излучения. Большинство ручных термометров используют линзы для фокусировки света от одного объекта на термобатарею, которая поглощает инфракрасное излучение. Чем больше инфракрасной энергии поглощается, тем больше она нагревается и уровень тепла преобразуется в электрический сигнал, который в конечном итоге преобразуется в показание температуры.

Я работал на трассе на днях, и у меня был компонент, который был очень горячим. Я хотел узнать его температуру, но, поскольку у меня не было инфракрасного термометра под рукой, то было принято решение создать свой собственный. Устройство будет иметь специальный 3D-корпус, который можно распечатать и собрать прямо у себя дома.

Это простой проект, который можно использовать как отличное введение в сенсоры, 3D дизайн или печать, электронику и программирование.

Описание датчика движения ардуино

PIR-sensor конструктивно разделен на две половины

Это обусловлено тем, что для устройства сигнализации важно именно наличие движения в зоне чувствительности, а не сам уровень излучения. Поэтому части установлены таким способом, что при улавливании одной большего уровня излучения, на выход будет подаваться сигнал со значением high или low

Основными техническими характеристиками датчика движения Ардуино являются:

  • Зона обнаружения движущихся объектов составляет от 0 до 7 метров;
  • Диапазон угла слежения – 110°;
  • Напряжение питания – 4.5-6 В;
  • Рабочий ток – до 0.05 мА;
  • Температурный режим – от -20° до +50°С;
  • Регулируемое время задержки от 0.3 до 18 с.

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

Принцип работы датчика движения на Arduino следующий:

  • Когда устройство установлено в пустой комнате, доза излучения, получаемая каждым элементом постоянна, как и напряжение;
  • При появлении в комнате человека, он первым делом попадает в зону обозрения первого элемента, на котором появляется положительный электрический импульс;
  • Когда человек перемещается по комнате, вместе с ним перемещается и тепловое излучение, которое попадает уже на второй сенсор. Этот PIR-элемент генерирует уже отрицательный импульс;
  • Разнонаправленные импульсы регистрируются электронной схемой датчика, которая делает вывод, что в поле зрения Pir-sensor Arduino находится человек.

Достоинства и недостатки

Достоинствами ИК датчиков движения Ардуино принято считать:

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

Существуют и недостатки:

  • для работы требуется программа — скетч. Ее загружают в Ардуино, который не может работать сам по себе. Написать скетч самостоятельно может только программист;
  • собственная память процессора мала и не вмещает сложные программы;
  • несмотря на высокую чувствительность сенсоров, быстродействие устройств сравнительно мало;
  • работе устройства мешают помехи, дающие множество ложных срабатываний.

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

Подключение датчика пламени к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль датчика пламени;
  • беспаечная макетная плата;
  • светодиод и резистор;
  • провода «папа-мама», «папа-папа».


Схема подключения датчика пламени (flame sensor) к Arduino

На плате датчика есть подписи у контактов для подключения к Arduino Nano или Uno. Датчик питается от 5V и выдает цифровой или аналоговый сигнал, в зависимости от модификации. В примерах мы покажем, как подключить датчик огня к Ардуино, используя аналоговый и цифровой выход сенсора ky-026, чтобы включать/выключать светодиод от платы. Соберите схему, как на картинке и загрузите следующий скетч.

Скетч для цифрового датчика пламени (KY-026)

#define  flamePin  A1 // задаем имя для порта A1
#define  ledPin  13     // задаем имя для порта 13

int  flame;

void setup() {
   Serial.begin(9600);
   pinMode(flamePin, INPUT);
   pinMode(ledPin, OUTPUT);
}

void loop() {

   flame = digitalRead(flamePin);  // считываем данные с датчика

   Serial.print("Flame Sensor - ");  // выводим данные на монитор
   Serial.println(flame);

   if (flame == HIGH)
      digitalWrite(ledPin, HIGH);
   else
      digitalWrite(ledPin, LOW);
}
  1. для приема цифрового сигнала с датчика KY-026 используется порт A1, который можно поменять в скетче на любой порт общего назначения;
  2. данный датчик имеет на цифровом выходе сигнал «логическая единица» при появлении открытого огня на расстоянии до 1 метра от ИК приемника.

Скетч для аналогового датчика пламени (KY-026)

#define  flamePin  A1 // задаем имя для порта A1
#define  ledPin  13     // задаем имя для порта 13

int  flame;

void setup() {
   Serial.begin(9600);
   pinMode(flamePin, INPUT);
   pinMode(ledPin, OUTPUT);
   analogWrite(flamePin, LOW);
}

void loop() {

   flame = analogRead(flamePin);  // считываем данные с датчика

   Serial.print("Flame Sensor - ");  // выводим данные на монитор
   Serial.println(flame);

   if (flame >= 100)
      digitalWrite(ledPin, HIGH);
   if (flame < 100)
      digitalWrite(ledPin, LOW);
}

Варианты питания Ардуино Уно

Рабочее напряжение платы Ардуино Уно – 5 В. На плате установлен стабилизатор напряжения, поэтому на вход можно подавать питание с разных источников. Кроме этого, плату можно запитывать с USB – устройств. Источник питания выбирается автоматически.

  • Питание от внешнего адаптера, рекомендуемое напряжение от 7 до 12 В. Максимальное напряжение 20 В, но значение выше 12 В с высокой долей вероятности быстро выведет плату из строя. Напряжение менее 7 В может привести к нестабильной работе, т.к. на входном каскаде может запросто теряться 1-2 В. Для подключения питания может использоваться встроенный разъем DC 2.1 мм или напрямую вход VIN для подключения источника с помощью проводов.
  • Питание от USB-порта компьютера.
  • Подача 5 В напрямую на пин 5V. В этом случае обходится стороной входной стабилизатор и даже малейшее превышение напряжения может привести к поломке устройства.

Пины питания

  • 5V – на этот пин ардуино подает 5 В, его можно использовать для питания внешних устройств.
  • 3.3V – на этот пин от внутреннего стабилизатора подается напряжение 3.3 В
  • GND – вывод земли.
  • VIN – пин для подачи внешнего напряжения.
  • IREF – пин для информирования внешних устройств о рабочем напряжении платы.

Таблица. Типы данных Ардуино

Тип Занимаемый размер (байт) Минимальное значение Максимальное значение
boolean 1 false true
byte 1 255
char 1 -128 127
int, short 2 -32768 32767
unsigned int 2 65535
long 4 -2147483648 2147483647
unsigned long 4 4294967295
float, double 4 -3.4028235E+38 3.4028235E+38

char

Тип позволяет хранить 1 алфавитно-цифровой символ и занимает 1 байт, диапазон допустимых значений — от -128 до 127. В памяти хранится число, соответствующее символу в таблице ASCII, поэтому можно производить арифметические действия.

int

Пожалуй самый популярный тип для хранения целых чисел. Занимает 2 байта памяти и может хранить числа от -32768 до 32767.

long

Тип long служит для хранение больших целых чисел. Диапазон значений от -2147483648 до 2147483647, занимает в памяти переменная 4 байта.

unsigned long

Без знаковое целое число расширенного диапазона может хранить значения от 0 до 4294967295, занимает в памяти переменная 4 байта.

float

Тип данных с плавающей запятой. Используется для нецелых расчетов. Диапазон значений от -3.4028235E+38 до 3.4028235E+38, занимает переменная 4 байта.

Ультразвуковой датчик и светодиод Ардуино

Представленный скетч работает без библиотеки, поэтому в коде многовато строчек. Мы воспользуемся библиотекой для ультразвуковых дальномеров, что позволит нам значительно упростить скетч. Для начала установите библиотеку Ultrasonic (инструкция по установке библиотек в Arduino IDE) и загрузите следующую программу в Ардуино. Ссылка на скачивание архива со скетчами и библиотекой Ultrasonic.h — здесь.

Подключите дополнительно к плате RGB светодиод или несколько светодиодов, для создания мини проекта. Цвета светодиода будут переключаться, в зависимости от расстояния от датчика расстояния до предмета. Для управления светодиодами от УЗ датчика в программе используется условные операторы if. После сборки схемы, как на картинке выше, загрузите в микроконтроллер следующую программу.

Скетч с использованием библиотеки Ultrasonic.h

#include <Ultrasonic.h>    // подключаем библиотеку Ultrasonic
Ultrasonic ultrasonic(8,9); // назначаем выходы для Trig и Echo
 
void setup() {
  Serial.begin(9600);        // подключаем монитор порта
  pinMode (11, OUTPUT); // подключаем к пину светодиод
  pinMode (12, OUTPUT); // подключаем к пину светодиод
}

void loop () {
  int dist = ultrasonic.Ranging(CM);
  Serial.print(dist);     // выводим расстояние в сантиметрах
  Serial.println(" cm");

  // переключаем цвета светодиода
  if (dist < 50) {digitalWrite(12,0); digitalWrite(11,1);}
  if (dist < 50) {digitalWrite(12,1); digitalWrite(11,0);}

  delay(100);
}

PIR датчик

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

В PIR датчике присутствуют два важных элемента: пироэлектрический кристалл, который может обнаруживать тепловые сигнатуры от живого организма (человека/животных), и линзы Френеля, которые расширяют диапазон действия датчика. Также в PIR датчике доступно несколько вариантов опций, показанных на следующем рисунке.

Два потенциометра (оранжевый цвет) используются для управления чувствительностью и срабатывания по времени датчика. Основной контакт датчика (Dout) располагается между его контактами Vcc и Gnd. Датчик работает от напряжения 3.3 В, но также может работать и от напряжения 5 В. В левом верхнем углу датчик имеет переключатель режимов своей работы. Всего доступно два режима работы: “H” режим и “I” режим.

В “H” режиме на выходном контакте датчика Dout будет появляться напряжение высокого уровня (3.3V) когда в диапазоне действия датчика будет появляться человек. Спустя некоторое время, устанавливаемое с помощью потенциометра, напряжение на этом контакте становится низкого уровня. То есть в этом режиме напряжение высокого уровня на контакте Dout будет независимо от того присутствует ли еще человек в зоне действия датчика или покинул ее. Этот режим мы будем использовать в нашем проекте – в большинстве случаев он предпочтительней при работе с этим датчиком. Еще его называют режимом “с перезапуском”.

В режиме “I” напряжение высокого уровня (3.3V) на выходном контакте датчика Dout будет только тогда, когда человек находится в зоне действия датчика. Как только человек покинет ее, то спустя некоторое время, регулируемое с помощью потенциометра, на контакте Dout будет напряжение низкого уровня. То есть если вы будете ходить около датчика, то он будет постоянно срабатывать и выключаться. Этот режим еще называется режимом “без перезапуска”.

Примечание: местоположение контактов и потенциометров могут отличаться в зависимости от производителя PIR датчика.

Шаг 3. Инфракрасный датчик температуры GY-906

Я использовал датчик инфракрасного термометра GY-906, который является переходной платой для бесконтактного инфракрасного термометра MLX90614 от Melexis.

По теме: Инфракрасный датчик температуры MLX90614

Выносная плата очень недорогая и ее легко интегрировать, поставляется с подтягивающими резисторами 10К для интерфейса I2C.

Из Википедии: Подтягивающий резистор — резистор, включённый между проводником, по которому распространяется электрический сигнал, и питанием (pull-up resistor — подтягивающий вверх резистор), либо между проводником и землёй (pull-down resistor — подтягивающий вниз резистор).

Подтягивающий резистор нужен, чтобы гарантировать на логическом входе, с которым соединён проводник, высокий (в первом случае) либо низкий (во втором случае) уровень в случаях:

  • проводник не соединён с логическим выходом;
  • присоединённый логический выход находится в высокоимпедансном состоянии;
  • когда разомкнут ключевой элемент на присоединённом логическом выходе, который устроен как открытый вывод ключевого элемента.

GY-906 поставляется с заводской калибровкой в диапазоне от -40 до +125 градусов по Цельсию для температуры датчика и от -70 до 380 градусов по Цельсию для температуры объекта. Точность этого датчика составляет примерно 0,5 градуса Цельсия.

Недостатки

В силу отработанности аппаратной платформы, хорошо документированных схем, простоты разработки ПО и дешевизны PIR-датчики на Ардуино не обладают особыми недостатками в рамках возлагаемых на них задач. Возможности их применения ограничиваются естественными пределами ИК-технологии, периферийным оборудованием и заложенными в прошивку контроллера функциями.

Из недостатков отметим долгую инициализацию: многим образцам на переход в рабочий режим после первого включения требуется около минуты, на протяжении которой велик шанс ложных срабатываний. Кроме того, они не способны отличить человека от другого теплого объекта; для этого требуется иной класс устройств.

Возможные варианты проектов с применением датчика

Пир-датчики незаменимы в тех проектах, где главной функцией сигнализации является определение нахождения или отсутствия в пределах определенного рабочего пространства человека. Например, в таких местах или ситуациях, как:

  • Включение света в подъезде или перед входной дверью автоматически, при появлении  в нем человека;
  • Включение освещения в ванной комнате, туалете, коридоре;
  • Срабатывание сигнализации при появлении человека, как в помещении, так и на придомовой территории;
  • Автоматическое подключение камер слежения, которыми часто оснащаются охранные системы.

Пир-сенсоры просты в эксплуатации и не вызывают сложностей при подключении, имеют большую зону чувствительности и также могут быть с успехом интегрированы в любой из программных проектов на Ардуино. Но следует учитывать, что они не имеют технической возможности предоставить информацию о том, сколько объектов находится в зоне действия, и как близко они расположены к датчику, а также могут срабатывать на домашних питомцев.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий