Универсальный пульт на arduino

Оглавление

Скетч Arduino для радиочастотного передатчика 433 МГц

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

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

// Подключаем библиотеку RadioHead Amplitude Shift Keying
#include <RH_ASK.h>
// Подключаем библиотеку SPI Library 
#include <SPI.h> 
 
// Создаем объект управления смещением амплитуды
RH_ASK rf_driver;
 
void setup()
{
    // Инициализируем объект ASK
    rf_driver.init();
}
 
void loop()
{
    const char *msg = "Hello World";
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    delay(1000);
}

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

Код  начинается с подключения библиотеки RadioHead ASK. Мы также должны подключить библиотеку SPI Arduino,  так как от нее зависит библиотека RadioHead.

#include <RH_ASK.h>
#include <SPI.h>

Далее нам нужно создать объект ASK, чтобы получить доступ к специальным функциям, связанным с библиотекой RadioHead ASK.

// Создаем объект управления смещением амплитуды
RH_ASK rf_driver;

В функции setup() нам нужно инициализировать объект ASK.

// Инициализируем объект ASK
    rf_driver.init();

В функции loop() мы начинаем с подготовки сообщения. Это простая текстовая строка, которая хранится в char с именем msg. Знайте, что ваше сообщение может быть любым, но не должно превышать 27 символов для лучшей производительности. И обязательно посчитайте количество символов в нем, так как вам понадобится это количество в коде получателя. В нашем случае у нас 11 символов.

// Готовим сообщение
const char *msg = "Hello World";

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

rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
delay(1000);

Дистанционное управление роботом на базе Ардуино своими руками

Перевёл 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)

Комплектующие

Ниже перечислим все комплектующие для нашего урока.

Arduino Uno R3

Arduino Uno R3 — это плата, которая поможет вам обработать код и заставить вашу схему работать. Вы также можете купить данную плату в любом удобном магазине.

Макетная плата

Макетная плата поможет вам собрать схему без необходимости паять детали.

Кабель для Arduino

Этот кабель поможет вам подключить Ардуино к вашему ноутбуку.

ИК-приемник

ИК-приемник поможет вам получить ИК-сигнал и отправить информацию в Arduino.

ИК-пуль дистанционного управления

ИК-пульт отправляет ИК-сигнал на ИК-приемник.

Перемычки «мама-мама»

Перемычки помогут соединить различные комплектующие на макетной плате.

Светодиоды

Светодиод включается и светится, когда на него подается электричество.

Резисторы 1 КОм и 220 Ом

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

Зажигаем светодиод … фоторезистором!

Всем привет! Давайте сразу же приступим к работе и не будем
отвлекаться о темы. Сначала нам нужно будет кое-какое оборудование (надеюсь,
что у вас это найдется): фоторезистор, резистор на 10 кОм и 240 Ом, светодиод,
макетная плата, и провода «П-П» (папа –папа). В последний раз мы исследовали
ШИМ сигнал, который позволял плавно менять яркость светодиода. Теперь давайте продолжим
развивать идею применения ШИМ.

Под действием света на фоторезистор у него будем меняться сопротивление.
Скажем чем ярче свет – тем сопротивление меньше. Наша задача состоит в том,
чтобы на данное световое воздействие реагировал и светодиод. Скажем чем света
меньше (например прикрыли окошко фоторезистора рукой) – тем ярче должен гореть
светодиод. Задача вроде бы простая, но здесь есть пара важных моментов: как
правильно подключить фоторезистор, и какой должен быть скетч?

Немного теории. Как вы уже догадались сигнал с фоторезистора
будет аналоговый (то есть он может принимать самые разные значения). А ведь наш
ардуино понимает эти сигналы (то есть ардуино содержит Аналогово-Цифровой
преобразователь АЦП). Arduino имеет 10 битный АЦП, т.е. подаваемый на вход
сигнал может быть преобразован в цифровые значения от 0 до 1023. Если к примеру
подключить микрофон к аналоговому входу Arduino и попасть в место с идеальной
тишиной, то будет значение 0, на улице днем -200-300, а если встать рядом с
взлетающим самолетом – 1023. Цифры абстрактные, но теперь должно быть понятно,
как это работает. Мы можем любой плавный
сигнал (звук, свет, напряжение) преобразовать в число от 0 до 1023.

