Ик пульт ардуино

Ошибка компиляции для Arduino Nano, Uno, Mega

Ошибка: avrdude: stk500_recv(): programmer is not responding

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

Если вы загружаете скетч в Ардуино Nano V3, но при этом в настройках указана плата Uno или Mega 2560, то вы увидите ошибку, как на скриншоте ниже.


Ошибка Ардуино: programmer is not responding

Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».

Ошибка: a function-definition is not allowed here before ‘{‘ token

Это значит, что в скетче вы забыли где-то закрыть фигурную скобку. Синтаксические ошибки IDE тоже распространены и связаны они просто с невнимательностью. Такие проблемы легко решаются, так как Arduino IDE даст вам подсказку, стараясь отметить номер строки, где обнаружена ошибка. На скриншоте видно, что строка с ошибкой подсвечена, а в нижнем левом углу приложения указан номер строки.


Ошибка: a function-definition is not allowed here before ‘{‘ token

Ошибка: expected initializer before ‘}’ token   expected ‘;’ before ‘}’ token

Сообщение expected initializer before ‘}’ token говорит о том, что вы, наоборот где-то забыли открыть фигурную скобку. Arduino IDE даст вам подсказку, но если скетч довольно большой, то вам придется набраться терпения, чтобы найти неточность в коде. Ошибка при компиляции программы: expected ‘;’ before ‘}’ token говорит о том, что вы забыли поставить точку с запятой в конце командной строки.

Ошибка: ‘ ‘ was not declared in this scope

Что за ошибка? Arduino IDE обнаружила в скетче слова, не являющиеся служебными или не были объявлены, как переменные. Например, вы забыли продекларировать переменную или задали переменную ‘DATA’, а затем по невнимательности используете ‘DAT’, которая не была продекларирована. Ошибка was not declared in this scope возникает при появлении в скетче случайных или лишних символов.


Ошибка Ардуино: was not declared in this scope

Например, на скриншоте выделено, что программист забыл продекларировать переменную ‘x’, а также неправильно написал функцию ‘analogRead’. Такая ошибка может возникнуть, если вы забудете поставить комментарий, написали функцию с ошибкой и т.д. Все ошибки также будут подсвечены, а при нескольких ошибках в скетче, сначала будет предложено исправить первую ошибку, расположенную выше.

Ошибка: No such file or directory exit status 1

Данная ошибка возникает, если вы подключаете в скетче библиотеку, которую не установили в папку libraries. Например, не установлена библиотека ИК приемника Ардуино: fatal error: IRremote.h: No such file or directory. Как исправить ошибку? Скачайте нужную библиотеку и распакуйте архив в папку C:\Program Files\Arduino\libraries. Если библиотека установлена, то попробуйте скачать и заменить библиотеку на новую.


exit status 1 Ошибка компиляции для платы Arduino Nano

Плавное мигание светодиоды или познакомимся еще с новыми операторами…

Всем привет! Добро пожаловать на новый урок ардуино. Сегодня
мы продолжим работу со светодиодам, и освоим новый способ заставить его мигать.
Но обо всем по порядку. Сначала давайте освоим еще несколько новых «слов» в
нашем языке программирования ардуино. Для начала нам нжуно будет использовать
особый тип данных (до этого мы использовали целочисленный тип int). Настало время освоить новый тип
переменной – с плавающей запятой.

Оператор float — как раз и задает тип данных с плавающей
запятой. Синтаксис его точно такой же как и при объявлении ранее использовании
переменной int:

float b; // объявление переменной b типа данных с плавающей
запятой.

Теперь давайте разберёмся каким еще способом можно изменять
плавно значение переменной, например от меньшего к большему и так до
бесконечности. Для этого мы воспользуемся оператором тригонометрической
функции: синусом. С помощью функции sin() мы будем получать плавно меняющиеся значения и после
небольшого преобразования будем направлять эти значения прямо в канал ШИМ. 

Теперь давайте разберемся с преобразованием. Для чего это
нам нужно? А вот для чего: дело в том, что тригонометрические функции (в нашем
случае это функция вычисления синуса) работает не с градусами, а с радианами. Поэтому
нужно будет произвести перерасчет из градусов в радианы. Это вычисляется по
формуле: x*(3.1415/180)
где 3.1415 это округленное значение числа Пи, а х это переменная которая будет
принимать значения от 0 до 180 и выраженная в градусах. Наконец умножив
полученный результат на 255 мы сможем получить плавно нарастающие числа от 0 до
255.

