Инструменты пользователя

Перевод этой страницы:

Инструменты сайта


Боковая панель

Для чего нужен ОрбиКрафт

Подсистемы конструктора

Инструкции по работе с ОрбиКрафт

Уроки

Лабораторная оснастка

Знакомство с Arduino

Полезная нагрузка на базе Arduino

Обратная связь

Новости

arduino_s_09

9. ИК приемник и пульт

9.1 Назначение ИК-приемника

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. ИК-датчик воспринимает инфракрасный сигнал только на частоте 38 кГц (иногда 40кГц). Именно такое свойство позволяет датчику игнорировать много посторонних световых шумов от ламп освещения и солнца. Сигналы датчик принимает от пульта с ИК излучателем. Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники.

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

  • слева будет — выход на контроллер;
  • по центру — отрицательный контакт питания (земля);
  • и справа — положительный контакт питания (2.7 — 5.5В).

9.2 Распознавание сигналов с пульта

9.2.1 Собираем схему с ИК-приемником

9.2.2 Программа для распознавания сигналов с пульта

#include "IRremote.h"   //подключаем библиотеку
IRrecv irrecv(2);       // указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
 
void setup() {
  Serial.begin(9600); 	//настраиваем работу с монитором порта
  irrecv.enableIRIn();	//запускаем прием ИК сигнала
}
 
void loop() {
  if ( irrecv.decode( &results )) {      	//если данные пришли
    Serial.println( results.value, HEX );	//выводим их в монитор порта
    irrecv.resume();                     	//принимаем следующую команду
  }
}

9.3 Включение светодиода с пульта

9.3.1 Собираем схему с ИК-приемником и светодиодом

9.3.2 Программа для включения светодиода с пульта

#include "IRremote.h" 	//подключаем библиотеку
IRrecv irrecv(2);    	// указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6;         	//объявляем светодиод
 
void setup() {
  pinMode(led, OUTPUT);	//настраиваем пин светодиода как выход
  Serial.begin(9600); 	//настраиваем работу с монитором порта
  irrecv.enableIRIn();	//запускаем прием ИК сигнала
}
 
void loop() {
  if ( irrecv.decode( &results )) {        //если данные пришли
    Serial.println( results.value, HEX );  //выводим их в монитор порта
    switch ( results.value ) {
      case 0xFF30CF:            //если нажимаем клавишу "1", то светодиод включается               	 
        digitalWrite(led, HIGH);
        break;
      case 0xFF6897:            //если нажимаем клавишу "0", то светодиод выключается
        digitalWrite(led, LOW);
        break;
    }    
  irrecv.resume();        	//принимаем следующую команду
  }   
}

9.3.3 Управляем яркостью светодиода с пульта

#include "IRremote.h"  	//подключаем библиотеку
IRrecv irrecv(2);     	// указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6;          	//объявляем светодиод
int brightness;       	//создаем переменную, задающую яркость свечения светодиода
 
void setup() {
  pinMode(led, OUTPUT);	//настраиваем пин светодиода как выход
  Serial.begin(9600);  	//настраиваем работу с монитором порта
  irrecv.enableIRIn(); 	//запускаем прием ИК сигнала
}
 
void loop() {
  if ( irrecv.decode( &results )) {      	//если данные пришли
    Serial.println( results.value, HEX );	//выводим их в монитор порта
    analogWrite(led, brightness);
    switch ( results.value ) {
      case 0xFFA857:          //если нажимаем клавишу "+", то яркость увеличивается на 10
        brightness = brightness + 10;
        break;
      case 0xFFE01F:          //если нажимаем клавишу "-", то яркость уменьшается на 10
        brightness = brightness - 10;
        break;
    }    
    irrecv.resume();     	//принимаем следующую команду
  }
}

9.4 Передача ИК сигналов между двумя Arduino

9.4.1 Собираем схему передатчика с ИК-светодиодом

9.4.2 Собираем схему с ИК-приемником и светодиодом

9.4.3 Программируем ИК-передатчик

void setup()
{
  pinMode(4, OUTPUT);
}
 
void loop()
{
  digitalWrite(4, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(4, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}

9.4.4 Программируем ИК-приемник

#include "IRremote.h" 	//подключаем библиотеку
IRrecv irrecv(2);    	// указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6;         	//объявляем светодиод
 
void setup() {
  pinMode(led, OUTPUT);	//настраиваем пин светодиода как выход
  Serial.begin(9600); 	//настраиваем работу с монитором порта
  irrecv.enableIRIn();	//запускаем прием ИК сигнала
}
 
void loop() {
  if ( irrecv.decode( &results )) {        //если данные пришли
    digitalWrite(led, HIGH);
  else {
    digitalWrite(led, LOW);
  }    
  irrecv.resume();        	//принимаем следующую команду
}

Подробнее о switch…case можно прочитать здесь http://arduino.ru/Reference/SwitchCase

Задание

1. Подключите сервомотор к Arduino и запрограммируйте управление поворотом сервомотора с ПДУ.

arduino_s_09.txt · Последние изменения: 2020/06/15 14:03 — golikov

Инструменты страницы