Но в нашем примере мы работаем со светом – то есть
используем фоторезистор. Как же его правильно подключить, чтобы ардуино смог
принимать от него сигналы? А все просто: мы будем использовать делитель
напряжения: то есть подключим к фоторезистору последовательно еще один резистор
(10 кОм). При таком включении, будет меняться напряжение в зависимости от сопротивления.
То есть таким образом мы сможем определить уровень освещенности: чем больше
света падает на фоторезистор, тем больше напряжения пойдет на вход. Под «входом»
мы подразумеваем конечно же аналоговый вход А1.

Теперь давайте посмотрим окно монитора последовательного
порта. Вызываем окно и в нем бегут цифры. При этом если накрыть фоторезистор
рукой я получаю максимально значение 600, при открытом окне фоторезистор идет
значение о. То есть размах от 0 до 600. Но интереснее же конечно не смотреть на
меняющиеся цифры, а подключить светодиод. Подключим его к 3 выходу. На ардуино
нет отдельных аналоговых выходов, просто некоторые цифровые могут работать как
аналоговые. На плате они помечены знаком «тильда». Третий выход как раз такой.

Для начала давайте определим, какие минимальные и
максимальные значения мы получаем. У меня получилось от 0 до 600. Помним, что
АЦП Ардуино может выдавать от 0 до 1024. Обрежем крайние значения

int a=0;

void
setup()

  Serial.begin(9600);

  pinMode(3, OUTPUT);

}

void
loop()

{

  a=analogRead(1);

  if(a<200)

    a=0;

  if (a>600)

    a=1024; 

  Serial.println(a); 

analogWrite(3, 256- (a / 4));

  delay(100);

}

В итоге что-то получилось. Если прикрыть фоторезистор
рукой – то зажигается светодиод. Иными словами если значения на входе падают ниже 200, светодиод гаснет, а если выше 600, горит на полную

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

Управление нагрузкой с помощью ИК пульта и Arduino

В статье приведу пример управления нагрузкой с помощью ИК-пульта и Arduino UNO. При необходимости программу можно легко изменить, для управления сервоприводом или другом устройством при нажатии любой кнопки.

Управление нагрузкой с помощью ИК пульта и Arduino

Необходимые детали:► Arduino UNO R3 x 1 шт.► Модуль реле 4-о канальный x 1 шт.► Модуля HX1838 с ИК пультом x 1 шт.► Провод DuPont x 1 шт.

Описание:В данном примере используется приемник HX1838, 4-х канальное реле и Arduino UNO. Для переключения реле, используется стандартный 21 кнопочный пульт, при нажатии кнопки 1, 2, 3, 4, 5, 6, 7, 8 переключается реле 1, 2, 3, 4, при необходимости можно использовать пульт от телевизора, кондера и так далее.

Подключение:Первым делом, подключим приемник HX1838 к Arduino UNO, для этого крайний левый выход приемника подключаем к выводу 7 (Arduino UNO), средний вывод GND подключаем к GND (Arduino UNO) и крайний левый вывод 5В, подключаем к выводу 5В (Arduino). Теперь, осталось подключить 4-х канальное реле, для этого подключим выводы in1, in2, in3, in4 к выводам 3, 4, 5, 6. Так же подключаем питание.

Программа: Приведенный ниже скетч будет переключать цифровые вывода 2, 3, 4, 5 в LOW при нажати кнопок 1, 3, 5, 7 и в положение HIGH при нажатии 2, 4, 6, 8.

Источник

Устройство ИК приемника. Принцип работы

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

Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.

Начинаем работать с модулем влажности DHT11

Всем нашим читателям привет. Как вы поняли из названия,
сегодня мы не будем работать со светодиодами, хотя еще будем возвращаться к
теме светодиодов в дальнейших уроках. Сегодня мы научимся многим важным
моментам: устанавливать и работать с готовыми библиотеками, DHT11.

Нам понадобиться: модуль влажности DHT11, резистор на 10 кОм.