Давайте подведем итоги. Изменяя значения переменной x от 0 до 180, наша формула y=255*((sin(x*(3.1415/180))))
будет выдавать значения х от 0 до 255 (напомним, что переменную х выраженную в
градусах от 0 до 180, мы преобразуем в радианы)

Для наглядности я пересчитал
все данные в электронных таблицах и обратите внимание на получившийся график

А сам скетч получился таким:

int
ledPin=11;

float
Val;

int led;

void
setup()

{

pinMode
(ledPin, OUTPUT);

}

void
loop ()

{

for (int
x=0; x<180; x++)

{

  Val=(sin(x*(3.1415/180)));

  led=int(Val*255);

  analogWrite (ledPin, led);

  delay (20);

}

}

Схема элементарно простая: подключаем светодиод (длинной ножкой)
через резистор 220 Ом к 11 пину. Короткую ножку соответственно на землю. И все!
Даже схему можно не приводить, но для наглядности все же приведу схему.

А
теперь давайте наконец собереми испытаем нашу схему. Собирать будем на макетной
плате, думаю что для нашего читателя это не составит большого труда. А далее
все должно заработать! Вы обратили как интересно мигает светодиод? Все потому
что подключен он к 11 выводу, который на плате ардуино не простой, а который
поддерживает ШИМ.

Для
интереса давайтеподключим теперь вместо светодиода осцилограф и посмотрим какую
осциллограмму нам выдает ШИМ на 11 пине. Саму осциллограмму вы можете так же
увидеть в видеоролике ниже. Приятного просмотра и удачных вам экспериментов с
ардуино. 

Библиотеки для экранов, индикаторов и дисплеев

Библиотека I2C

Библиотека, предназначенная для работы периферийного устройства по протоколу I2C.

Пример использования:

#ifndef I2C_MASTER_H

#define I2C_MASTER_H

void I2C_init (void) – создание объекта, настройка на правильную частоту для шины.

uint8_t I2C_start () – установка соединения с новым устройством.

uint8_t I2C_write() – запись данных на текущее устройство.

uint8_t I2C_read_ack() – считывание байта с устройства, запрос следующего байта.

Библиотека  LiquidCrystal

Стандартная библиотека, установленная в Arduino IDE. Предназначена для управления жидкокристаллическими дисплеями LCD.

Пример использования:

#include <LiquidCrystal.h>. Также, чтобы не ошибиться при написании, можно подключить через меню Sketch – Import Library – LiquidCrystal.

Конструктор класса –  LiquidCristal(…). Аргументами являются rs, rw, en, do…d7. Первые 3 соответствую выводам сигналов RS, RW и Enable. Выводы d соответствуют номерам шин данных, к которым подключен дисплей.

void begin(cols, rows) – метод, который инициализирует интерфейс дисплея. Аргументами являются количество знаков в строке (cols) и число строк (rows). Этот метод должен задаваться первым.

void createChar(num, data) – метод, необходимый для создания пользовательских символов.

Библиотека UTFT

Стандартная библиотека, необходимая для работы Ардуино с TFT экранами разных типов. Все поддерживаемые дисплеи представлены в сопроводительном документе с библиотекой.

Пример использования:

#include <UTFT.h>

UTFT(); – создание экземпляра UTFT.

textRus(char*st, int x, int y); – метод, позволяющий выводить строку из указателя. Например, char *dht = “Температура,С”;

textRus(string st, int x, int y); – вывод строки с указанием в параметре. Например, g.textRus(“Температура, С”, 0, 20);

Библиотека LedControl

Позволяет управлять семисегментными дисплеями, объединять массив из светодиодов в одну матрицу.

Пример использования:

#include <LedControl.h>

LedControl  lc1= LedControl( );

– требуется для инициализации библиотеки. Должна состоять из четырех аргументов – номера пинов, к которым подключен дисплей (первые 3 аргумента) и количество подключенных чипов.

writeArduinoOn7Segment() – отображение на дисплее всех чисел от 0 до 15. Использует функции setChar() для символов a и d и setRow() для создания макета пропущенных символов.

LedControl.shutdown() – отключение изображения.

setIntensity() – контроль яркости.

Conclusion

In this tutorial, I have shown you how to use an IR remote and receiver with Arduino. We looked at several different code examples for determining the IR protocol and identifying the IR key codes for your remote. We then looked at displaying the key/button values in the Serial Monitor and on a 16×2 character LCD. Lastly, I showed you how to control the outputs of the Arduino with the remote to toggle some LEDs on and off. There are many more applications for IR receivers and remotes, so be sure to leave some suggestions in the comments.

