IR Control LED
Control a certain key (for example, Power key) via a remote controller by programming. When you press the key, infrared rays will be emitted from the remote control and received by the infrared receiver, and the LED on the Osoyoo Uno board will light up. Connect an LED to pin 3 on the Osoyoo Uno board so that you can see remotely whether the Power key is pressed down.
Build the circuit as below:
Code Program
After above operations are completed, connect the Arduino board to your computer using the USB cable. The green power LED (labelled PWR) should go on. Load up the following sketch onto your Arduino.
#include IRremote.h> const int irReceiverPin =2; //the SIG of receiver module attach to pin2 const int ledPin = 3;//pin 3 connect to an led IRrecv irrecv(irReceiverPin); //Creates a variable of type IRrecv decode_results results; void setup() { pinMode(ledPin,OUTPUT);//set ledpin as OUTPUT Serial.begin(9600);//initialize serial irrecv.enableIRIn(); //enable ir receiver module } void loop() { if (irrecv.decode(&results)) //if the ir receiver module receiver data { Serial.print("irCode: "); //print"irCode: " Serial.print(results.value, HEX); //print the value in hexdecimal Serial.print(", bits: "); //print" , bits: " Serial.println(results.bits); //print the bits irrecv.resume(); // Receive the next value } delay(600); //delay 600ms if(results.value == 0xFFA25D)//if receiver module receive 0xFFA25D { digitalWrite(ledPin,HIGH);//turn on the led } else { digitalWrite(ledPin,LOW);//turn off the led } }
Running Result
A few seconds after the upload finishes, press the “CH-” button of a remote control, and both the LED attached and that connected to pin 3 on the Osoyoo Uno board will light up. Then press any other key, and the LEDs will go out.
Начинаем работать с ИК приемником, или будем управлять светодиодами с пульта.
Для реализации этого проекта нам понадобиться немного
радиодеталей: ИК приемник (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);
}
Protocol=UNKNOWN
If you see something like as output of e.g. the ReceiveDemo example, you either have a problem with decoding a protocol, or an unsupported protocol.
- If you have an odd number of bits received, it is likely, that your receiver circuit has problems. Maybe because the IR signal is too weak.
- If you see timings like then one 450 µs space was split into two 150 and 100 µs spaces with a spike / error signal of 200 µs between. Maybe because of a defective receiver or a weak signal in conjunction with another light emitting source nearby.
- If you see timings like , then marks are generally shorter than spaces and therefore (specified in your ino file) should be negative to compensate for this at decoding.
- If you see it may be that the space after the initial mark is longer than . This was observed for some LG air conditioner protocols. Try again with a line e.g. before the line in your ino file.
- To see more info supporting you to find the reason for your UNKNOWN protocol, you must enable the line in IRremoteInt.h.
Исходный код программы
В программе мы первым делом должны подключить библиотеку для работы с инфракрасным каналом связи, инициализировать необходимые контакты и объявить переменные.
Затем необходимо подключить библиотеку для работы с ЖК дисплеем и инициализировать контакты для работы с ЖК дисплеем и управления домашними электронными устройствами.
После этого необходимо инициализировать последовательный порт, ЖК дисплей и задать направление работы инициализированных контактов.
В следующей части программы, как уже обсуждалось ранее в данной статье, происходит сравнение принятого шестнадцатеричного значения и записанного в программе шестнадцатеричного значения для каждой кнопки. Если фиксируется совпадение этих значений, то происходит выполнение соответствующей команды по включению/выключению управляемого электронного устройства.
Далее приведен полный текст программы.
Arduino
#include <LiquidCrystal.h>
#include <IRremote.h>
const int RECV_PIN=14;
IRrecv irrecv(RECV_PIN);
decode_results results;
LiquidCrystal lcd(6,7,8,9,10,11);
#define Fan 3
#define Light 4
#define TV 5
int i=0,j=0,k=0,n=0;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(TV, OUTPUT);
//digitalWrite(13,HIGH);
lcd.print(«Remote Controlled»);
lcd.setCursor(0,1);
lcd.print(«Home Automation»);
delay(2000);
lcd.clear();
lcd.print(«Circuit Digest»);
lcd.setCursor(0,1);
delay(1000);
lcd.print(«System Ready…»);
delay(1000);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Fan Light TV «);
lcd.setCursor(0,1);
lcd.print(«OFF OFF OFF»);
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value,HEX);
delay(100);
lcd.setCursor(0,0);
lcd.print(«Fan Light TV»);
if(results.value==0x1FE00FF)
{
i++;
int x=i%2; // вычисление остатка от деления на 2
digitalWrite(Fan, x);
lcd.setCursor(0,1);
if(x)
lcd.print(«ON «);
else
lcd.print(«OFF «);
// delay(200);
}
else if(results.value==0x1FEF00F) // key 1
{
j++;
int x=j%2;
digitalWrite(Light, x);
lcd.setCursor(6,1);
if(x)
lcd.print(«ON «);
else
lcd.print(«OFF «);
// delay(200);
}
if(results.value==0x1FE9867)
{
k++;
int x=k%2;
digitalWrite(TV, x);
lcd.setCursor(13,1);
if(x)
lcd.print(«ON «);
else
lcd.print(«OFF»);
// delay(200);
}
if(results.value==0x1FE48B7)
{
n++;
int x=n%2;
digitalWrite(TV, x);
digitalWrite(Fan,x);
digitalWrite(Light,x);
lcd.setCursor(0,1);
if(x)
lcd.print(«ON ON ON «);
else
lcd.print(«OFF OFF OFF»);
//delay(200);
}
irrecv.resume(); // Receive the next value
//delay(100);
}
}
1 |
#include <LiquidCrystal.h> constintRECV_PIN=14; IRrecvirrecv(RECV_PIN); decode_resultsresults; LiquidCrystallcd(6,7,8,9,10,11); #define Fan 3 inti=,j=,k=,n=; voidsetup() { Serial.begin(9600); lcd.begin(16,2); pinMode(Fan,OUTPUT); pinMode(Light,OUTPUT); pinMode(TV,OUTPUT); //digitalWrite(13,HIGH); lcd.print(«Remote Controlled»); lcd.setCursor(,1); lcd.print(«Home Automation»); delay(2000); lcd.clear(); lcd.print(«Circuit Digest»); lcd.setCursor(,1); delay(1000); lcd.print(«System Ready…»); delay(1000); irrecv.enableIRIn();// Start the receiver irrecv.blink13(true); lcd.clear(); lcd.setCursor(,); lcd.print(«Fan Light TV «); lcd.setCursor(,1); lcd.print(«OFF OFF OFF»); } voidloop() { if(irrecv.decode(&results)) { Serial.println(results.value,HEX); delay(100); lcd.setCursor(,); lcd.print(«Fan Light TV»); if(results.value==0x1FE00FF) { i++; intx=i%2;// вычисление остатка от деления на 2 digitalWrite(Fan,x); lcd.setCursor(,1); if(x) lcd.print(«ON «); else lcd.print(«OFF «); // delay(200); } elseif(results.value==0x1FEF00F)// key 1 { j++; intx=j%2; digitalWrite(Light,x); lcd.setCursor(6,1); if(x) lcd.print(«ON «); else lcd.print(«OFF «); // delay(200); } if(results.value==0x1FE9867) { k++; intx=k%2; digitalWrite(TV,x); lcd.setCursor(13,1); if(x) lcd.print(«ON «); else lcd.print(«OFF»); // delay(200); } if(results.value==0x1FE48B7) { n++; intx=n%2; digitalWrite(TV,x); digitalWrite(Fan,x); digitalWrite(Light,x); lcd.setCursor(,1); if(x) lcd.print(«ON ON ON «); else lcd.print(«OFF OFF OFF»); //delay(200); } irrecv.resume();// Receive the next value //delay(100); } } |
Step 6: Recognizing IR Signals
(Vout) Pin 1 to pin 11(Arduino)(GND) Pin 2 to GND(Arduino) (Vcc) Pin 3 to 5v(Arduino)
Now open up granola cereal, wait no, I meant serial monitor. Aim your remote at the sensor and press the POWER button. You should see a list of numbers show. Now you can see we got the numbers: 16753245 4294967295 4294967295 4294967295 Notice you if hold down whatever button you were pressing that the second number just repeats itself. 16753245 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 Note what happens if you press another button 16736925 4294967295 4294967295 4294967295 4294967295You get a different first number, and the same second number! Obviously, we just need to use the first number. Try hitting different buttons on the remote. You will notice that each different button has a different first number. So what you need to do is to open up serial monitor press each button, carefully recording the first number. For example: I press the power button and the mode button, so in my text editor program, I’ll type, Power button = 16753245 Mode button = 16736925 And you do this for every button you need! With this knowledge we can construct some code!
Hardware Requirements
TODO: Add part numbers of known-good infrared LEDs and receivers. The LED
in this photo is Lumex OED-EL-8L (Digikey 67-1000-ND) and the receiver is
probably Sharp GP1UD281YK0F (now discontinued, Digikey 425-1987-ND).
TODO: Test Vishay TSOP39338 receiver (Digikey 751-1390-5-ND). It’s very
likely to work. Update this photo. Maybe PJRC should sell a known-good
LED & receiver pair?
For transmitting, you must connect the LED to a specific pin. The receiver
output may be connected to any pin.
Board | ReceivePin | TransmitPin | TimerUsed | PWM PinsDisabled |
---|---|---|---|---|
Teensy 4.1 / 4.0 | Any | 8 | FlexPWM1.3 | None |
Teensy 3.6 / 3.5 | Any | 5 | CMT | None |
Teensy 3.2 / 3.1 | Any | 5 | CMT | None |
Teensy 3.0 | Any | 5 | CMT | None |
Teensy LC | Any | 16 | FTM1 | 17 |
Teensy 2.0 | Any | 10 | 4 | 12 |
Teensy 1.0 | Any | 17 | 1 | 15, 18 |
Teensy++ 2.0 | Any | 1 | 2 | |
Teensy++ 1.0 | Any | 1 | 2 |
Introduction: How to Use IR Remotes With Arduino
By HavocRCYoutubeFollow
More by the author:
About: 19 year old hobbyiest and future EE.
More About HavocRC »
I’m tired of these complicated tutorials on how to use certain things. I like simple, easy to understand, step by step instructions. My biggest problem was with IR and POV*. I’ve finally mastered how to control my project with any TV remote in a few minutes. In this i’ble I’m going to show you simple, step by step instructions on how to control just about anything with your IR remote. By the way this tutorial is new and updated and works! Last update [ 10/12/2015 ]
IMPORTANT NOTICE:
With the latest release of the Arduino IDE there is a conflicting library that renders this tutorial void. If you’d still like to use this tutorial delete the library called «RobotIRemote». This file will be in the Arduino program. Instructions for deleting this file is in step 3.
This library is for a specific robot that Arduino/venders sell. Unless you intend on buying that shield you can delete that folder and continue with this set of instructions. You can always download it again later!
Зажигаем светодиоды в случайном порядке, или знакомимся с оператором случайных чисел…
Всем привет! Продолжаем изучать наш ардуино конструктор и сегодня продолжим тему светодиодов. Кто-то скажет что было уже — сколько можно? Ответим на этот раз будет гораздо интереснее. До сих пор мы работали с одним активным светодиодом, а теперь давайте попробуем включить их побольше, скажем этак 7-8 светодиодов. Но при этом заставим их мигать совершенно случайно. Эффект при этом должен получиться очень интересным.
С чего будем начинать? Правильно с скетча. Хотя лучше пожалуй рассказать сейчас поподробнее о новом операторе случайных чисел: random (x,y). Все очень просто: этот оператор просто будет генерировать случайные числа в диапазоне от х до y. Именно это свойство мы и используем
Далее приведем и скетч:
void setup()
{
// инициализация пинов как выходы
for (int i=2; i
Процедура гашения происходит точно так же.
Как говориться теорию мы изучили. Пора перейти к практике. Кстати несмотря на кажущуюся сложность схемы, собрать ее на макетной плате (бредборде) очень просто. На все про все уйдет не более пяти минут. И вот наконец все подключено, проверено и можно будет запускать. Запуск состоит из перезаписи скетча в микроконтроллер. Просто подключаем шнур от плате к компьютеру, вызываем программу и записываем скетч…
И вот как говориться все получилось. Конечно же лучше все это увидеть не на фотографиях а на видео. кроме того видео получилось не просто с демонстрации собранной мигалки, но так же немного затрагивает (главное дает возможность задуматься) некоторые вопросы ардуино (в плане сборки самодельного конструктора, и так же заострил я одну проблему). Приятного просмотра! Вот теперь все на сегодня! Удачи в ваших самоделках!
https://youtube.com/watch?v=vpcKmPzjVL0
How to Connect an IR Receiver to the Arduino
There are several different types of IR receivers, some are stand-alone, and some are mounted on a breakout board. Check the datasheet for your particular IR receiver since the pins might be arranged differently than the HX1838 IR receiver and remote set I am using here. However, all IR receivers will have three pins: signal, ground, and Vcc.
Lets get started with the hardware connections. The pin layout on most breakout boards looks like this:
The pinout of most stand-alone diodes is like this:
To connect a breakout board mounted IR receiver, hook it up to the Arduino like this:
To connect a stand-alone receiver diode, wire it like this:
Устройство ИК приемника. Принцип работы
Приемники инфракрасного излучения получили широкое применение в электронной технике, благодаря своей доступной цене , простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники.
Принцип работы IR ресивера. Обработка сигнала от пульта ДУ
ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.
Под действием инфракрасного излучения в фотодиоде, у которого между p
и n
областями создана дополнительная область из полупроводника (i
-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, защищающий приемник от помех. Помехи могут создавать любые бытовые приборы.
Полосовой фильтр настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц. Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть с той же частотой, на которую настроен фильтр в IR приемнике. После фильтра сигнал поступает на амплитудный детектор, интегрирующий фильтр и выходной транзистор.
Basic Usage
Receiving
IRrecv
Create the receiver object, using a name of your choice.
enableIRIn
Begin the receiving process. This will enable the timer interrupt
which consumes a small amount of CPU every 50 µs.
decode
Attempt to receive a IR code. Returns true if a code was received,
or false if nothing received yet. When a code is received, information
is stored into «results».
results.decode_type: Will be one of the following:
NEC,
SONY,
RC5,
RC6, or
UNKNOWN.
results.value: The actual IR code (0 if type is UNKNOWN)
results.bits: The number of bits used by this code
results.rawbuf: An array of IR pulse times
results.rawlen: The number of items stored in the array
resume
After receiving, this must be called to reset the receiver and prepare it to receive another code.
blink13true
Enable blinking the LED when during reception. Because you can’t see infrared light,
blinking the LED can be useful while troubleshooting, or just to give visual feedback.
Transmitting
IRsend
Create the transmit object. A fixed pin number is always used, depending on which timer the
library is utilizing.
sendNEC
Send a code in NEC format.
sendSony
Send a code in Sony format.
sendRC5
Send a code in RC5 format.
sendRC6
Send a code in RC6
sendRaw
Send a raw code. Normally you would obtain the contents of rawbuf and rawlen
by using the receiver many times and averaging the results. Some adjustments
may be necessary for best performance. The frequency is the expected bandpass
filter frequency at the receiver, where 38 is the most commonly used.
Инструкция по изготовлению лодки с пультом
Проверку работы ИК-приемника и сервомотора на Ардуино лучше проводить с отключенным электромоторчиком, поскольку он будет создавать сильные вибрации при работе. На этом этапе тестирования проекта следует лишь оценить подвижность киля и отцентровать рычаг привода на сервомоторе. Необходимо сделать так, чтобы при нажатии кнопки «вперед» или «стоп» на пульте, киль вставал по центру.
1. Изготовление корпуса лодки из пеноплекса
Изготовление корпуса лодки на Ардуино своими руками
Размеры и форма лодки могут быть абсолютно разными — все зависит лишь от фантазии. Что касается прорезей, то они должны соответствовать размерам деталей. На трафарете (слева-направо) размечены прорези для: платы Ардуино UNO, сервомотора, привода киля и микромоторчика. Учтите, что привод от сервомотора к килю должен свободно ходить в прорези, для этого надо точно рассчитать радиус.
2. Изготовление деталей для привода и управления
Изготовление деталей для привода и управления лодкой
Киль можно изготовить из любого материала — пластик, дерево и т.д. Стержень от ручки, прикрепленный к килю служит осью, на котором он поворачивается. Скрепка на киле обеспечивает подвижное соединение киля и рычага сервомотора из проволоки. Размер и конструкция привода сервомотора будет зависеть от конструкции лодки. Винт изготавливается из стержня шариковой ручки и куска пластиковой баночки.
Сборка деталей для привода радиоуправляемой лодки
3. Сборка лодки на Ардуино с управлением
Для начала следует установить плату, сервопривод и двигатель
В этом проекте мы обошлись без использования макетной платы. Если вспомнить схему подключения ИК приемника к Ардуино, то она очень проста (слева-направо): A0 — GND — 5V и не требует расходов на приобретение макетной платы. Транзистор мы использовали в этой схеме для включения советского электромоторчика от 3,3 V.
Сборка электрической схемы лодки на ИК управлении
Транзистор размещен на пинах 12, 11 и 10. На Pin11 (средняя ножка транзистора — это база) мы подаем напряжение для включения электродвигателя. Pin12 и Pin10 в скетче не используются, поэтому служат нам эмиттером и коллектором. К Pin12 подключен выход 3,3 V, а к Pin10 подключен электромоторчик (красный плюсовой провод).
4. Крепление привода винта на валу двигателя
Разогрейте стержень от ручки над паяльником и он зайдет на вал двигателя
Винт для судна изготавливается из любой пластиковой баночки или корпуса с небольшим закруглением, например, баночка от витаминок или корпус от клея-карандаша. Для начала необходимо вырезать из пластика винт в форме восьмерки, а затем выпрямить противоположные края винта, используя высокую температуру для размягчения пластика. Смотрите фото винта для лодки Ардуино выше.
Скетч для лодки на Ардуино с ИК пультом
#include <IRremote.h> // библиотека для IR-приемника #include <Servo.h> // библиотека для сервомотора // Замените коды команд от пульта ДУ на свои значения #define forward 16736925 #define left 16769565 #define right 16754775 #define turm_left 16712445 #define turm_right 16711935 #define stope 16755285 Servo servo; // присваиваем имя сервомотору int RECV_PIN = A0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); // подключаем монитор, чтобы узнать коды кнопок пульта irrecv.enableIRIn(); pinMode(11, OUTPUT); pinMode(13, OUTPUT); pinMode(A0, INPUT); servo.attach (7); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); // выводим на монитор порта коды с пульта ДУ if (results.value == left) { servo.write(60); digitalWrite(11, HIGH); } if (results.value == right) { servo.write(120); digitalWrite(11, HIGH); } if (results.value == turm_left) { servo.write(10); digitalWrite(11, HIGH); } if (results.value == turm_right) { servo.write(170); digitalWrite(11, HIGH); } if (results.value == forward) { servo.write(90); digitalWrite(11, HIGH); } if (results.value == stope) { servo.write(90); digitalWrite(11, LOW); } irrecv.resume(); // Ждем следующий сигнал от пульта } }
В случае успешного тестирования ИК-управления сервомотором, можно приступать к испытанию проекта на Ардуино для начинающих в реальных условиях. Но перед этим обязательно позаботьтесь о защите электрических схем и микроконтроллера от возможных брызг воды и влаги. Для этого можно использовать пищевую пленку (пленка свободно пропустит ИК сигнал от пульта дистанционного управления).
Как подключить ИК приемник к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- IR приемник;
- пульт ДУ;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа» и «папа-мама».
Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.
Схема подключения ИК приемника к аналоговому порту Ардуино
Скетч для ИК приемника Arduino со светодиодом
#include <IRremote.h> // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала Serial.begin(9600); // подключаем монитор порта pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output») pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput») } void loop() { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value); // отправляем полученные данные на порт // включаем и выключаем светодиод, в зависимости от полученного сигнала if (results.value == 16718055) { digitalWrite(12, HIGH); } if (results.value == 16724175) { digitalWrite(12, LOW); } irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } }
Пояснения к коду:
- библиотека содержит набор команд и позволяет упростить скетч;
- оператор присваивает получаемым сигналам от пульта дистанционного управления имя переменной .
ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях .
Скетч для ИК приемника Ардуино и серовомотора
#include <IRremote.h> // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; #include <Servo.h> // подключаем библиотеку для серво Servo myservo; // создаем объект для управления серво void setup() { irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала Serial.begin(9600); // подключаем монитор порта myservo.attach(9); // указываем пин для подключения серво } void loop() { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value); // отправляем полученные данные на порт // поворачиваем серво, в зависимости от ИК сигнала if (results.value == 16718055) { myservo.write(0); } if (results.value == 16724175) { myservo.write(90); } irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } }
Пояснения к коду:
- в условиях следует поставить свои значения, они будут появляться на мониторе порта при нажатии кнопок на пульте ду.
Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть с той же частотой, на которую настроен фильтр в IR приемнике. Поэтому не каждый пульт дистанционного управления подойдет для работы. Следует подбирать IR приемник и IR передатчик с одной частотой. После фильтра сигнал поступает на амплитудный детектор, интегрирующий фильтр и выходной транзистор.
Управляй телевизором силой мысли и Arduino
Название проекта: Управляй телевизором силой мысли и ArduinoПлатформа: Arduino
Пульт от телевизора больше не нужен. Все что нужно сделать – это подумать о смене канала. В проекте использован чип из игры Star Wars Force Trainer (Звездные войны), выпущенной в 2009 году.
Использованные компоненты: Arduino UNO, игра Star Wars Force Trainer, ИК-приемник / ИК-передатчик
,
Сайт проекта: http://goo.gl/8lwjjp
Если вы когда-нибудь мечтали переключать каналы телевизора, просто думая, об этом, то этот arduino-проект – ваша удача. Не только системы “умный дом”, но и магия становятся реальностью.
Более того, некоторые проекты мейкеров доказывают, что фантастические трюки можно сделать самому, затратив при этом не много средств.
Она включает в себя гарнитуру, способную обнаруживать электрические поля разума (по аналогии с ЭЭГ). Сигналы ретранслируются и вентилятор поднимает мяч, находящийся в трубе, в воздух. Иллюзия левитации. Сила работы вентилятора зависит от мыслей пользователя.
https://youtube.com/watch?v=jIIm9sU681c
Мейкер разобрал игру и обнаружили чип NeuroSky ЭЭГ, встроенный в гарнитуру, который он решил подключить к Arduino Uno (ATmega328), чтобы собирать и преобразовывать исходные данные ЭЭГ на компьютере. В проекте также были использованы ИК-приемник и ИК-передатчик от старого видеомагнитофона.
Чтобы посмотреть какие сигналы передает пульт дистанционного управления на ИК-приемник при нажатии кнопок достаточно воспользоваться Serial-монитором, предварительно загрузив в arduino простую программу.
Код кнопки нужно записать для последующего использования. Написав совсем немного строк кода, мейкер создал умопомрачительный проект. Шлем позволяет переключать каналы на ТВ и выключать его питание, просто путем сосредоточения мыслей.
Исходный код проекта можно скачать на GitHub.
Другие проекты на этой платформе:
- Робот на Arduino, управляемый с помощью жестов
- Как сделать аниматронный хвост
- Вездеход из Lego с видео и bluetooth на Raspberry Pi
- Робот Juno: изучай Arduino и программирование
- Робот-манипулятор из настольной лампы IKEA
- Arduino-робот, объезжающий препятствия
- Роботизированная интеллектуальная система — РИС
- Серво-выключатель света для умного дома
- Робот-рыба на Arduino
- Сделай сам большого человекоподобного робота
Скетч для Arduino
- ir-servo-robot.ino
-
// библиотека для ИК приёмника #include <IRremote.h> // подключаем библиотеку для работы с сервоприводами #include <Servo.h> // создаём объект для управления сервоприводом Servo myservoFordL; Servo myservoFordR; Servo myservoBackL; Servo myservoBackR; // даем имя пину подключения ИК приёмника int RECV_PIN = 4; // указываем к какому пину подключен ИК приёмник IRrecv irrecv(RECV_PIN); decode_results results; void setup() { // запускаем работу ИК приемника irrecv.enableIRIn(); // подключаем сервоприводы myservoFordL.attach(8); myservoFordR.attach(9); myservoBackL.attach(10); myservoBackR.attach(11); } void loop() { // принимаем данные с ИК пульта // в зависимости от нажатой кнопки пульта // даём разные команды роботу if (irrecv.decode(&results)) { if (results.value == 0x1689609F) { ford(); } else if (results.value == 0x1689B847) { back(); } else if (results.value == 0x168910EF) { left(); } else if (results.value == 0x16899867) { right(); } else if (results.value == 0x168938C7) { stop(); } // ждем следующее значение irrecv.resume(); } //делаем задержку delay(100); } // функция движение вперёд void ford() { myservoFordL.write(); myservoFordR.write(180); myservoBackL.write(); myservoBackR.write(180); } // функция движение назад void back() { myservoFordL.write(180); myservoFordR.write(); myservoBackL.write(180); myservoBackR.write(); } // функция поворота налево void left() { myservoFordL.write(180); myservoFordR.write(180); myservoBackL.write(180); myservoBackR.write(180); } // функция поворота направо void right() { myservoFordL.write(); myservoFordR.write(); myservoBackL.write(); myservoBackR.write(); } // функция остановки void stop() { myservoFordL.write(90); myservoFordR.write(90); myservoBackL.write(90); myservoBackR.write(90); }