Чем отличаются
датчики DHT11 и DHT22?

Две версии сенсоров DHT похожи друг на друга и имеют
одинаковую распиновку. Их отличия в характеристиках. Спецификации:

Сенсор DHT11:

определение влажности в диапозоне 20-80%

определение температуры от 0°C до +50°C

частота опроса 1 раз в секунду

Сенсор DHT22:

определение влажности в диапазоне 0-100%

определение температуры от -40°C до +125°C

частота опроса 1 раз в 2 секунды

Таким образом, характеристики датчика DHT22 лучше по
сравнению с DHT11, и поэтому он чуть-чуть дороже. Снимать показания чаще, чем
раз в 1-2 секунды не получится, но, возможно, для вашего проекта более высокое
быстродействие и не требуется.

Подключение
сенсоров DHT к Arduino

Датчики DHT имеют стандартные выводы и их просто
установить на breadboard.

Датчики DHT имеют 4 вывода:

питание.

вывод данных

не используется.

GND (земля).

Между выводами питания и вывода данных нужно разместить
резистор номиналом 10 кОм.

Датчик DHT часто продается в виде готового модуля. В этом
случае он имеет три вывода и подключается без резистора, т.к. резистор уже есть
на плате.

Что нужно сделать? А все просто: сначала правильно
подключим датчик к плате ардуино. Далее нужно установить библиотеку. Об этом
лучше не сто раз прочитать, а один раз увидеть, поэтому вам в помощь видео «Как
подключить библиотеку…». Когда все вопросы с применением библиотеки (поверьте
там ничего сложного нет) останутся позади то можно будет записать скетч на
плату ардуино и протестировать наш датчик.

Выводы: несмотря на средние характеристики датчик
температуры и влажности DHT11 вполне можно использовать (хотя бы для того чтобы
просо попробовать поработать с ним, знания никогда лишними не бывают, да и
пригодиться все это при освоении других аналоговых датчиков). А что получилось
у меня, можно посмотреть в видео ниже:

Схема подключения передатчика и приемника 433 МГц к Arduino UNO

Теперь, когда мы знаем все о модулях, пришло время использовать их!

Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.

Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать  контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.

На следующем рисунке показана схема соединения.

После подключения передатчика вы можете перейти к приемнику. Подключение приемника так же просто, как и передатчика.

Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.

Вот так должна выглядеть схема соединения для приемника.

Теперь, когда передатчик и приемник подключены, нам нужно написать код и отправить его на соответствующие платы Arduino. Поскольку у вас, вероятно, только один компьютер, мы начнем с передатчика. Как только код будет загружен, мы перейдем к приемнику. Arduino, к которому подключен передатчик, может питаться от источника питания или батареи.

Основная схема

Схема радиоприемника

На рисунке 1 представлена основная схема радиоприемника, взятая и адаптированная из технического описания Silicon Labs Si4844 и рекомендаций по применению. Для приема в диапазоне КВ я использовал ферритовую антенну от старого портативного приемника. Q1 – усилитель для СВ/УКВ, здесь я так же использовал телескопическую антенну от старого приемника. Стоит заметить, что руководство по проектированию, приведенное выше, дает несколько альтернатив и различные подходы к антеннам.

Переменный резистор (VR1) является критичным элементом схемы, поскольку он будет использоваться для настройки частоты приемника (ручка настройки). Рекомендуется использовать линейный потенциометр. Для аудиовыхода я решил использовать пару «экономичных» аудиоколонок со встроенным усилителем, которые у меня остались от старого компьютера. Разумеется, можно использовать простой стереоусилитель.

Возможно, наиболее сложная часть сборки – это работа с микросхемой в корпусе SSOP-24. Если у вас нет опыта работы с SMD микросхемами, возможно, самым простым способом будет использование переходной платы. У меня была переходная плата SSOP-28; немного пайки, и с микросхемой стало можно работать, как с микросхемой в DIP корпусе. Другими потенциально трудными компонентами для работы является пара из ферритового фильтра (бусинки) и конденсатора. Эти компоненты также можно припаять на переходную плату, чтобы работать с ними как с DIL элементом.

SMD компоненты, припаянные на переходные платы