I hope you found this article useful and informative. If you did, please share it with a friend that also likes electronics and making things!

I would love to know what projects you plan on building (or have already built) with an IR remote and receiver. If you have any questions, suggestions, or if you think that things are missing in this tutorial, please leave a comment below.

Note that comments are held for moderation to prevent spam.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Beginner

Что такое Arduino

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

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

Вот из чего состоит конструктор Arduino.

Основа

«Мозг» любого конструктора Arduino — это собственно одноимённая плата. На ней есть процессор, модули памяти и порты ввода‑вывода, к которым подключаются другие компоненты.

Самая популярная плата для начинающих — Arduino Uno. На ней 14 цифровых и 6 аналоговых входов, 32 КБ постоянной и 2 КБ оперативной памяти, процессор частотой 16 МГц, порт USB. Не сравнить с современными смартфонами и компьютерами, но для знакомства с конструктором и создания простых систем этого вполне достаточно.

Arduino Nano и Mini — одни из самых компактных в линейке. Nano аналогична Uno по производительности, Mini немного слабее. В Arduino Leonardo установлен новый контроллер (процессор) и вместо USB‑порта используется microUSB.

Фото: AlexCorv/Shutterstock

Если же вы заранее знаете, что на простых экспериментах не остановитесь, можно сразу смотреть в сторону плат побольше, например Arduino Mega. Здесь будет уже 54 цифровых выхода и 16 аналоговых, 256 КБ постоянной и 8 КБ оперативной памяти, а также процессор частотой 16 МГц и порт USB.

Конструктор постоянно развивается, появляются новые версии платформы — с более производительными микроконтроллерами, большим объёмом памяти, расширенным набором портов, дополнительными компонентами вроде Bluetooth или Wi‑Fi.

Обратите внимание: блока питания на плате нет, к розетке вы её не подключите. Электроэнергию можно подавать либо через порт USB/microUSB от компьютера или внешнего аккумулятора, либо на разъём Vin или 5V (плюс на Gnd — «земля») на плате (они промаркированы) — например, от батареи или блока питания для ПК

Дополнительные элементы

Фото: Schlyx/Depositphotos

Чтобы платформа Arduino не просто выполняла вычисления, а давала какие‑то наглядные и полезные результаты работы, к ней нужно подключить «обвес». Это могут быть:

  • Датчики. Они принимают информацию и передают её плате, бывают цифровыми и аналоговыми. К примеру, для Arduino есть датчики света, цвета, температуры, давления, влажности, уровня воды и другие. Выпускаются и более сложные сенсоры. Например, датчики препятствия и расстояния часто используют для создания управляемых роботов и машинок.
  • Светодиоды — самые простые элементы, которые покажут результат работы Arduino. Загорелся светодиод — что‑то произошло, например получили определённый сигнал с датчика.
  • Моторы и другие приводы. Они нужны для того, чтобы привести в движение части вашей конструкции: заставить колёса машины крутиться, а робота — шагать.
  • Экраны. Используются для вывода информации. Обычно это небольшие чёрно‑белые LCD‑дисплеи для пары строк текста, но есть и компактные цветные TFT‑экраны разрешением до 240 × 320 точек и диагональю до 3 дюймов.
  • Кнопки и переключатели. Позволяют управлять работой устройства на базе Arduino: включать и выключать его, задавать определённые сценарии поведения.
  • Резисторы. Нужны, чтобы менять яркость свечения светодиодов или создавать особые электрические схемы.
  • Потенциометры — резисторы с переменным сопротивлением. Их обычно используют, чтобы управлять напряжением, яркостью светодиодов, громкостью звуков и так далее.
  • Провода, перемычки и макетная плата. Нужны для простой сборки вашего Arduino без пайки. Достаточно вставлять ножки резисторов, коннекторов, проводников и других деталей в отверстия на плате. Так быстрее, безопаснее и легче — разберётся даже ребёнок.

Платы расширения

Фото: Baladapat/Depositphotos

Такие платы, которые иногда называют шилдами (Shield), расширяют возможности Arduino. Они устанавливаются на платформу или друг на друга по принципу бутерброда.

Назначение плат обычно отражено в названии. Например, Ethernet Shield позволяет подключить систему к сети Ethernet, GPRS Shield — к мобильной сети. Для управления мощными моторами выпускается Motor Shield, для работы Arduino от бытовой электросети напряжением 220 вольт — AC/DC Shield.

