Блог

● Проект 25: ИК-фотоприемник и ИК-пульт. Обрабатываем команды от пульта

Опубликовано: 23.04.2018
В этом эксперименте мы организуем беспроводную ИК-связь, которая нам позволит отправлять на плату Arduino команды с помощью любого ИК-пульта.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
• микросхема TSOP 31236;
• конденсатор 10 мкФ 25 В;
резистор 100 Ом;
светодиод – 8 шт.;
резистор 220 Ом – 8 шт.;
любой ИК-пульт;
провода папа-папа.

Устройства инфракрасного (ИК) диапазона волн часто применяются в робототехнике. Наличие дешевых приемников диапазона 36–40 кГц, а также наличие большого количества пультов от бытовых приборов позволяет организовать простое и понятное беспроводное управление. В качестве приемника будем использовать микросхему TSOP31236. В одном корпусе она объединяет фотодиод, предусилитель и формирователь. На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Несущая частота 36 кГц. В качестве передатчика – любой пульт для управления бытовой техникой. Для обеспечения надежного приема и гарантированной защиты от помех при инфракрасной передаче используются модуляция сигнала и кодирование. К сожалению, нет единого и универсального протокола для ИК-пультов дистанционного управления, хотя среди всего многообразия есть наиболее распространенные. Наиболее распространенными протоколами для ИК-пультов дистанционного управления являются следующие:

• RC5;
• NEC;
• JVC;
• Sony.

Можно узнать протокол вашего пульта и написать скетч для получения кодов, отправляемых с пульта. К счастью, уже написана универсальная библиотека для приема и обработки кодов с любого пульта – Irremote. Ее мы и будем использовать при написании скетча. В нашем эксперименте мы будем с ИК-пульта зажигать светодиоды, подключенные к плате Arduino. Схема соединений показана на рис. 25.1.

Рис. 25.1. Схема соединений ИК-управления

Выход ИК-приемника подсоединен к выводу 1 платы Arduino. Без фильтра питания будет работать нестабильно, с пропуском посылок, поэтому ставим RC-фильтр.

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

#include <IRremote.h> // подключение библиотеки
int RECV_PIN = 1; // контакт подключения ИК-приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // включить приемник
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume(); // получить следующее значение
}
}

Порядок подключения:

1. Подключаем ИК-приемник и светодиоды к плате Arduino по схеме на рис. 25.1.
2. Загружаем в плату Arduino скетч из листинга 25.1.
3. Открываем монитор последовательного порта Arduino IDE и смотрим коды, приходящие при нажатии кнопок на ИК-пульте. Запоминаем коды, приходящие при нажатии кнопок 2–9 на ИК-пульте. Пишем скетч, переключающий состояние светодиодов на контактах D2–D9, при получении определенного кода. Содержимое скетча показано в листинге 25.2. Значение констант K2–K9 (кодов для клавиш 2–9) у вас будет другим.

Листинг 25.2

// коды клавиш ИК-пульта
#define K2 1936
#define K3 3984
#define K4 144
#define K5 2192
#define K6 3472
#define K7 1424
#define K8 3216
#define K9 1168
#include <IRremote.h> // подключение библиотеки
int RECV_PIN = 1; // контакт подключения ИК-приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
// значения на D2 – D9 Arduino
int val_pins[]={0,0,0,0,0,0,0,0};
int res=0;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // включить приемник
for(int i=2;i<10;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
}
void loop()
{
if (irrecv.decode(&results))
{
switch(results.value)
{
case K2: res=2; break;
case K3: res=3; break;
case K4: res=4; break;
case K5: res=5; break;
case K6: res=6; break;
case K7: res=7; break;
case K8: res=8; break;
case K9: res=9; break;
default: res=0; break;
}
if(res>0)
{
pins[res-2]=1- pins[res-2];
// переключить светодиод
digitalWrite(res, pins[res-2]);
}
irrecv.resume(); // получить следующее значение
}
}


Загружаем скетч 25.2 на плату Arduino и нажатием на пульте кнопок 2–9 переключаем состояние светодиодов, подключенных к выводам 2–9 платы Arduino (см. рис. 25.1).

Листинги программ скачать




 
Читать далее

● Проект 24: 3-осевой гироскоп + акселерометр на примере GY-521

Опубликовано: 23.04.2018
В этом эксперименте мы познакомимся с акселерометром и гироскопом и будем с помощью Arduino получать показания с этих датчиков.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
модуль GY-521;
провода папа-папа.