Список компонентов основной схемы
Компонент Описание
B1 Ферритовый фильтр (бусинка) 2,5 кОм (100 МГц)
C1,C2,C5 Неполярный конденсатор 4,7 мкФ
C3,C4 Конденсатор 22 пФ
C6,C7,C9 Конденсатор 0,1 мкФ
C8 Неполярный конденсатор 47 мкФ
C10,C11 Конденсатор 0,47 мкФ
C12,C14 Конденсатор 33 нФ
C13 Конденсатор 33 пФ
C15 Конденсатор 10 пФ
IC1 Радиоприемник Si4844-A10
Q1 NPN транзистор SS9018
R1, R2 Резистор 2,2 кОм
R3 Резистор 1 кОм
R4,R7 Резистор 100 кОм
R5 Резистор 10 Ом
R6 Резистор 120 кОм
R8 Резистор 100 Ом
L1 Индуктивность 270 нГн
VR1 Линейный потенциометр 100кОм
Y1 Кварцевый резонатор 32,768 кГц
ANT1 Ферритовая антенна
ANT2 Телескопическая/штыревая антенна

Библиотеки для работы с IR

Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно здесь. После загрузки скопируйте файлы в папку \arduino\libraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #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 к RC модели

Допустим, вы хотите создать на Arduino нечто, перемещающееся на колёсах. Можно самостоятельно собрать шасси из различных деталей, озаботиться дополнительным питанием моторов и т.п. И оно у вас, конечно, поедет.

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

Я говорю про шасси от RC модели.

Это очень удобно: продуманное шасси, на борту которого уже присутствует мощная батарея с большим запасом напряжения и тока, регулятор скорости, система поворота колёс и ещё куча других классных штук типа подвески, редуктора, дифференциалов.

Электроника RC модели (здесь рассматривается модель без ДВС) работает следующим образом: питание от батареи сперва идёт на регулятор скорости, посылающий на приёмник стабильное напряжение 5 вольт через три контакта: земля (чёрный/коричневый), питание +5В (красный) и сигнальный (белый/оранжевый).

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

Приёмник также перенаправляет полученное напряжение на следующие каналы (как минимум, на сервопривод рулевой системы).

На что следует обратить внимание, так это на то, что состояния «мотор остановлен» и «колёса стоят ровно» соответствует углу 90 градусов. Теперь, зная это, соберём следующую схему:

Теперь, зная это, соберём следующую схему:

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

Если вы решите питать Arduino от +5В регулятора скорости, настоятельно рекомендую добавить в цепь стабилизатор!

Загрузим в микроконтроллер простейшую программу (скетч):

В дальнейшем вы можете создать искусственный интеллект и наделить им модель.

Управление Ардуино с помощью ИК приемника и пульта

Нам понадобится:

Ссылочка на Arduino uno: http://ali.ski/gC_mOa Ссылочка на модуль Реле: http://ali.ski/X26ZC Ссылочка на контактные провода: http://ali.ski/Exjr3 Ссылочка на Ик приемик: http://ali.ski/Xb4xK4

В данном примере я покажу как с помощью Ик пульта включить и выключить реле. Это можно применить например в управлении освещением с помощью пульта. Да и вообще кучу кнопок на пульте запрограммировать и можно всем домом управлять. было бы желание.

Подключаем ИК приемник и модуль реле к ардуино, согласно схеме приведенной в начале статьи.

Для начала нам нужно скачать библиотеку из стандартных библиотек IRremote.h . как скачать данную библиотеку рассказывается в видео в конце стать.

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

После того как считали код нужной нам кнопки ее нужно записать в строку case 0xFD00FF заместо 0xFD00FF Далее

Необходимо скопировать программный код приведенный ниже и вставить его в программу Arduino IDE и загрузить этот программный код в саму плату Arduino.

Ссылка на Скетч: https://yadi.sk/d/SRWyMOeZv8DcG Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.

Подключение Arduino

Еще одна вещь, которую надо решить до включения схемы для тестирования, – это взаимодействие с Arduino. Здесь я решил использовать плату Arduino Pro Mini 3В/8МГц. Это небольшая плата Arduino, полностью работающая на напряжении 3,3 В и совместимая с Si4448-A10, что является главным преимуществом. Небольшой размер платы – второе преимущество. Подключение к Si4448-A10 осуществляется по четырем линиям, как описано ниже:

Подключение Arduino к Si4844-A10
Arduino (3.3 В) Si4844-A10
A5/SCL SCLK
A4/SDA SDIO
D2 INT
D12 RST

Кроме того, используется стандартный преобразователь USB/TTL для подключения Arduino к компьютеру для программирования. Таким образом, у Arduino также будут задействованы выводы TX, RX и GND. Так вы сможете программировать и тестировать Si4844-A10 «внутрисхемно», что облегчает разработку и экспериментирование. Когда всё будет завершено, это подключение может быть убрано для автономной работы нового радиоприемника. Питание платы радио и платы Arduino должно осуществляться внешним стабилизированным источником питания на 3,3 В. Не пытайтесь запитывать их от преобразователя USB/TTL, даже если у него есть выходной вывод 3,3 В – нельзя полагаться, что он обеспечит необходимый ток для питания и Arduino, и Si4844-A10.

Тестирование основной схемы

Когда у вас будет собранная на макетной плате схема, подключенные к ней Arduino и аудиоколонки со встроенным усилителем, вы сможете запустить тестовую программу, которая приведена в архиве в конце статьи (Si4844_Quick_Test.ino). Эта программа выполняет простой тест, который включает питание устройства, устанавливает диапазон FM (УКВ) и предоставляет информацию о версии микросхемы. Если всё пройдет хорошо, вы сможете настроить частоту радиоприемника, повернув ручку VR1, увидите частоту, динамически отображаемую на экране и, конечно, услышите то, что выдает радиоприемник.

Скриншот экрана с результатами вывода тестовой программы

Если основная схема и ее подключение к Arduino работают, то можно собирать полноценный радиоприемник.

Работа с беспроводным приемопередающим модулем nRF24L01+

Однако для того, чтобы наш nRF24L01 работал без проблем, мы могли бы рассмотреть следующие вещи. Я долгое время работал с этим nRF24L01+ и изучил следующие моменты, которые могут помочь вам избежать препятствий. Вы можете попробовать это, когда модули не работают в нормальном режиме.

Большинство модулей nRF24L01+ на рынке являются поддельными. Самые дешевые, которые мы можем найти на Ebay и Amazon, являются худшими (не волнуйтесь, с помощью нескольких ухищрений мы можем заставить их работать).
Основная проблема – источник питания, а не ваш код

Большинство примеров кода в интернете работают правильно.
Обратите внимание, что модули, которые промаркированы как NRF24L01+, на самом деле это Si24Ri (да, это китайский продукт).
Клоны и поддельные модули будут потреблять больше энергии, поэтому разрабатывайте свою схему питания не на основе технического описания nRF24L01+, поскольку Si24Ri будет иметь высокое потребление тока, около 250 мА.
Остерегайтесь пульсаций напряжения и скачков тока, эти модули очень чувствительны и могут легко выйти из строя (я пока поджарил 2 модуля).
Добавление пары конденсаторов (10 мкФ и 0,1 мкФ) между Vcc и Gnd модуля помогает очистить питание, и это работает с большинством модулей.

Finding the key codes for your remote

Because there are many different types of remotes on the market (different number of keys and values printed on the keys), we need to determine which received signal corresponds to which key.

The IRremote library will read the signal and output a specific code in the form of a hexadecimal number depending on which key is pressed.

By printing this output in the Serial Monitor, we can create a conversion table.

You can copy the code below by clicking in the top right corner of the code field.

/* Finding the key codes for your remote. More info: https://www.makerguides.com */

#include <IRremote.h> // include the IRremote library

#define RECEIVER_PIN 2 // define the IR receiver pin
IRrecv receiver(RECEIVER_PIN); // create a receiver object of the IRrecv class
decode_results results; // create a results object of the decode_results class

void setup() {
  Serial.begin(9600); // begin serial communication with a baud rate of 9600
  receiver.enableIRIn(); // enable the receiver
  receiver.blink13(true); // enable blinking of the built-in LED when an IR signal is received
}