Hardware specifications

The receiver sample interval is generated by a timer.
On many boards this must be a hardware timer, on some a software timer is available and used.
The send PWM signal is generated by a hardware timer. The same timer as for the receiver is used.
Since each hardware timer has its dedicated output pins, you must change timer to change PWN output.
The timer and the pin usage can be adjusted in IRremoteBoardDefs.h

Board/CPU IR-Send (PWM) Pin Timers
ATtiny84 6 1
ATtiny85 > 1 MHz 1, 4 , 1
ATmega8 9 1
ATmega48, ATmega88, ATmega168, ATmega328 3, 9 1, 2
ATmega1284 13, 14, 6 1, 2, 3
ATmega164, ATmega324, ATmega644 13, 14 1, 2
ATmega8535 ATmega16, ATmega32 13 1
ATmega64, ATmega128, ATmega1281, ATmega2561 13 1
ATmega8515, ATmega162 13 1
ATmega1280, ATmega2560 5, 6, 9, 11, 46 1, 2, 3, 4, 5
ATmega4809 5, 6, 9, 11, 46 TCB0
Leonardo (Atmega32u4) 5, 9, 13 1, 3, 4_HS
Zero (SAMD) *, 9 TC3
4, all pins 1
5, 9 1, 3
17 1
9, 10, 14 1, 3, 4_HS
1, 16, 25 1, 2, 3
5 CMT
16 TPM1

Adding new protocols

To add a new protocol is quite straightforward. Best is too look at the existing protocols to find a similar one and modify it.
As a rule of thumb, it is easier to work with a description of the protocol rather than trying to entirely reverse-engineer the protocol.
Please include a link to the description in the header, if you found one.
The durations you receive are likely to be longer for marks and shorter for spaces than the protocol suggests,
but this depends on the receiver circuit in use. Most protocols use multiples of one time-unit for marks and spaces like e.g. . It’s easy to be off-by-one with the last bit, since the last space is not recorded by IRremote.

Try to make use of the template functions and .
If your protocol supports address and code fields, try to reflect this in your api like it is done in and .

Integration

To integrate your protocol, you need to extend the two functions and in IRreceice.cpp,
add macros and function declarations for sending and receiving and extend the in IRremote.h.
And at least it would be wonderful if you can provide an example how to use the new protocol.
A detailed description can be found in the file.

See API reference in wiki.

Why do we use 33% duty cycle

  • Carrier duty cycle 50 %, peak current of emitter IF = 200 mA, the resulting transmission distance is 25 m.
  • Carrier duty cycle 10 %, peak current of emitter IF = 800 mA, the resulting transmission distance is 29 m. — Factor 1.16
    The reason is, that it is not the pure energy of the fundamental which is responsible for the receiver to detect a signal.
    Due to automatic gain control and other bias effects high intensity and lower energy (duty cycle) of the 38 kHz pulse counts more than high low intensity and higher energy.

BTW, the best way to increase the IR power is to use 2 or 3 IR diodes in series. One diode requires 1.1 to 1.5 volt so you can supply 3 diodes with a 5 volt output.
To keep the current, you must reduce the resistor by (5 — 1.3) / (5 — 2.6) = 1.5 e.g. from 150 ohm to 100 ohm for 25 mA and 2 diodes with 1.3 volt and a 5 volt supply.
For 3 diodes it requires factor 2.5 e.g. from 150 ohm to 60 ohm.

Contributing

If you want to contribute to this project:

  • Report bugs and errors
  • Ask for enhancements
  • Create issues and pull requests
  • Tell other people about this library
  • Contribute new protocols

Check here for some guidelines.

Hardware specifications

The receiver sample interval is generated by a timer.
On many boards this must be a hardware timer, on some a software timer is available and used.
The send PWM signal is generated by a hardware timer. The same timer as for the receiver is used.
Since each hardware timer has its dedicated output pins, you must change timer to change PWN output.
The timer and the pin usage can be adjusted in IRremoteBoardDefs.h

