Урок 5 – Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote
При создании проектов на Arduino. Часто возникает вопрос, с помощью чего управлять проектом. И желательно на расстоянии. Кнопки уже не модно.
Самый просто и доступный способ это управление с помощью пульта дистанционного управления и IR приемника . Реализовать можно различные проекты, например вытяжку с ик управлением.
Для урока я буду использовать вот такой набор и Arduino UNO.
Купить пульт с IR приемником всего за 100 руб. можно тут.
Приемники могут быть распаянные как в моем случае.
И вот такого плана.
Различий в подключении нет. Первый просто удобнее для тестирования и проверки работы. При подключении самое главное не перепутать ноги и подключить правильно. В противном случае приемник может сгореть.
Подключаем к Arduino UNO вот по такой схеме. К другим Ардуинкам подключается аналогично.
Для работы нам понадобиться библиотека IRremote. Скачать ее можно тут.
С библиотекой устанавливается ряд примеров. Нам понадобиться IrrecvDemo.
IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); // In case the interrupt driver crashes on setup, give a clue // to the user what's going on. Serial.println(“Enabling IRin”); irrecv.enableIRIn(); // Start the receiver Serial.println(“Enabled IRin”); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } delay(100); }
После того как скетч загружен и IR приемник подключен можно проверить какой код соответствует той или иной кнопке пульта ДУ. Поднажимайте на кнопки и в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее.
;FF18E7 FFFFFFFF FFA857 FF02FD FF18E7 FF38C7 FF4AB5 FF5AA5 FF10EF FF5AA5 FFFFFFFF FF10EF FF5AA5
У вас возник наверное вопрос что за повторяющая команда FFFFFFFF. Это команда выводиться когда вы долго удерживаете кнопку на пульте и на Ардуино приходить одинаковая команда.
В этом нет ни чего страшного, а иногда это даже полезно. На основе данной команды я сделал управление машинкой с помощью пульта ДУ. При этом машинка едет только тогда, когда нажата кнопка пульта.
Отпускаем и машина перестает ехать и поворачивать.
Само простое, чем можно управлять это включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления и инфракрасного приемника.
Схема подключения как и в примере выше. Коды кнопок моего пульта:
//FF10EF — стрелочка вправо //FF5AA5 — стрелочка влево
У вашего пульта команды будут другие. Код получается вот такой.
//FF10EF — стрелочка вправо //FF5AA5 — стрелочка влево #include “IRremote.h” IRrecv irrecv(11); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFF10EF: digitalWrite( 13, HIGH ); break; case 0xFF5AA5: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду } delay(100); }
Вот так можно легко научить вашу Arduinо понимать команды с пульта.
Источник: https://portal-pk.ru/news/147-urok-4—upravlenie-arduino-s-pomoshchyu-pulta-du-ir.html
Радиоуправление на Arduino
Соберем радиоуправление на основе Arduino Uno и радиомодуля MX-05v. Этот модуль работает на частоте 443 МГц, что позволяет использовать его под водой (волны в диапазоне 2.4 ГГц не проникают под воду). Потом поставим его на модель Радиоуправляемой Подводной Лодки.
Радиомодуль MX-05V + MX-FS-03V подкупает своей низкой ценой – около 60 рублей за пару. Заявленной дальности связи 20-200 метров хватает для небольших моделей машин или лодок.
Сделаем одноканальную аппаратуду. Для этого нам понадобятся:
- 2 платы Ардуино для приемника и передатчика
- комплект радиомодуля MX-05V + MX-FS-03V
- переменный резистор или джойстик для передатчика
- рулевая машинка (серва) для приемника
Суть работы программы заключается в следующем:
- считываем значение с переменного резистора (число от 0 до 1023)
- переводим это число в 2 байта (16 бит, т.к. 1023 занимает 10 бит и не поместится в один байт)
- передаем по радио-каналу
- приемник принимает 2 байта по радио каналу
- переводит их обратно в число от 0 до 1023
- передает команду серво-машинке
Принцип работы Arduino доступно описан на разных веб-ресурсах. Мне понравился бесплатный обучающий онлайн курс «Строим роботов и другие устройства на Arduino». Рекомендую.
Загружаем текс программы (скетч) для передатчика и приемников. Кстати, программы надо хранить в разных папках, иначе во время компиляции они будут сливаться в один файл и конфликтовать из-за дублирования функций setup и loop. Как подключить сторонние библиотеки к Arduino описано например тут.
Передатчик
// Библиотека передатчика
#include void setup() { // Запуск передатчика vw_set_ptt_inverted(true); vw_setup(1000); // Bits per sec } void loop() { // чтение показаний с переменного резистора int sensorValue = analogRead(A0); // отправляем значение send(sensorValue); } void send(int param) { // конвертируем int в массив из 2 байт uint8_t msg[2]; int len = 2; msg[0] = highByte(param); msg[1] = lowByte(param); // отправляем непосредственно в радиоканал vw_send(msg, len); // ждем пока сообщение не уйдет целиком vw_wait_tx(); }
Приемник
// Библиотека для приемника
#include // Библиотека для серво машинки. В отличии от обычной Servo.h не конфликтует с VirtualWire.h
// Скачать библиотеку можно тут. // http://en.osdn.jp/projects/sfnet_pgahtow/downloads/Arduino%20(v1.0)%20libaries/ServoTimer2.zip/
// Надо закомментировать 41 строчку в файле ServoTimer2.
h в случае ошибки компиляции
// 'typedef uint8_t boolean;'
#include // Создаем объект серво-машинки
ServoTimer2 myservo; void setup() { // для отладки // Serial.begin(9600); // Запуск приемника vw_set_ptt_inverted(true); vw_setup(1000); // бит в секунду vw_rx_start(); // запуск приемника // подключаем серво к 6 пину myservo.
attach(6);
} void loop() { uint8_t msg[2]; uint8_t len = 2; if (vw_get_message(msg, &len)) { // переводим байты в int int value = word(msg[0], msg[1]); // подгоняем под диапазон входных данных сервы int sValue = map(value, 0, 1023, 600, 2400); myservo.write(sValue); // Serial.
println(sValue); }
}
И в итоге – ничего не работает! Почему?
Питание
Радиомодуль MX-05V очень простой, из-за этого он очень восприимчив к внешним помехам. И даже такой маленький мотор как в серво-машинке способен нарушить его работу.
Для того, чтобы минимизировать влияние электромотора (это касается только колекторных моторов), нужно разделить питание силовой части от приемника. При этом «минус» у них должен быть общий.
Итоговая схема подключения приемника выглядит так.
Результат
Данные радиомодуль слишком восприимчив к помехам, и управлять летательной техникой на нем нельзя. Но для игрушечной машинки или лодки вполне подойдет.
Источник: http://imelnikov.ru/radio/arduino-rc/
Ик пульт ардуино
ИК приемник и инфракрасный пульт дистанционного управления – самый распространенный и простой способ управления электронной аппаратурой. Инфракрасный спектр излучения не виден человеческим глазом, но он отлично принимается ИК приемниками, которые встроены в электронные приборы. Модули Arduino ir remote используются для управления различной техникой в прямой видимости.
Принцип действия ИК пульта
Широкое применение ИК излучателей стало возможным благодаря их низкой стоимости, простоте и удобству в использовании.
ИК излучение лежит в диапазоне от 750 до 1000 мкм – это самая близкая часть спектра к видимому свету. В области инфракрасного излучения могут меняться оптические свойства различных материалов.
Некоторые стекла, например, становятся непрозрачными для ИК лучей, парафин же наоборот прозрачен в ИК спектре.
Регистрируется излучение с помощью специальных фотоматериалов, на основе которых изготавливаются приемники. Источником инфракрасного излучения помимо нагретых тел (Солнца, ламп накаливания или свечей), могут быть твердотельные приборы – ИК светодиоды, лазеры. Излучение в инфракрасном диапазоне обладает рядом особенностей, благодаря которым их удобно использовать в пультах:
- Твердотельные излучатели (ИК светодиоды) стоят дешево и они компактны.
- Инфракрасные лучи не воспринимаются и не фиксируются человеческим глазом.
- ИК приемники также дешево стоят, и они имеют небольшие размеры.
- Малые помехи, так как передатчик и приемник настроены на одну частоту.
- Отсутствует негативное влияние на здоровье человека.
- Высокий показатель отражения от большинства материалов.
- IR излучатели не влияют на работу других устройств.
Работа пульта осуществляется следующим образом. При нажатии кнопки происходит кодирование сигнала в инфракрасном свете, приемник принимает его и выполняет требуемое действие.
Информация кодируется в виде логической последовательности пакетов импульсов с определенной частотой. Приемник получает эту последовательность и выполняет демодулирование данных.
Для приема сигнала используется микросхема, в которой содержатся фотоприемник (фотодиод), усилители, полосовой фильтр, демодулятор (детектор, который позволяет выделить огибающую сигнала) и выходной транзистор. Также в ней установлены фильтры – электрический и оптический.
Работают такие устройства на расстоянии до 40 метров. ИК способ передачи данных существует во многих устройствах: в бытовых приборах, в промышленной технике, компьютерах, оптоволоконных линиях.
IR приемник Arduino
Для считывания IR сигнала понадобятся сама плата Ардуино, макет, приемник IR сигнала и перемычки. Существует огромное множество различных приемников, но лучше использовать TSOP312 или другие соответствующие для Ардуино. Данные от пульта к приемнику могут передаваться по протоколу RC5 или NEC.
Чтобы определить, какая ножка к чему относится, нужно посмотреть на датчик со стороны приемника. Тогда на приемнике центральный контакт – это земля, слева – выход на микроконтроллер, справа – питание.
Для удобства можно использовать готовые модули IR приемника.
Подключение IR приемника к ардуино
Выходы IR приемника подключают к Ардуино к портам GND, 5V и цифровому входу. Схема подключения датчика к 11 цифровому пину изображена ниже.
Вот так выглядит схема с модулем инфракрасного приемника:
Библиотеки для работы с IR
Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно здесь. После загрузки скопируйте файлы в папку arduinolibraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #include .
Для чтения информации используется пример IRrecvDumpV2 из библиотеки. Если пульт уже существует в списке распознаваемых, то сканирование не потребуется. Для считывания кодов нужно запустить среду ARduino IDE и открыть пример IRrecvDemo из IRremote.
Существует и вторая библиотека для работы с ИК сигналами – это IRLib. Она похожа по своему функционалу на предыдущую. По сравнению с IRremote в IRLib имеется пример для определения частоты ИК датчика. Но первая библиотека проще и удобнее в использовании.
После загрузки библиотеки можно начать считывать получаемые сигналы. Для этого используется следующий код.
Оператор decode_results нужен для того, чтобы присвоить полученному сигналу имя переменной results .
В коде нужно переписать «HEX» в «DEC».
Затем после загрузки программы нужно открыть последовательный монитор и нажимать кнопки на пульте. На экране будут появляться различные коды. Нужно сделать пометку с тем, к какой кнопке соотносится полученный код.
Удобнее полученные данные записать в таблицу. После этот код можно записать в программу, чтобы можно было управлять прибором.
Коды записываются в память самой платы ардуино EEPROM, что очень удобно, так как не придется программировать кнопки при каждом включении пульта.
Бывает, что при загрузке программы выдается ошибка «TDK2 was not declared In his scope». Для ее исправления нужно зайти в проводник, перейти в папку, в которой установлено приложение Arduino IDE и удалить файлы IRremoteTools.cpp и IRremoteTools.h. После этого нужно произвести перезагрузку программы на микроконтроллер.
Заключение
Использование Arduino ir remote упрощает жизнь пользователю. В качестве пульта дистанционного управления может выступать мобильный телефон, планшет или компьютер – для этого только нужен специальный софт. При помощи Ардуино можно централизовать все управление. Одной кнопкой на пульте можно выполнить сразу несколько действий – например, включить одновременно телевизор и Blu-Ray.
Источник: https://ArduinoMaster.ru/datchiki-arduino/ir-ik-pult-upravleniya-arduino/
Управление светодиодом с помощью ИК(IR) приемника и пульта ДУ
С помощью любого инфракрасного пульта управления, например, от телевизора и IR приемника можно посылать сигналы на контроллер. Это может понадобиться, если мы делаем управление светодиодной подсветкой (включение/выключение) или конструируем простейшую машинку на пульте управления. На микроконтроллере мы можем принимать значение с любой кнопки пульта и выполнять нужные нам действия.
Для начала рассмотрим простой пример управления светодиодом. Он не потребует много компонентов и прост в реализации. Более сложные проекты рассмотрены в разделе проекты
Необходимый набор электронных компонентов:
- Плата Arduino UNO(или любая другая совместимая с оригинальной)
- Макетная плата breadboard
- RGB светодиод с общим катодом
- Резисторы 220 Ом 3 штуки
- Резистор 100 ом 1 шт
- IR приемник 38кГц, 1 шт
- Пульт управления 38кГц (подойдут практически все пульты от телевизора)
- Провода «папа-папа»
Софт:
- IRremote библиотека https://github.com/shirriff/Arduino-IRremote Arduino IDE
Принципиальная схема подключения:
Схема подключения на макетной плате:
Исходный код программы:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | /*Arduino, ИК(IR) приемник и пульт управления*/// Подключаем библиотеку для работы с IR приемником#include<\p>#define LED_PINint IRRECV_PIN = 2;// Для управления цветом светодиода используем 3 ШИМ портаint bluePin = 9;int greenPin = 10;int redPin = 11;// Выставляем, на каком порту весит выход IR приемникаIRrecv irrecv(IRRECV_PIN);decode_results res;void setup() { // Включаем последовательное соединение с ПК Serial.begin(9600); // Включаем IR приемник irrecv.enableIRIn(); // НАстраиваем выходы для нашего RGB светодиода pinMode(bluePin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(redPin, OUTPUT);}void loop() { // Принимаем и декодируем сигнал if (irrecv.decode(&res)) { // Сохраняем полученное значение в переменной int value = res.value; // Выводим на монитор последовательного порта значения. Serial.println(value); // В зависимости от кода полученного сигнала, выполняем действия. Для используемого пульта кнопки 1,2,3 – RGB свечение, 9 – выключение if (value == 16724175){ setColor(255, 0, 0); } else if (value == 16718055){ setColor(0, 255, 0); } else if (value == 16743045){ setColor(0, 0, 255); } else if (value == 16732845){ setColor(0, 0, 0); } // Даем команду получать следующее значение irrecv.resume(); }}// Функция включения необходимого цвета на нашем RGB светодиодеvoid setColor(int red, int green, int blue) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue);} |
После загрузки программы на Arduino мы сможем управлять RGB светодиодом удаленно с помощью инфракрасного(IR) приемника и пульта управления
Источник: https://gearise.ru/arduino-lesson-9
Пульт управления на Arduino в мобильнике | Каталог самоделок
Благодаря Arduino можно собрать универсальный пульт дистанционного управления (ПДУ). Очень удобно, когда с одного устройства можно управлять телевизором и медиаплеером. Самое замечательное, что все функции управления будут доступны на своем телефоне Android.
Комплектующие для сборки пульта на Arduino:
- Плата Arduino Pro mini с процессором ATmega328.
- Bluetooth модуль HC-05;
- Инфракрасный приемник TSOP1138, TSOP2238, TSOP4838 (последние две цифры определяют несущую частоту в кГц).
- Инфракрасный диод — передатчик от ненужного ПДУ.
Считывание IR кодов с ПДУ
Для считывания кодов команд с какого-нибудь пульта управления, работающего на самой распространенной частоте 36 кГц, нам потребуется подключить инфракрасный приемник TSOP всего лишь тремя проводами к плате Arduino.
Диапазон работы инфракрасных ПДУ находится в пределах 30–60 кГц. В нашем случае приемник TSOP выбран на частоту 38 кГц, так как отклонение в 10% допускается. Всего лишь понадобиться поднести ближе пульт к датчику в случае плохого приема сигнала.
Электрическая схема подключения TSOP1138, TSOP2238, TSOP4838 к Arduino Pro mini
Монтажная схема подключения TSOP1138, TSOP2238, TSOP4838 к Arduino Pro mini
После сборки схемы скачиваем библиотеку IRremote для Arduino на компьютер.
Устанавливаем и открываем в ней пример скетча IRrecvDump.
В примере скетча меняем номер пина получателя в строке int RECV_PIN = 11 на int RECV_PIN = 4.
Загружаем измененный пример в плату Arduino. Открываем в программе Arduino IDE Монитор порта, наводим имеющийся пульт управления на приемник TSOP и смотрим, считывает ли собранная схема IR коды от какой-то кнопки на пульте.
В приведенном примере, оба пульта от телевизора и медиаплеера передают данные в кодировке NEC.
Все считанные данные от пультов надо занести в таблицу.
Во втором столбце данные для телевизионного пульта TV, в третьем для пульта медиаплеера Player.
После успешного считывания IR кодов, разбираем собранную схему подключения TSOP к Arduino.
Сборка пульта управления на Arduino
Подсоединяем к плате Arduino инфракрасный диод и Bluetooth модуль HC-05.
Монтажная схема универсального пульта на Arduino
Собранный универсальный пульт управления на Arduino
Скачиваем образец скетча Universal_IR_pult
Теперь надо по очереди переписать в скетче коды кнопок для своих пультов, в соответствии с составленной таблицей. Сначала переписываем для телевизора, начиная со строчки:
if (x == 97) {
irsend.sendNEC(0x807F08F7, 32);
delay(40);
а затем для медиаплеера:
if (x == 97) {
irsend.sendNEC(0xFDC23D, 32);
delay(40).
Если ваш пульт передает данные в кодировке SONY, RC5, RC6, PANASONIC, тогда меняем в скетче запись NEC на соответствующую.
Готовую программу загружаем в плату Arduino.
Для проверки передачи данных, открываем в программе Arduino IDE Монитор порта, отправляем в него «1» (задействовано управление телевизором). Отправляем «а» — должно вывестись значение 97.
Потом прописываем «2» (задействовано управление медиаплеером) и снова вводим «а» — ждем вывода 97.
Имитация передачи данных с телефона на Arduino
Установка приложения Pult на телефон Android
Скачиваем приложение Pult.apk и устанавливаем на любое устройство Android, телефон или планшет.
Главный экран приложения Pult.apk
После нажатия на красный значок Bluetooth, выводится окно со списком доступных Bluetooth устройств
После удачного соединения с Bluetooth модулем HC-05, значок Bluetooth должен поменять свой цвет на синий.
Главный экран приложения Pult для режима телевизора TV
Главный экран приложения Pult для режима мультиплеера Player
Источник: https://volt-index.ru/high-tech/pult-upravleniya-na-arduino-v-mobilnike.html
Дистанционное управление роботом на базе Ардуино своими руками
Перевёл alexlevchenko для mozgochiny.ru
Сегодня никого не удивишь радиоуправляемыми самоделками.
Но согласитесь, как-то «по старинке» нажимать на клавиши управления… Гораздо интереснее управлять поделками с помощью движений кисти, не так ли? В данной статье показан пример того, как можно организовать дистанционное управление при помощи платы Arduino и нескольких датчиков изгиба. В качестве подопытного будет выступать PHIRO Pro
Шаг 1: Что понадобится
Шаг 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)
Источник: http://mozgochiny.ru/electronics-2/distantsionnoe-upravlenie-robotom-na-baze-arduino-svoimi-rukami/
Подключаем Arduino к RC модели
Допустим, вы хотите создать на Arduino нечто, перемещающееся на колёсах. Можно самостоятельно собрать шасси из различных деталей, озаботиться дополнительным питанием моторов и т.п. И оно у вас, конечно, поедет.
Вариант неплохой, если в этом и состоит проект. Однако, если шасси является лишь одним из компонентов проекта, то целесообразно рассмотреть и другой вариант. Возможно, вы уже выбрали именно его и поэтому читаете данный текст.
Я говорю про шасси от RC модели.
Это очень удобно: продуманное шасси, на борту которого уже присутствует мощная батарея с большим запасом напряжения и тока, регулятор скорости, система поворота колёс и ещё куча других классных штук типа подвески, редуктора, дифференциалов.
Но как же подключить Arduino к модели и управлять последней? На самом деле очень просто, и сейчас я вам это расскажу.
Электроника RC модели (здесь рассматривается модель без ДВС) работает следующим образом: питание от батареи сперва идёт на регулятор скорости, посылающий на приёмник стабильное напряжение 5 вольт через три контакта: земля (чёрный/коричневый), питание +5В (красный) и сигнальный (белый/оранжевый).
Приёмник, получив команду от пульта, подаёт сигнал по сигнальному контакту в регулятор скорости, который в свою очередь подаёт напряжение питания на мотор с нужной полярностью для задания скорости вращения вала и его направления (в случае коллекторных моторов).
Приёмник также перенаправляет полученное напряжение на следующие каналы (как минимум, на сервопривод рулевой системы).
Когда приёмник возвращает сигнал на регулятор скорости, на самом деле он возвращает такие же импульсы постоянной частоты и переменной ширины, как и на сервопривод. Можно было бы подумать, что регулятор скорости на вход будет получать ШИМ, но нет. Он управляется так же, как если бы вместо него был бы сервопривод – импульсами.
На что следует обратить внимание, так это на то, что состояния «мотор остановлен» и «колёса стоят ровно» соответствует углу 90 градусов.
Теперь, зная это, соберём следующую схему:
У обоих переменных резисторов одно из крайних положений подключено к земле как подтягивающее сопротивление для того, чтобы устранить возможный шум на аналоговых входах. Питание +5В от регулятора скорости подключено напрямую к сервоприводу.
Если вы решите питать Arduino от +5В регулятора скорости, настоятельно рекомендую добавить в цепь стабилизатор!
Загрузим в микроконтроллер простейшую программу (скетч):
Теперь, отклоняя рукоятки переменных резисторов от центрального положения, можно изменять скорость и направление вращения вала мотора, а также угол поворота колёс:
В дальнейшем вы можете создать искусственный интеллект и наделить им модель.
Источник: https://ahrameev.ru/article/how-to-connect-arduino-to-rc-model.html
Управляй телевизором силой мысли и Arduino
Название проекта: Управляй телевизором силой мысли и Arduino
Платформа: Arduino
Пульт от телевизора больше не нужен. Все что нужно сделать – это подумать о смене канала. В проекте использован чип из игры Star Wars Force Trainer (Звездные войны), выпущенной в 2009 году.
Использованные компоненты: Arduino UNO, игра Star Wars Force Trainer, ИК-приемник / ИК-передатчик
,
Сайт проекта: http://goo.gl/8lwjjp
Если вы когда-нибудь мечтали переключать каналы телевизора, просто думая, об этом, то этот arduino-проект – ваша удача. Не только системы “умный дом”, но и магия становятся реальностью.
Более того, некоторые проекты мейкеров доказывают, что фантастические трюки можно сделать самому, затратив при этом не много средств.
Дэниел Дэвис в домашних условиях разработал контролируемый сознанием пульт от телевизора, используя старую игру Star Wars Force Trainer (Звездные войны) и Arduino. Игра была выпущена еще в 2009 году.
Она включает в себя гарнитуру, способную обнаруживать электрические поля разума (по аналогии с ЭЭГ). Сигналы ретранслируются и вентилятор поднимает мяч, находящийся в трубе, в воздух. Иллюзия левитации. Сила работы вентилятора зависит от мыслей пользователя.
Мейкер разобрал игру и обнаружили чип NeuroSky ЭЭГ, встроенный в гарнитуру, который он решил подключить к Arduino Uno (ATmega328), чтобы собирать и преобразовывать исходные данные ЭЭГ на компьютере. В проекте также были использованы ИК-приемник и ИК-передатчик от старого видеомагнитофона.
Чтобы посмотреть какие сигналы передает пульт дистанционного управления на ИК-приемник при нажатии кнопок достаточно воспользоваться Serial-монитором, предварительно загрузив в arduino простую программу.
Код кнопки нужно записать для последующего использования. Написав совсем немного строк кода, мейкер создал умопомрачительный проект. Шлем позволяет переключать каналы на ТВ и выключать его питание, просто путем сосредоточения мыслей.
Исходный код проекта можно скачать на GitHub.
Другие проекты на этой платформе:
- Робот на Arduino, управляемый с помощью жестов
- Как сделать аниматронный хвост
- Вездеход из Lego с видео и bluetooth на Raspberry Pi
- Робот Juno: изучай Arduino и программирование
- Робот-манипулятор из настольной лампы IKEA
- Arduino-робот, объезжающий препятствия
- Роботизированная интеллектуальная система — РИС
- Серво-выключатель света для умного дома
- Робот-рыба на Arduino
- Сделай сам большого человекоподобного робота
Источник: http://edurobots.ru/project/upravlyaj-televizorom-siloj-mysli-i-arduino/
Включение/выключение автомобиля с помощью Arduino с ИК-пультом дистанционного управления
Я разместил этот вопрос на arduino.stackexchange, но я думаю, что этот вопрос должен (возможно) работать только с языком (C).
У меня есть машина, и я пытаюсь как-то выключить автомобиль, когда играет песня с помощью Arduino, с инфракрасным (ИК) пультом. Я решил сыграть песню (SuperMario) с помощью Buzzer, и когда я нажимаю кнопку Power ON, она работает нормально, и песня воспроизводится.
Проблема в том, что когда я нажимаю Power OFF, мне нужно подождать, пока песня не закончится. Выключите питание автомобиля.
Я думал, что, может быть, мне нужны темы или что-то еще, но я не уверен, или, может быть, есть лучший способ исправить это.
Вот демонстрационная программа:
#include “IRremote.h” #define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978 #define powerLedRed 2
#define powerLedGreen 3
#define receiver 5
#define buzzer 7 void translateIR( void );
void powerON( void );;
void powerOFF( void );
void swap( int *x, int *y );
void playSuperMario( void );
void buzz( int targetPin, long frequency, long length ); int power = 2;
int switchOFF = 0;
int switchON = 1; int melody[] = { NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0
}; int tempo[] = { 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
}; int underworld_melody[] = { NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_DS4, NOTE_CS4, NOTE_D4, NOTE_CS4, NOTE_DS4, NOTE_DS4, NOTE_GS3, NOTE_G3, NOTE_CS4, NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4, NOTE_GS4, NOTE_DS4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_GS3, 0, 0, 0
}; int underworld_tempo[] = { 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 6, 18, 18, 18, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18, 10, 10, 10, 10, 10, 10, 3, 3, 3
}; IRrecv irrecv(receiver);
decode_results results; void setup( void )
{ pinMode(buzzer, OUTPUT); pinMode(powerLedGreen, OUTPUT); pinMode(powerLedRed, OUTPUT); Serial.begin(9600); Serial.println(“IR Receiver Button Decode”); irrecv.enableIRIn();
} void loop( void )
{ if ( power == 2 ) { powerOFF(); } if (irrecv.decode(&results)) { translateIR(); irrecv.resume(); }
} void playSuperMario( void ) { Serial.println(” 'Mario Theme'”); int size = sizeof(melody) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) { int noteDuration = 1000 / tempo[thisNote]; buzz(buzzer, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); buzz(buzzer, 0, noteDuration); }
} void buzz( int targetPin, long frequency, long length ) { digitalWrite(13, HIGH); long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing for (long i = 0; i < numCycles; i++) { // for the calculated length of time... digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram delayMicroseconds(delayValue); // wait again or the calculated delay value } digitalWrite(13, LOW);
} void translateIR( void ) { switch (results.value) { case 0xFF02FD: Serial.println(" -OK-"); swap(&switchON, &switchOFF); if (switchON == 0 ) { powerON(); playSuperMario(); } else { powerOFF(); } break; default: Serial.println(" other button "); power = 0; } //delay(500);
} void powerOFF( void ) { digitalWrite(powerLedRed, HIGH); digitalWrite(powerLedGreen, LOW); power = 0;
} void powerON( void ) { digitalWrite(powerLedRed, LOW); digitalWrite(powerLedGreen, HIGH);
} void swap( int *x, int *y ) { if (*x != *y) { *x ^= *y; *y ^= *x; *x ^= *y; }
}
внутри функции translateIR у меня это:
void translateIR( void ) { switch (results.value) { case 0xFF02FD: Serial.println(” -OK-“); swap(&switchON, &switchOFF); if (switchON == 0 ) { powerON(); playSuperMario(); } else { powerOFF(); } break; default: Serial.println(” other button “); power = 0; } //delay(500);
}
Здесь называются обе функции, powerON() и playSuperMario(); поэтому мне нужно как-то выключить автомобиль во время воспроизведения Песни.
Вот демонстрация VIDEO. Как это исправить?
Источник: http://qaru.site/questions/13875516/power-onoff-a-car-using-arduino-with-ir-remote-control