Лодка на ардуино с ик управлением
Содержание:
- IR транскодер на Arduino
- Introduction: How to Use IR Remotes With Arduino
- Как собрать
- Подключаем Arduino к Интернету.
- Принцип работы универсального пульта
- Z- IR receiver. Модуль ИК приемника
- 1Описание и принцип действия ИК датчика препятствий
- Дистанционное управление роботом на базе Ардуино своими руками
- Настройка приложения для Android для создания инфракрасного передатчика
- Машинка на Ардуино Нано своими руками
- Устройство ИК приемника. Принцип работы
- ИК-приемник VS1838B и arduino
- Добавление опций в схему
- Комплектующие
- Step 10: Troubleshooting
IR транскодер на Arduino
Устройства с управлением от инфракрасного пульта тесно вошли в нашу жизнь. Иногда пульт от телевизора или древней аудиосистемы теряется, а купить новый за давностью лет уже невозможно. Заказать новый пульт не всегда возможно, изготовить клон тоже, но обладая донором или информацией о нём можно изготовить конвертер.
Такой транскодер будет принимать команды одного пульта и транслировать их в формат другого.
Для Arduino существует прекрасная библиотека IRemote которая делает построение разнообразных ИК систем управления очень простым.
Но при решении даже такой простой задачи как транскодер обязательно находятся проблемы которые интересно решать. Итак для начала нам необходим интегральный ИК приёмник типа TSOP312 или соответствующий шилд для Arduino. Не стоит забывать что ИК приёмников существует очень много и цоколёвка у них меняется случайным образом.
Собранная схема нужна нам для получения кодов команд от обеих пультов, к несчастью снять команды с устройства для которого пульт утерян несколько сложнее. Вы можете всё-таки найти пульт донор, воспользоваться универсальным пультом подобрав код (а зачем тогда вам тогда транскодер, раз уж пульт подошёл?) или попытавшись воспользоваться данными из интернет баз по IR кодам.
Самым простым для меня оказалось воспользоваться приложением под андроид, эмулирующий нужный мне пульт.
Для чтения данных используем пример IRrecvDumpV2 из поставки IRremote, если ваш пульт относится к распознаваемым библиотекой то сырой результат сканирования вам не понадобится, хотя например пульт от LG у меня ложно распознавался как Samsung и не заработал при попытке отправлять команды через sendLG.
Пример полученных данных под спойлером:Encoding: SAMSUNG Code: 34346897 (32 bits) Timing: +4450, -4350 + 600, — 500 + 600, — 500 + 600, -1600 + 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500 + 600, — 500 + 600, — 500 + 600, — 500 + 600, -1600 + 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500 + 600, — 500 + 600, — 500 + 600, -1600 + 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500 + 600, — 500 + 600, — 500 + 550, -1650 + 550, — 550 + 550, — 550 + 550, -1650 + 550, — 550 + 550, -1650 + 550, -1600 + 600, -1600 + 600 unsigned int rawData = {4450,4350, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 550,1650, 550,550, 550,550, 550,1650, 550,550, 550,1650, 550,1600, 600,1600, 600}; // SAMSUNG 34346897
unsigned int data = 0x34346897;
В случае если захват выдаёт сообщение “IR code too long. Edit IRremoteInt.h and increase RAWLEN” библиотеку придётся немного исправить — увеличив размер буфера для команд.
В ту же таблицу сохраняем коды для пульта донора в сыром виде. Подключаем к Arduino инфракрасный светодиод и пишем простейшую программу которая получает инфракрасный сигнал с заданным кодом и отправляет другой код через светодиод. Резистор на 82 выбран из соображений того что валялось под рукой.
Для встраиваемого устройства его можно смело увеличивать до 200 Ом а если передатчик должен быть дальнобойным то придётся дополнить его нехитрым транзисторным каскадом, иначе тока от Arduino обязательно не хватит.
При наличии кодов команд от обеих пультов код транскодера приобретает следующий видvoid loop() {
if (irrecv.decode(&results)) { switch(results.value){ case(0x845E5420):{ irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal), khz); }break; } } irrecv.resume(); irrecv.enableIRIn();
}
Запускаем скетч, заливаем в Arduino. Как ни странно после запуска одна команда проходит, после чего все последующие устройством игнорируются. Чтобы не связываться с отладкой добавляем в цикл мигалку на 13 пине и видим что после первой попытки отправить команду плата зависает.
Можно эмпирически добавить задержку в пол секунды (delay(500) )и всё будет работать, но зная что сырые данные у нас представляют собой отсчёты времени в миллисекундах то можно просто добавить функцию отправки с задержкой.
В модуле Irsend есть даже подходящая функция custom_delay_usec, которой я изначально воспользовался неправильно, забыв домножить величину задержки на множитель USECPERTICK из библиотеки (50 мс).
void sendDelayed(unsigned int array[]){ irsend.sendRaw(array, sizeof(array) / sizeof(array), khz); int array_size = sizeof(array) / sizeof(array); for(int i=0;i
Introduction: How to Use IR Remotes With Arduino
By HavocRCYoutubeFollow
More by the author:
About: 19 year old hobbyiest and future EE.
More About HavocRC »
I’m tired of these complicated tutorials on how to use certain things. I like simple, easy to understand, step by step instructions. My biggest problem was with IR and POV*. I’ve finally mastered how to control my project with any TV remote in a few minutes. In this i’ble I’m going to show you simple, step by step instructions on how to control just about anything with your IR remote. By the way this tutorial is new and updated and works! Last update [ 10/12/2015 ]
IMPORTANT NOTICE:
With the latest release of the Arduino IDE there is a conflicting library that renders this tutorial void. If you’d still like to use this tutorial delete the library called «RobotIRemote». This file will be in the Arduino program. Instructions for deleting this file is in step 3.
This library is for a specific robot that Arduino/venders sell. Unless you intend on buying that shield you can delete that folder and continue with this set of instructions. You can always download it again later!
Как собрать
-
Возьмите Troyka Shield LP и установите сверху на управляющую плату — Arduino или Iskra JS.
-
Закрепите на обратную сторону управляющей платы с помощью двустороннего скотча два сервопривода спереди — «передние колёса», и два сзади — «задние колёса». Закрепите круглые качельки на валах сервоприводов.
-
Подключите передние колёса «ServoFordL» и «ServoFordR» через 3-проводные шлейфы к и пину Troyka Shield LP соответственно, а задние колёса «ServoBackL» и «ServoBackR» — к и пину Troyka Shield LP соответственно.
-
Подключите ИК-приёмник к пину Troyka Shield LP. В итоге должна получиться схема.
-
Установите Power Shield сверху на Troyka Shield LP.
Подключаем Arduino к Интернету.
Общая суть всей затеи, это на контролере поднять web сервер, и при отправки GET запроса на Arduino, создать событие включение кондиционера. Для подключение Arduino к сети Интернет, используем модуль Enc28j60. Подключаем его к контроллеру по следующей схеме:
Arduino — Enc28j60
10 — CS
11 — SI (ST)
12 — SO
13 — SCK
5V — 5V
GND — GND
Хочу остановиться на такой проблеме: сам чип модуля Enc28j60 работает с напряжением 3.3V. Я использую контроллер Arduino Pro Mini 5V, соответственно и модуль Enc28j60 я использую с штатным стабилизатором AMS1117. То есть, по идеи, я могу сразу подавать питание к пину на Enc28j60 — 5V, и все будет нормально. Но при таком подключении, у меня модуль отказывался работать! Потеряв более полдня на танцы с бубном, решил попробовать подключить питание на пин 3.3v, с использованием еще одного стабилизатора AMS1117, и все заработало. Как оказалось, штатный стабилизатор вышел из строя.
Итак, после подключения модуля к контроллеру, нужно скачать еще одну библиотеку ETHER_28J60, и установить.
Создаем новый скетч, и вставляем следующий код
#include <enc28j60.h> #include <etherShield.h> #include <ETHER_28J60.h> #include <ip_arp_udp_tcp.h> #include <net.h> #include <IRremote.h> IRsend irsend; static uint8_t mac = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; static uint8_t ip = {192, 168, 4, 45}; static uint16_t port = 80; ETHER_28J60 e; void setup() { e.setup(mac, ip, port); } void loop() { int khz = 38; unsigned int irSignal[] = {4400,4350, 550,1550, 550,500, 550,1600, 550,1550, 550,500, 550,550, 550,1550, 550,500, 550,550, 550,1550, 550,500, 550,550, 550,1550, 550,1600, 550,500, 550,1550, 550,1600, 550,500, 550,500, 550,1600, 550,1550, 550,1600, 550,1550, 550,1600, 550,500, 550,1550, 550,1600, 550,500, 550,500, 550,550, 550,500, 550,500, 550,500, 550,1600, 550,500, 550,500, 550,1600, 550,1550, 550,550, 550,500, 550,1550, 550,550, 550,1550, 550,1550, 550,550, 550,500, 550,1550, 550,1600, 550}; char* params; if (params = e.serviceRequest()){ e.print("<H1>Web Remote</H1>"); e.print("<A HREF='?cmd=power'>Power</A></br>"); if (strcmp(params, "?cmd=power") == 0) irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal), khz); e.respond(); } }
Ссылки для скачивания библиотек:
— IRremote
— ETHER_28J60
Продолжение статьи: Создания универсального ИК пульта из Arduino. Работа над ошибками
Принцип работы универсального пульта
Многие из вас для управления телевизором вынуждены использовать 2 пульта ДУ: один для управления телевизором и один для управления телевизионной приставкой. В этом проекте мы объединим эти 2 пульта на основе смартфона чтобы с его помощью можно было управлять телевизором в полной мере, не задействуя дополнительные пульты.
Используя плату Arduino Uno достаточно просто в этом универсальном пульте ДУ реализовать процессы кодирования и декодирования нужных сигналов. Для удобства изготовления подобного устройства целесообразно сконструировать самодельный шилд (плату расширения) для платы Arduino как показано на следующем рисунке. Шилд будет состоять из приемника (ресивера) TSOP IR 1838T, инфракрасного светодиода и Bluetooth модуля (HC-05).
Вы можете либо изготовить приведенный шилд, либо просто соединить эти компоненты с платой Arduino Uno как показано на приведенной ниже схеме устройства.
Большинство инфракрасных устройств работают на частоте 38 кГц, поэтому мы и выбрали для нашего проекта 1838T. При этом рассматривая принципы работы устройств с инфракрасной связью следует помнить о том, что в них нет логических единиц и нулей в прямом понимании этих понятий. И единица, и ноль в этих устройствах кодируются набором специальных импульсов как показано на следующем рисунке. Сущность этих процессов кодирования описана в NEC протоколе.
Принцип работы проектируемого нами универсального пульта ДУ будет заключаться в следующем. Сначала смартфон с помощью приложения для Android передает сигнал плате Arduino при помощи технологии Bluetooth, далее Arduino принимает его при помощи приемника TSOP-IR (1838T) и анализирует его. Затем Arduino передает команду инфракрасному светодиоду чтобы он мигал по определенному алгоритму (шаблону), зависящему от того, какая кнопка нажата в приложении для Android в смартфоне. Этот сигнал принимается телевизором или телевизионной приставкой, которые выполняют закодированную в сигнале команду.
Но перед осуществлением этого проекта мы должны декодировать сигналы с пультов ДУ, которые мы хотим заменить. Этот процесс рассмотрен далее в статье.
Z- IR receiver. Модуль ИК приемника
Опубликовано 05.05.2014 8:44:00
Модуль ИК Приемника в связке и ИК пультом дистанционного управления позволит легко реализовать дистанционное управление платой Arduino.
Он представляет из себя не что иное, как ИК приемник VS1838B с установленной на плате рекомендуемой производителем обвязкой.
Для работы с данным модулем “из коробки” необходим ПДУ с частотой 38 кГц.
Плюсом данной платы является цанговый разъем, позволяющий без применения пайки заменить ИК приемник на другой, работающий на частоте, необходимой для вашего проекта.
• Напряжение питания: 2.7 – 5.5В
• Частота модуляции: 38кГц
• Диапазон температур: – 20 … + 80°C
• Интерфейс: Цифровой
Подключение к Arduino
Модуль оборудован трехпиновым разъемом стандарта 2.54мм
: подключается к выводу GND
подключается к выводу +5V
: подключается к цифровому выводу ( в примере D2 )
Пример работы в среде Arduino
Для работы с данным модулем необходимо установить библиотеку IRRemote
Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.
Считывание показаний кнопок ПДУ
Для считывания показаний пульта заливаем нижеприведенный скетч. Он будет выводить в порт кодировки нажатых кнопок.
В качестве примера будем использовать пульт, как на картинке, т.к. пульт такого типа идет в наборе ИК пульт + ИК модуль приемник
Пример программного кода:
// Тестировалось на Arduino IDE 1.0.3
#include
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта
decode_results results; //Переменная, хранящая результат void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Начинаем прием
} void loop() {
if (irrecv.decode(&results)) //При получении сигнала…
{
Serial.println(results.value); //…выводим его значение в последовательный порт
irrecv.resume(); // Получаем следующее значение
}
}
В мониторе порта должны увидеть слудущее:
При почти секундном удержании каждой кнопки, мы получаем около 10 кодов. Первый из них и является кодом кнопки. А после него начинает идти стандартный код, который сообщает о залипании кнопки.
Управление платой Arduino c ПДУ
Заставим светодиод на плате Arduino (D13) загораться при получении кодировки первой кнопки и выключаться при получении кодировки второй.
Пример программного кода:
// Тестировалось на Arduino IDE 1.0.3
#include int RECV_PIN = 2;
int LED = 13;
IRrecv irrecv(RECV_PIN);
decode_results results; void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приемника
pinMode(LED, OUTPUT);
} void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
if (results.value == 16769565) // При получении кодировки 1
{
digitalWrite(LED, HIGH); // Включаем светодиод
}
if (results.value == 16761405) // При получении кодировки 2
{
digitalWrite(LED, LOW); // Выключаем светодиод
}
irrecv.resume(); // Получаем следующее значение
}
}
Купить в России Z- Модуль ИК приемника
В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.
1Описание и принцип действия ИК датчика препятствий
Инфракрасное (ИК) или infrared (IR) излучение – это невидимое человеческим глазом электромагнитное излучение в диапазоне длин волн от 0,7 до 2000 мкм. Вокруг нас существуют огромное количество объектов, которые излучают в данном диапазоне. Его иногда называют «тепловое излучение», т.к. все тёплые предметы генерируют ИК излучение.
Длины волн разных типов электромагнитного излучения
Модули на основе ИК излучения используются, в основном, как детекторы препятствий для различного рода электронных устройств, начиная от роботов и заканчивая «умным домом». Они позволяют обнаруживать препятствия на расстоянии от нескольких сантиметров до десятков сантиметров. Расстояние до препятствия при этом определить с помощью ИК-сенсора невозможно.
Если оснастить, для примера, своего робота несколькими такими ИК модулями, можно определять направление приближения препятствия и менять траекторию движения робота в нужном направлении.
Модуль сенсора обычно имеет излучатель (светодиод) и детектор (фотодиод) в инфракрасном диапазоне. Инфракрасный светодиод излучает в пространство ИК излучение. Приёмник улавливает отражённое от препятствий излучение и при определённой интенсивности отражённого излучения происходит срабатывание. Чтобы защититься от видимого излучения, фотодиод имеет светофильтр (он выглядит почти чёрным), который пропускает только волны в инфракрасном диапазоне. Разные поверхности по-разному отражают ИК излучение, из-за чего дистанция срабатывания для разных препятствий будет отличаться. Выглядеть ИК модуль может, например, вот так:
Модуль с ИК излучателем и ИК приёмником
Когда перед сенсором нет препятствия, на выходе OUT модуля напряжение логической единицы. Когда сенсор детектирует отражённое от препятствия ИК излучение, на выходе модуля напряжение становится равным нулю, и загорается зелёный светодиод модуля.
Помимо инфракрасного свето- и фотодиода важная часть модуля – это компаратор LM393 (скачать техническое описание на LM393 можно в конце статьи). С помощью компаратора сенсор сравнивает интенсивность отражённого излучения с некоторым заданным порогом и устанавливает «1» или «0» на выходе. Потенциометр позволяет задать порог срабатывания ИК датчика (и, соответственно, дистанцию до препятствия).
Дистанционное управление роботом на базе Ардуино своими руками
Перевёл alexlevchenko для mozgochiny.ru
Сегодня никого не удивишь радиоуправляемыми самоделками.
Но согласитесь, как-то «по старинке» нажимать на клавиши управления… Гораздо интереснее управлять поделками с помощью движений кисти, не так ли? В данной статье показан пример того, как можно организовать дистанционное управление при помощи платы Arduino и нескольких датчиков изгиба. В качестве подопытного будет выступать PHIRO Pro
Шаг 2: Загружаем стандарт Firmata на Arduino
Необходимо загрузить стандарт firmata на плату Ардуино, для того, что соединить её с Pocket Code. В данном проекте используем Arduino UNO, однако может быть использована любая плата Arduino.
- Подключаем плату Arduino к компьютеру/ноутбуку.
- В Arduino ID выбираем COM Port. Tools -> Serial Port -> Corresponding COM Port
- Далее выбираем тип платы. Tools -> Board -> Your Arduino Board
- Затем выбираем стандарт Firmata. Examples -> Firmata -> Standard Firmata
- Нажимаем «Upload» и загружаем код на плату.
Шаг 3: Соединяем датчики с платой и крепим их на перчатку
Датчики изгиба — это резистивные устройства, что могут использоваться для фиксации сгибания или наклона. Ниже приводится схема подключения датчиков на Arduino. Для того, чтобы надежно закрепить датчики на перчатке использовал согнутые скобки для степлера, однако вы можете при желании использовать пластиковые стяжки.
Шаг 4: Подсоединяем Bluetooth модуль HC-05 к Arduino
Соединяем выводы bluetooth модуля и платы Arduino следующим образом:
- HC05 Tx — Arduino Rx
- HC05 Rx — Arduino Tx
- Vcc — 5V
- GND — GND
Шаг 5: Соединяем Arduino с батареей
Используем 9В батарею для питания платы Arduino с Bluetooth модулем. Такой тип компоновки объясняется возможностью легкого монтажа на запястье/браслете. Чем компактнее тем лучше.
Шаг 6: Программа Pocket Code
Ниже представлены примеры использования программы. Прежде всего убедитесь, что PHIRO Pro находится в Mode 3 (Bluetooth Mode). Нажмите на кнопку Mode на PHIRO не раньше, чем синий светодиод, что расположен рядом с дисплеем на верху, включится.
Для программы, в общем есть 7 режимов.
- Указательный палец выпрямлен. Фары светятся красным. Программа показывает STOP.
- Указательный и средний палец выпрямлены. Фары светятся зеленым. Программа показывает STOP.
- Указательный, средний и безымянный пальцы выпрямлены. Фары светятся синим. Программа показывает STOP.
- Ладонь открыта. PHIRO движется вперёд. Фары светятся белым. Программа показывает FORWARD (вперёд).
- Ладонь сжата в кулак. PHIRO останавливается. Фары выключены. Программа показывает STOP.
- Ладонь сжата в кулак и наклонена влево (телефон наклонён влево). PHIRO поворачивает налево. Левая фара светится желтым. Программа показывает LEFT (влево).
- Ладонь сжата в кулак и наклонена вправо (телефон наклонён вправо). PHIRO поворачивает вправо. Правая фара светится желтым. Программа показывает RIGHT (право).
Шаг 7: Проводим финальный монтаж
Для крепления телефона на руке, можете воспользоваться наручной повязкой или сделать так, как сделал я.
Купил дешевую крышку под мой мобильник, прорезал отверстия и протянул ленту липучку. Наручная повязка с телефоном готова.
Вот и всё!) Спасибо за внимание)
(A-z Source)
Настройка приложения для Android для создания инфракрасного передатчика
В качестве приложения Android для нашего универсального инфракрасного пульта мы будем использовать приложение MIT’s APP inventor-2, но вы можете использовать любое другое подобное приложение. А если вы еще и профессионал в программировании на Android, то вы можете достигнуть гораздо лучших результатов чем рассмотренные в нашем проекте. Все, что нам понадобится, это создать несколько кнопок в приложении.
При создании кнопок в этом приложении старайтесь давать кнопкам осмысленные названия, чтобы они по смыслу соответствовали кнопкам пультов ДУ, которые вы будете замещать своим пультом. Также следите за тем текстом (набором символов), который будет передаваться при нажатии каждой кнопки. Также удостоверьтесь в тем, что вы обеспечиваете правильный адрес для своего модуля Bluetooth HC-05. На следующем рисунке показан примерный вид экрана приложения, который вы должны создать.
Вам целесообразно выполнить следующую последовательность шагов.
Шаг 2. После того как вы залогинитесь в ai2.appinventor.mit.edu с помощью своего аккаунта Google, вас перебросит на рабочую веб-страницу AI2, которая будет выглядеть примерно следующим образом:
Начните новый проект при помощи нажатия вкладки “Projects” вверху экрана и выберете там “Start New Project”. После этого вы увидите пустой экран, на котором вы можете разместить нужные вам кнопки и текст.
Для использования пакета с кнопками выберите вкладку “Button” в левом крае экрана под секцией “User Interface”. Просто перетащите любой пакет из меню слева и поместите его на рабочий экран. Аналогично текст можно поместить на рабочий экран с помощью пакета “Label”.
Шаг 3. После того как вы разместите на экране все необходимые вам кнопки и текстовые метки (labels) можно заняться кодом для этого приложения. Но перед этим необходимо выбрать пакет Bluetooth поскольку именно с помощью этой технологии вы будете связываться с Arduino.
Этот пакет не показывается сразу на экране потому что он расположен под “Non-visible Components” – это компоненты, которые не отображаются в графическом интерфейсе пользователя.
Шаг 4. На этом шаге вам предстоит формирование программного кода, в котором вы должны определить функции для всех компонентов, которые вы выбрали, и каким образом вы будете работать с ними.
Слева экрана вы увидите все пакеты, которые вы выбрали в графической секции (GUI section). Картинки сверху показывают все компоненты, которые содержатся в каждом использованном вами пакете. Также учтите, что адрес Bluetooth модуля будет нужен в текстовом формате.
Шаг 5. После того как вы завершите конфигурирование вашего приложения, нажмите на вкладку “Build” как показано выше и выберите вторую опцию. Это позволит скачать созданное вами приложение на компьютере в “.apk” формате. Затем просто передайте этот .apk файл на ваш телефон с Android и установите приложение там.
Машинка на Ардуино Нано своими руками
Программа для машинки на Ардуино Нано имеет два режима работы — прямое управление от Android смартфона или ик-пульта, а также автономный режим: машинка ездит сама по заданному алгоритму. Для индикации режима работы используются светодиоды. Питание машинки производится от аккумулятора Крона. Можно использовать USB шнур для питания, но моторы будут вращаться медленнее.
Так как вся схема должна поместиться внутри компьютерной мышки, то для управления моторчиками используются транзисторы вместо Motor Shield Arduino. Это позволяет сэкономить место, но минус данного решения в том, что у машинки не будет заднего хода (моторы могут вращаться только в одну сторону). А сами моторчики имеют редукторы для увеличения скорости оборотов и мощности вращения колес.
Устройство ИК приемника. Принцип работы
Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники. Но, несмотря на это, постепенно Bluetooth модуль набирает все большую популярность.
Принцип работы IR ресивера. Обработка сигнала от пульта ДУ
ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.
Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.
ИК-приемник VS1838B и arduino
Управлять своими устройствами можно очень многими способами, один из них – это с помощью ИК-сигналов, про этот метод постараюсь расписать в сегодняшней статье. Тут поможет любой ИК-пульт – от телевизора, музыкального центра или любого другого домашнего устройства, которое есть у каждого.
Пульт дистанционного управления являться передатчиком информации, а в качестве приемника можно использовать инфракрасный датчик VS1838B, который продается совсем за смешные деньги.
Приемник работает на частоте 38 кГц, данная частота является самой распространенной среди ИК-пультов, используемых в домашней технике.
Подключение ИК-датчика VS1838B к arduino
Для считывания ИК-сигнала и преобразования его к человеческому виду – числу, можно воспользоваться библиотекой IRremote, с ее помощью весь скетч займет всего несколько строк.Ссылка на библиотеку: IRremote .
Но прежде, чем начать писать программу, необходимо разобраться с подключением приемника VS1838B. Датчик имеет всего три ноги, две из них – это питание, и третья передает полученный сигнал.
Ниже приведена фотография VS1838B с подписанными ножками:
Ногу, которая отвечает за передачу данных, будем подключать к пину 11 arduino. Так же для наглядности подключим к 13 пину светодиод, который будет включаться и выключаться при нажатии на кнопки на ИК-пульте.
Код скетча для ИК-приемника VS1838B
Каждая кнопка ИК-пульта имеет уникальный код, который мы будем получать с помощью датчика VS1838B. В первую очередь запишем скетч, который выводит в консоль коды кнопок, после чего уже дополнить программу условиями на конкретные кнопки.Ниже приведет скетч для работы с ИК-приемником VS1838B и arduino, скачать его можно тут: скачать.
#include // подключаем библиотеку int ledPin = 13; // светодиод int reciverPin = 11; // пин, к котрому подключен ИК-приемник IRrecv irrecv(reciverPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // запуск приемника pinMode(ledPin, OUTPUT); } void loop() { // постоянно считываем данные с приемника if (irrecv.decode(&results)) { // выводим в консольку, что получили, число в 16-ричном виде Serial.println(results.value, HEX); // проверяем сигналы – и если это те, что нам нужны, то вкл или выкл светодиод if(results.value == 0x926DC837) digitalWrite(13, HIGH); if(results.value == 0x926D48B7) digitalWrite(13, LOW); irrecv.resume(); // готовы принимать следующий сигнал } }
Пример работы ИК-датчика VS1838B и arduino можно посмотреть ниже на видео.
Добавление опций в схему
Вы можете добавить больше вещей в схему, найдя коды различных кнопок ИК-пульта дистанционного управления и написав коды для их вставки и их работы. Например, ниже приведен код, который мы бы добавили к коду, чтобы светодиоды светились по определенному шаблону.
if (IRCode == 16712445){ digitalWrite(ledb,HIGH); delay(100); digitalWrite(ledb,LOW); digitalWrite(ledg,HIGH); delay(100); digitalWrite(ledg,LOW); digitalWrite(ledr,HIGH); delay(100); digitalWrite(ledr,LOW); digitalWrite(ledy,HIGH); delay(100); digitalWrite(ledy,LOW); digitalWrite(ledw,HIGH); delay(100); digitalWrite(ledw,LOW); }
Комплектующие
Ниже перечислим все комплектующие для нашего урока.
Arduino Uno R3
Arduino Uno R3 — это плата, которая поможет вам обработать код и заставить вашу схему работать. Вы также можете купить данную плату в любом удобном магазине.
Макетная плата
Макетная плата поможет вам собрать схему без необходимости паять детали.
Кабель для Arduino
Этот кабель поможет вам подключить Ардуино к вашему ноутбуку.
ИК-приемник
ИК-приемник поможет вам получить ИК-сигнал и отправить информацию в Arduino.
ИК-пуль дистанционного управления
ИК-пульт отправляет ИК-сигнал на ИК-приемник.
Перемычки «мама-мама»
Перемычки помогут соединить различные комплектующие на макетной плате.
Светодиоды
Светодиод включается и светится, когда на него подается электричество.
Резисторы 1 КОм и 220 Ом
Резисторы помогают уменьшить количество тока, протекающего в цепи. Они нужны для того, чтобы обезопасить многие детали от поломки.
Step 10: Troubleshooting
Sometimes things don’t go as planned so I’ve added a this step to help those that can’t get their project to work. I want all reader to be able to experience the awesomeness of this!!! 😀
If the value you receive for results.value is letters and numbers like this ‘FF01XE’ then you must put a 0x in front of that code to get it work work, like this: 0xFF01XE. So you project will read:
if (results.value == 0xFF01XE) { feed the dog(); }
«My project isn’t working!»
- READ THE IMPORTANT NOTICE IN FIRST STEP OF THIS I’BLE
- Rewire the sensor. Make sure it is wired properly. You may need to look online for your sensor correct pinout. Every sensor will not be the same as mine. Google the datasheet for your specific sensor.
- Make sure your remote is working properly. You can test this by pointing the remote at a camera and you should be able to see a dim blue/purple light flashing. Also try a second remote.
- Make sure the code works is the way I uploaded it. If you changed it you may not have the correct code.
- Retest all connections.
Well I hope these steps help if you still have problems after going through this list PM me or comment.