Board/CPU IR-Send (PWM) Pin Timers
ATtiny84 6 1
ATtiny85 > 1 MHz 1, 4 , 1
ATmega8 9 1
ATmega48, ATmega88, ATmega168, ATmega328 3, 9 1, 2
ATmega1284 13, 14, 6 1, 2, 3
ATmega164, ATmega324, ATmega644 13, 14 1, 2
ATmega8535 ATmega16, ATmega32 13 1
ATmega64, ATmega128, ATmega1281, ATmega2561 13 1
ATmega8515, ATmega162 13 1
ATmega1280, ATmega2560 5, 6, 9, 11, 46 1, 2, 3, 4, 5
ATmega4809 5, 6, 9, 11, 46 TCB0
Leonardo (Atmega32u4) 5, 9, 13 1, 3, 4_HS
Zero (SAMD) *, 9 TC3
4, all pins 1
5, 9 1, 3
17 1
9, 10, 14 1, 3, 4_HS
1, 16, 25 1, 2, 3
5 CMT
16 TPM1

Adding new protocols

To add a new protocol is quite straightforward. Best is too look at the existing protocols to find a similar one and modify it.
As a rule of thumb, it is easier to work with a description of the protocol rather than trying to entirely reverse-engineer the protocol.
Please include a link to the description in the header, if you found one.
The durations you receive are likely to be longer for marks and shorter for spaces than the protocol suggests,
but this depends on the receiver circuit in use. Most protocols use multiples of one time-unit for marks and spaces like e.g. . It’s easy to be off-by-one with the last bit, since the last space is not recorded by IRremote.

Try to make use of the template functions and .
If your protocol supports address and code fields, try to reflect this in your api like it is done in and .

Integration

To integrate your protocol, you need to extend the two functions and in IRreceice.cpp,
add macros and function declarations for sending and receiving and extend the in IRremote.h.
And at least it would be wonderful if you can provide an example how to use the new protocol.
A detailed description can be found in the file.

See API reference in wiki.

Выравнивание потенциалов ванной комнате

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

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

Зачем нужно выравнивание электрических потенциаловЗачем нужно выравнивание электрических потенциалов

Other IR libraries

you find a short comparison matrix of 4 popular Arduino IR libraries.Here you find an ESP8266/ESP32 version of IRremote with an impressive list of supported protocols.

Supported Boards

  • Arduino Uno / Mega / Leonardo / Duemilanove / Diecimila / LilyPad / Mini / Fio / Nano etc.
  • Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 / Teensy-LC; Credits: @PaulStoffregen (Teensy Team)
  • Sanguino
  • ATmega8, 48, 88, 168, 328
  • ATmega8535, 16, 32, 164, 324, 644, 1284,
  • ATmega64, 128
  • ATmega4809 (Nano every)
  • ATtiny84, 85
  • SAMD21 (receive only)
  • ESP32
  • ESP8266 is supported in a fork based on an old codebase. It works well given that perfectly timed sub millisecond interrupts are different on that chip.
  • Sparkfun Pro Micro
  • Nano Every, Uno WiFi Rev2, nRF5 BBC MicroBit, Nano33_BLE

We are open to suggestions for adding support to new boards, however we highly recommend you contact your supplier first and ask them to provide support from their side.

Z- IR receiver. Модуль ИК приемника

Опубликовано 05.05.2014 8:44:00

Модуль ИК Приемника в связке и ИК пультом дистанционного управления позволит легко реализовать дистанционное управление платой Arduino.

Он представляет из себя не что иное, как ИК приемник VS1838B с установленной на плате рекомендуемой производителем обвязкой.

Arduino Start #2. Управление arduino ИК-пультомArduino Start #2. Управление arduino ИК-пультом

Для работы с данным модулем “из коробки” необходим ПДУ с частотой 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- Модуль ИК приемника

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Hardware specifications

The receiver sample interval is generated by a timer.
On many boards this must be a hardware timer, on some a software timer is available and used.
The send PWM signal is generated by a hardware timer. The same timer as for the receiver is used.
Since each hardware timer has its dedicated output pins, you must change timer to change PWN output.
The timer and the pin usage can be adjusted in IRremoteBoardDefs.h

Board/CPU IR-Send (PWM) Pin Timers
ATtiny84 6 1
ATtiny85 > 1 MHz 1, 4 , 1
ATmega8 9 1
ATmega48, ATmega88, ATmega168, ATmega328 3, 9 1, 2
ATmega1284 13, 14, 6 1, 2, 3
ATmega164, ATmega324, ATmega644 13, 14 1, 2
ATmega8535 ATmega16, ATmega32 13 1
ATmega64, ATmega128, ATmega1281, ATmega2561 13 1
ATmega8515, ATmega162 13 1
ATmega1280, ATmega2560 5, 6, 9, 11, 46 1, 2, 3, 4, 5
ATmega4809 5, 6, 9, 11, 46 TCB0
Leonardo (Atmega32u4) 5, 9, 13 1, 3, 4_HS
Zero (SAMD) *, 9 TC3
4, all pins 1
5, 9 1, 3
17 1
9, 10, 14 1, 3, 4_HS
1, 16, 25 1, 2, 3
5 CMT
16 TPM1