Модуль GY-521 на микросхеме MPU6050 содержит гироскоп, акселерометр и температурный сенсор. На плате модуля GY-521 расположена необходимая обвязка MPU6050, в том числе подтягивающие резисторы, стабилизатор напряжения на 3,3 В с малым падением напряжения с фильтрующими конденсаторами. Обмен с микроконтроллером осуществляется по шине I2C.

Гироскоп представляет собой устройство, реагирующее на изменение углов ориентации контролируемого тела. Акселерометр – это устройство, которое измеряет проекцию кажущегося ускорения, то есть разницы между истинным ускорением объекта и гравитационным ускорением.
Схема соединений платы GY-521 к Arduino показана на рис. 24.1.

Рис. 24.1. Схема соединения GY-521 к Arduino

Код простого скетча для считывания значений гироскопа и акселерометра с датчика MPU6050 показан в листинге 24.1.

// подключение библиотек
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
void setup()
{
  
}
Wire.begin();
Serial.begin(38400);
// инициализация
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
delay(100);
}
void loop()
{
// чтение значений гироскопа и акселерометра
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// вывод значений в монитор
Serial.print("a/g:\t");
Serial.print(ax); Serial.print("\t");
Serial.print(ay); Serial.print("\t");
Serial.print(az); Serial.print("\t");
Serial.print(gx); Serial.print("\t");
Serial.print(gy); Serial.print("\t");
Serial.println(gz);
}

Порядок подключения:

1. Подключаем плату GY521 к плате Arduino по схеме на рис. 24.1.
2. Загружаем в плату Arduino скетч из листинга 24.1.
3. Открываем монитор последовательного порта Arduino IDE и смотрим вывод данных гироскопа и акселерометра (см. рис. 24.2).
4. При поворотах датчика данные изменяются.

Рис. 24.2. Вывод данных гироскопа и акселерометра в монитор Arduino IDE

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

Листинги программ скачать

 
Читать далее

● Проект 23: Ультразвуковой датчик расстояния HC-SR04. Принцип работы, подключение, пример

Опубликовано: 23.04.2018
В этом эксперименте мы рассмотрим ультразвуковой датчик для измерения расстояния и создадим проект вывода показаний датчика на экран ЖКИ WH1602.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
ультразвуковой датчик расстояния HC-SR04;
пьезоизлучатель;
резистор 100 Ом;
сервопривод;
провода папа-папа.
внешний блок питания +5 В.

Ультразвуковой дальномер HC-SR04 (рис. 23.1) – это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние. Кроме самих приемника и передатчика, на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и удобной.



Характеристики ультразвукового дальномера HC-SR04:

• измеряемый диапазон – от 2 до 500 см;
• точность – 0,3 см;
• угол обзора – < 15°;
• напряжение питания – 5 В.

Датчик имеет 4 вывода стандарта 2,54 мм:

• VCC – питание +5 В;
• Trig (T) – вывод входного сигнала;
• Echo (R) – вывод выходного сигнала;
• GND – земля.

Последовательность действий для получения данных такова:

• подаем импульс продолжительностью 10 мкс на вывод Trig;
• внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается вперед через излучатель T;
• дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R, в результате получаем выходной сигнал на выводе Echo;
• непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:

–– ширина импульса (мкс) / 58 = дистанция (см);
–– ширина импульса (мкс) / 148 = дистанция (дюйм).

В нашем эксперименте мы создадим звуковую сигнализацию, которая будет включаться при приближении к плате Arduino на расстояние меньше 1 м. Датчик размещен на кронштейне вращающейся сервы и контролирует пространство с углом обзора 180°. Если датчик обнаруживает объект в радиусе 1 м, подается звуковой сигнал на пьзоизлучатель, вращение сервы прекращается. Схема соединения элементов представлена на рис. 23.2.

Рис. 23.2. Схема соединения элементов для звуковой сигнализации

При написании скетча будем использовать библиотеку Servo для работы с сервоприводом и библиотеку Ultrasonic.
Для работы Arduino с датчиком HC-SR04 имеется готовая библиотека – Ultrasonic.
Конструктор Ultrasonic принимает два параметра: номера пинов, к которым подключены выводы Trig и Echo, соответственно:

Ultrasonic ultrasonic(12,13);

Содержимое скетча показано в листинге 23.1.