void loop() {
  if (receiver.decode(&results)) { // decode the received signal and store it in results
    Serial.println(results.value, HEX); // print the values in the Serial Monitor
    receiver.resume(); // reset the receiver for the next code
  }
}

After you have uploaded the code, open the Serial Monitor (Ctrl + Shift + M on Windows). Now press each key on the remote and record the corresponding hexadecimal value that you see in the Serial Monitor.


Serial Monitor output

Note that you will see the code FFFFFFFF when you press on a key continuously. This is the repeat code send by the remote.

For my remote I got the following conversion table:

Key Code
POWER 0xFD00FF
VOL+ 0xFD807F
FUNC/STOP 0xFD40BF
│◄◄ 0xFD20DF
►││ 0xFDA05F
►►│ 0xFD609F
0xFD10EF
VOL- 0xFD906F
0xFD50AF
0xFD30CF
EQ 0xFDB04F
ST/REPT 0xFD708F
1 0xFD08F7
2 0xFD8877
3 0xFD48B7
4 0xFD28D7
5 0xFDA857
6 0xFD6897
7 0xFD18E7
8 0xFD9867
9 0xFD58A7

As you can see in the table, hexadecimal values are indicated by the prefix “0x”.

Note that your table will probably look different! You will have to create your own to use in the rest of the code examples below.

Урок 5 — Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote

При создании проектов на Arduino. Часто возникает вопрос, с помощью чего управлять проектом. И желательно на расстоянии. Кнопки уже не модно.

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

Для урока я буду использовать вот такой набор и Arduino UNO.

Купить пульт с IR приемником всего за 100 руб. можно тут.

Приемники могут быть распаянные как в моем случае.

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

Подключаем к Arduino UNO вот по такой схеме. К другим Ардуинкам подключается аналогично.

Для работы нам понадобиться библиотека IRremote. Скачать ее можно тут.

С библиотекой устанавливается ряд примеров. Нам понадобиться IrrecvDemo.

После того как скетч загружен и IR приемник подключен можно проверить какой код соответствует той или иной кнопке пульта ДУ. Поднажимайте на кнопки и в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее.

У вас возник наверное вопрос что за повторяющая команда FFFFFFFF. Это команда выводиться когда вы долго удерживаете кнопку на пульте и на Ардуино приходить одинаковая команда. В этом нет ни чего страшного, а иногда это даже полезно. На основе данной команды я сделал управление машинкой с помощью пульта ДУ. При этом машинка едет только тогда, когда нажата кнопка пульта. Отпускаем и машина перестает ехать и поворачивать.

Само простое, чем можно управлять это включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления и инфракрасного приемника.

Схема подключения как и в примере выше. Коды кнопок моего пульта:

У вашего пульта команды будут другие. Код получается вот такой.

Вот так можно легко научить вашу Arduinо понимать команды с пульта.

Библиотеки для работы с IR

Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно здесь.  После загрузки скопируйте файлы в папку \arduino\libraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #include <IRemote.h>.

Для чтения информации используется пример 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. После этого нужно произвести перезагрузку программы на микроконтроллер.

Взаимодействие nRF24L01 с Arduino

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

Принципиальная схема подключения модуля nRF24L01 к Arduino приведена ниже. Для разнообразия я использовал UNO для приемной части и Nano для предающей части. Но для других плат Arduino, таких как Mini и Mega, логика подключения остается неизменной.

Подводим итог

В этой статье мы рассмотрели три способа управления светом: при помощи датчика движения, фоторезистора и ИК-приемника. Каждый из методов найдет свое применение в различных помещениях и намного упростит управление светом. Также хочется отметить, что вы можете комбинировать эти примеры. Например, можно одновременно использовать датчик приближения и ИК-приемник. Еще хотелось бы напомнить нашим читателям, что все рассмотренные примеры используют прямое подключение к сети 220 В, поэтому будьте предельно осторожны. Если у вас под рукой нет платы Arduino или она еще не дошла из Китая, то мы советуем воспользоваться бесплатным сервисом Autodesk Circuits. Этот сервис представляет собой конструктор с различными компонентами Arduino.

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