Adding new protocols

To add a new protocol is quite straightforward. Best is too look at the existing protocols to find a similar one and modify it.
As a rule of thumb, it is easier to work with a description of the protocol rather than trying to entirely reverse-engineer the protocol.
Please include a link to the description in the header, if you found one.
The durations you receive are likely to be longer for marks and shorter for spaces than the protocol suggests,
but this depends on the receiver circuit in use. Most protocols use multiples of one time-unit for marks and spaces like e.g. . It’s easy to be off-by-one with the last bit, since the last space is not recorded by IRremote.

Try to make use of the template functions and .
If your protocol supports address and code fields, try to reflect this in your api like it is done in and .

Integration

To integrate your protocol, you need to extend the two functions and in IRreceice.cpp,
add macros and function declarations for sending and receiving and extend the in IRremote.h.
And at least it would be wonderful if you can provide an example how to use the new protocol.
A detailed description can be found in the file.

See API reference in wiki.

Начинаем работать с ИК приемником, или будем управлять светодиодами с пульта.

Для реализации этого проекта нам понадобиться немного
радиодеталей: ИК приемник (VS 1838B), пульт ДУ (подойдет любой, но я буду
использовать пока пульт от набора ардуино), два резистора на 100-200 Ом,
конденсатор 10 мкФ, три светодиода разных цветов, и макетные провода с макетной
платой.

Теперь немного теории (без этого никуда). Инфракрасный
пульт дистанционного управления — один из самых простых способов взаимодействия
с электронными приборами. Наверняка в каждом доме найдётся немало таких
устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. А можно ли с
помощью ПДУ (пульт дистанционного управления) управлять нашей Arduino Uno?
Оказывается да! Для начала поставим скромную задачу: с помощью ПДУ зажигать и
гасить светодиоды.

Для начала нам понадобиться любой ИК пульт (если у вас
остались старые ИК ПДУ, то вот можно найти им применение).  Такие устройства ИК работают испуская на
инфракрасном светодиоде импульсы ИК излучения определённой частоты
(приблизительно от 38 до 40 кГц). Соответственно приемник (в нашем случае это VS1838B)
может принимать любой ИК излучение, но «ненужное» излучение (несущая) должно
быть отфильтровано (иначе будут ложные срабатывания), и в итоге остаётся только
«нужный» сигнал данных (который передается при нажатии на кнопку ПДУ).

Но вернемся к нашему приемнику ИК VS1838B

Важно его
грамотно подключить. А для этого давайте сначала познакомимся с его выводами.
Он имеет три вывода: если посмотреть на датчик со стороны приёмника ИК сигнала,
как показано на рисунке, то слева будет — выход на контроллер, по центру —
отрицательный контакт питания (земля), и справа — положительный контакт питания
(2.7 — 5.5В)

 Далее собираем
схему и давайте подключим библиотеку IRremote (ее можно будет загрузить с Яндекс диска по этой ссылке). Если кто еще не знает как это
сделать, то вот здесь можно будет все наглядно посмотреть (ссылка на видео).
Следующим этапом нам нужно убедиться, что наш ПДУ действительно подает сигналы
на ИК приемник и все отображается в мониторе порта. Вообще для этого есть
отдельный скетч (который можно загрузить из примера в библиотеке IRremote), но
давайте сразу убьём обоих зайцев: возьмём готовый скетч (который мы в
дальнейшем будем настраивать).

/*

 Arduino, ИК(IR)
приемник и пульт управления

*/

// Подключаем библиотеку для работы с IR приемником

#include
<IRremote.h>

#define
LED_PIN

int 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 == 26775){

      setColor(255, 0, 0);

    } else if (value == 12495){

      setColor(0, 255, 0);

    } else if (value == 6375){

      setColor(0, 0, 255);

} else if (value == 31365){

      setColor(0,
0, 0);

    }

    // Даем команду
получать следующее значение

   
irrecv.resume();

  }

}

// Функция включения необходимого цвета на нашем RGB
светодиоде

void
setColor(int red, int green, int blue) {

  analogWrite(redPin, red);

  analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

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