#include <Servo.h> // подключение библиотеки Servo
Servo servo1;
const int pinServo=8; // пин для подключения сервопривода
int pos = 0; // переменная для хранения позиции сервопривода
int dir =1; // направление перемещения сервопривода
// Выводы для подключения HC-SR04 Trig - 12, Echo - 13
Ultrasonic ultrasonic(12, 13);
float dist_cm; // переменная для дистанции, см
// подключить динамик к pin 9
int speakerPin = 9;
void setup()
{
// подключить переменную servo1 к выводу pinServo1
servo1.attach(pinServo1);
pinMode(speakerPin, OUTPUT);
}
void loop()
{
servo1.write(pos); // поворот сервоприводов на полученный угол
delay(15); // пауза для ожидания поворота сервоприводов
float dist_cm = ultrasonic.Ranging(CM);
if(dist_cm<100 && dist_cm>20)
tone(speakerPin,); // включить пьезозуммер
else
{
tone(speakerPin,0); // отключить пьезозуммер
pos=pos+dir; // изменение переменной положения сервопривода
if(pos==0 || pos==180)
dir=dir*(-1); // изменение направления движения
}
}

Порядок подключения:

1. Закрепляем датчик расстояния HC-SR04 на сервоприводе.
2. Подключаем датчик HC-SR04, пьезозуммер и сервопривод к плате Arduino по схеме на рис. 23.2.
3. Загружаем в плату Arduino скетч из листинга 23.1.
4. Наблюдаем за циклическим перемещением сервопривода, при попадании объекта в поле зрения датчика HC-SR04 пьезозуммер издает сигнал, сервопривод останавливается, при исчезновении объекта из поля зрения датчика сервопривод возобновляет движение.

Листинги программ скачать







 
Читать далее

● Проект 22: Датчики газов. Принцип работы, пример работы

Опубликовано: 23.04.2018
В этом эксперименте мы рассмотрим ультразвуковой датчик для измерения расстояния и создадим проект вывода показаний датчика на экран ЖКИ WH1602.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
датчик газа MQ-4;
• газовая зажигалка;
светодиод;
резистор 220 Ом;
провода папа-папа.

Серия MQ-сенсоров для Ардуино, построены на базе мини-нагревателя внутри и используют электрохимический сенсор. Они чувствительны для определенных диапазонов газов и используются в помещениях при комнатной температуре. Вот некоторые из них:

• MQ-3 – сенсор паров алкоголя;
MQ-4 – сенсор для обнаружения метана, пропана;
MQ-5 и MQ-6 – предназначены для обнаружения пропана,
бутана;
MQ-7 – чувствителен к угарному газу;
• MQ-8 – специализируется по водороду H2.

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

Рис. 22.1. Схема подключения датчика MQ4

Напишем скетч, считывающий показания с датчика MQ4 и выводящий показания в монитор последовательного порта. Если аналоговое значение с датчика превысит 750 (опасный уровень), будем зажигать светодиод, подключенный к цифровому выводу 8. Содер- жимое скетча показано в листинге 22.1.

// контакт подключения аналогового вывода MQ4
const int analogInPin = A1;
const int ledPin = 8; // контакт подключения светодиода
int sensorValue = 0; // переменная для хранения значения датчика
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop()
{
sensorValue = analogRead(analogInPin); // получить значение
if (sensorValue >= 750) // превышение уровня
digitalWrite(ledPin, HIGH); // зажечь светодиод превышения
else
digitalWrite(ledPin, LOW); // потушить светодиод превышения
// вывести значение в последовательный порт
Serial.print("sensor = " );
Serial.println(sensorValue); // пауза перед следующим измерением
delay(1000);
}

Порядок подключения:

1. Подключаем датчик MQ4 к плате Arduino по схеме на рис. 22.1.
2. Загружаем в плату Arduino скетч из листинга 22.1.
3. Открываем монитор последовательного порта Arduino IDE.
4. После подачи питания датчику необходимо время, чтобы выйти на рабочий режим, примерно 10–15 секунд. Это время нужно, чтобы нагреватель внутри датчика поднял температуру до необходимого значения.
5. Подносим газовую зажигалку к датчику и открываем газ, наблюдаем изменение показаний от датчика MQ4 в мониторе последовательного порта Arduino IDE.

Листинги программ скачать
Читать далее

Главное меню

Каталог

Полезные ссылки

Цена
от
до