Сайт о телевидении

Сайт о телевидении

» » Управление нагрузкой с Arduino. Информационный портал по безопасности

Управление нагрузкой с Arduino. Информационный портал по безопасности

Ардуино идеально подходит для управления любыми устройствами. Микропроцессор ATmega с помощью программы-скетча манипулирует большим количеством дискретных выводов, аналогово-цифровых входов/выводов и ШИМ-контроллерами.

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

Принцип управления нагрузкой через Ардуино

Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.

Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете. Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.

Синтаксис команд

Цифровой вывод:

pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных;
digitalWrite(12, HIGH); — подаём на дискретный выход 12 логическую единицу, зажигая светодиод.

Аналоговый вывод:

analogOutPin = 3; – задаём порт 3 для вывода аналогового значения;
analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В. Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение.

Способы управления светодиодами через Ардуино

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

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

Виды транзисторных ключей

  • Биполярный;
  • Полевой;
  • Составной (сборка Дарлингтона).
Способы подключения нагрузки
Через биполярный транзистор Через полевой транзистор Через коммутатор напряжения

При подаче высокого логического уровня (digitalWrite(12, HIGH);) через порт вывода на базу транзистора через цепочку коллектор-эмиттер потечет опорное напряжение на нагрузку. Таким образом можно включать и отключать светодиод.

Аналогичным образом работает и полевой транзистор, но поскольку у него вместо «базы» сток, который управляется не током, а напряжением, ограничительный резистор в этой схеме необязателен.

Биполярный вид не позволяет регулировать мощные нагрузки. Ток через него ограничен на уровне 0,1-0,3А.

Полевые транзисторы работают с более мощными нагрузками с током до 2А. Для ещё более мощной нагрузки используют полевые транзисторы Mosfet с током до 9А и напряжением до 60В.

Вместо полевых можно использовать сборку Дарлингтона из биполярных транзисторов на микросхемах ULN2003, ULN2803.

Микросхема ULN2003 и принципиальная схема электронного коммутатора напряжения:

Принцип работы транзистора для плавного управления светодиодной лентой

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

Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.

Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.

Схема подключения LED ленты к ардуино:

Управление RGB лентой с помощью Andurino

Кроме однокристальных светодиодов, Ардуино может работать и с цветными LED. Подключив выводы каждого цвета к аналоговым выходам Ардуино можно произвольно изменять яркость каждого кристалла, добиваясь необходимого цвета свечения.

Схема подключения к Arduino RGB светодиода:

Аналогично построено и управление RGB лентой Arduino:

Аrduino RGB контроллер лучше собирать на полевых транзисторах.

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

Скетч управления яркостью светодиодной ленты Arduino

int led = 120; устанавливаем средний уровень яркости

void setup() {
pinMode(4, OUTPUT); устанавливаем 4й аналоговый порт на вывод
pinMode(2, INPUT);

pinMode(4, INPUT); устанавливаем 2й и 4й цифровой порт на ввод для опроса кнопок
}
void loop(){

button1 = digitalRead(2);

button2 = digitalRead(4);
if (button1 == HIGH) нажатие на первую кнопку увеличит яркость
{
led = led + 5;

analogWrite(4, led);
}
if (button2 == HIGH) нажатие на вторую кнопку уменьшит яркость
{
led = led — 5;

analogWrite(4, led);
}

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

Модули управления Ардуино

Для создания полноценного драйвера управления светодиодной лентой можно использовать модули-датчики.

ИК-управление

Модуль позволяет запрограммировать до 20 команд.

Радиус сигнала около 8м.

Цена комплекта 6 у.е.

По радиоканалу

Четырёхканальный блок с радиусом действия до 100м

Цена комплекта 8 у.е.

Позволяет включать освещение еще при приближении к квартире.

Бесконтактное

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

Радиус действия до 5м.

Цена модуля 0,3 у.е.

Когда-нибудь задумывались о том, чтобы управлять любыми электронными устройствами с помощью смартфона? Согласитесь, управлять роботом или любыми другими устройствами с вашего смартфона было бы очень круто. Предлагаем простой урок для начинающих и чайников о том как с помощью Arduino через Bluetooth управлять смартфоном. Если вам после этого урока захочется познакомиться с Arduino поближе - вы можете найти книги о нём .

Устройства

Модуль - Bluetooth Module HC 05/06
Плата - Arduino
Светодиод (LED)
Резистор - 220Ω
Android-устройство

Программное обеспечение

Arduino IDE
Android Studio (на самом деле не нужно, т.к. приложение для Андроида вы найдете ниже)

Шаг 2. Как это работает

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

Шаг 3. Начинаем собирать схему

Цепь в нашем уроке настолько проста и мала, что нам нужно сделать всего несколько соединений:

Arduino Pins___________Bluetooth Module Pins
RX (Pin 0)___________________TX
TX (Pin 1)___________________RX
5V_________________________VCC
GND_______________________GND

Подключите минус светодиода к GND на Arduino, а плюс к контакту 13 через сопротивление 220 Ом - 1 кОм. В целом, на нашем рисунке ниже всё довольно наглядно.

Не подключайте RX к RX и TX к TX выходы Bluetooth к выходам Arduino, вы не получите никаких данных, здесь TX означает "передача", RX означает "прием".

Теперь нам нужно написать программу и загрузить её в наш Arduino. Если вы этого пока еще не умеете делать - скачайте книги . Код ниже именно то, что нам нужно загрузить в Ардуино.

/* Bluetooh Basic: LED ON OFF * Coder - Mayoogh Girish * Website - http://bit.do/Avishkar * Download the App: https://github.com/Mayoogh/Arduino-Bluetooth-Basic * This program lets you to control a LED on pin 13 of arduino using a bluetooth module */ char data = 0; //Variable for storing received data void setup() { Serial.begin(9600); //Sets the baud for serial data transmission pinMode(13, OUTPUT); //Sets digital pin 13 as output pin } void loop() { if(Serial.available() > 0) // Send data only when you receive data: { data = Serial.read(); //Read the incoming data and store it into variable data Serial.print(data); //Print Value inside data in Serial monitor Serial.print("\n"); //New line if(data == "1") // Checks whether value of data is equal to 1 digitalWrite(13, HIGH); //If value is 1 then LED turns ON else if(data == "0") // Checks whether value of data is equal to 0 digitalWrite(13, LOW); //If value is 0 then LED turns OFF } }

Шаг 5. Как происходит процесс

Модуль HC 05/06 работает по последовательному каналу связи. Андроид-приложение последовательно отправляет данные на модуль Bluetooth, когда вы нажимаете определенную клавишу. Bluetooth на другом конце получает данные и отправить на Arduino через TX-соединение модуля Bluetooth (RX-соединение Arduino) .

Код загруженный в Arduino проверяет полученные данные и сравнивает их. Если получена "1" - светодиод включается и выключается при получении "0". Откройте монитор последовательного порта и наблюдайте полученные данные.

Шаг 6. Приложение для Андроид-устройств

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

Как использовать приложение?

После того как мы подключились через Bluetooth - нам нужно скачать и установить приложение, которое при помощи смартфона 🙂 будет управлять нашим светодиодом на расстоянии. Скачать приложение вы можете бесплатно на сайте Амазон.ком. Подсоединяем смартфон к модулю Bluetooth HC 05/06:

  1. Включите модуль HC 05/0
  2. Ищем устройство
  3. Соединяемся с HC 05/06 введя дефолтный пароль "1234" или "0000" (четыре нуля).

После этого мы устанавливаем приложение на наш смартфон. Открываем его. Выбираем устройство - выбираем модуль Bluetooth из списка (HC 05/06). После успешного подключения нажмите кнопку ON для включения светодиода и кнопку OFF, чтобы выключить светодиод. Потом уже можно нажать кнопку "Отключить", чтобы отключиться от модуля Bluetooth.

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

В статье рассмотрено как передавать команды Arduino для удаленного управления периферийными устройствами.

Рассмотрен простейший пример: управление двигателем постоянного тока. Уверен, многим этот пример будет интересен, так это основа автоматизации вашего умного дома. Использовать приведенный ниже материал можно для управления жалюзи или ролетами, в которых тоже используются двигатели постоянного тока, но большей мощности. Для реализации проекта вам понадобятся Arduino и некоторые навыки работы с Node.js и JavaScript.

Оборудование и софт, которые вам понадобятся

Кроме Arduino Uno и монтажной платы, вам понадобятся:

  • двигатель постоянного тока, с номинальным напряжением около 5 Вольт, чтобы запитать его непосредственно от Arduino. Могут подойти даже двигатели от игрушек: детских машинок и т.п.
  • в этом проекте мы будем вращать вал двигателя в двух направлениях. Если мы используем транзистор, вращение будет только в одну сторону. Для реализации вращения в двух направлениях, задействуем драйвер двигателя .

Полный список необходимых компонентов для проекта:

  • плата Arduino Uno R3;
  • драйвер двигателя L293D;
  • двигатель постоянного тока 5 В;
  • монтажная плата и коннекторы.

Кроме того, вам понадобится Node.js. В нем мы реализуем пользовательский интерфейс. Скачать Node.js

Подключение оборудования

Нам необходимо правильно подключить двигатель и драйвер. Сначала установите на монтажную плату драйвер L293D. Рекомендуем устанавливать драйвер по центру монтажной платы, как это показано на рисунке ниже. Драйвер начинается с дорожки 3 и заканчивается на дорожке 10. Теперь подключите дорожки 8 и 9 к 5 В Arduino . Контакт 5 - к контакту GND на Arduino. Осталось 3 контакта, которые работают на вход и 2 - на выход.

Цепь, которая работает на выход, простая: два контакта output подключаем к контактам двигателя постоянного тока. Контакты output - это 3 и 6. Первый контакт для подключения - это пин 1. Так называемый Enable контакт. Это контакт, который мы используем для включения/выключения двигателя и изменения его скорости вращения. Подключите этот контакт к 6 пину на Arduino. В конце концов, мы хотим подключить контакты 2 и 7 от L293D к пинам 4 и 5 на Arduino. Эти контакты будут использоваться для изменения направления движения ротора двигателя постоянного тока. Полная схема подключения приведена на рисунке ниже:

Проверка схемы подключения

Перед реализацией удаленного управления, надо убедиться, что электросхема с драйвером L293D составлена и подключена корректно. Для проверки реализуем простенький скетч, благодаря которому двигатель разгонится и будет вращаться без остановки. Для этого используем следующий скетч:

// Инициализируем контакты мотора

int motorPinPlus = 4;

int motorPinMinus = 5;

int motorPinEnable = 6;

Serial.begin(9600);

// Объявляем переменную для хранения значений скорости

int motor_speed;

setMotor(true, motor_speed);

// функция для управления двигателем

void setMotor(boolean forward, int motor_speed)

Основа данного скетча - функция setMotor. Эту же функцию мы будем использовать в остальной части нашего проекта. Давайте разберем ее более детально:

// Функция для управления мотором

void setMotor(boolean forward, int motor_speed){

digitalWrite(motorPinPlus, forward);

digitalWrite(motorPinMinus, !forward);

analogWrite(motorPinEnable, motor_speed);

Задействовано два входа: направление и скорость. Первый шаг заключается в том, чтобы реализовать две операции digitalWrite() для установки направления вращения ротора двигателя. Один контакт на микросхеме L293D получает сигнал 5В, а второй - 0 вольт. После этого мы используем команду analogWrite(), чтобы изменять скорость вращения ротора мотора с использованием широтно-импульсной (ШИМ) модуляции. С помощью этой функции можно изменять направление вращения двигателя. Например, для ускорения мы используем:

// Вращаем ротор двигателя в заданном направлении

for (motor_speed = 0; motor_speed

setMotor(true, motor_speed);

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

Собираем все вместе

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

Во-первых, нам надо изменить скетч Arduino, чтобы он мог он мог получать данные с хоста. После этого мы используем Node.js, чтобы обеспечить красивый интерфейс пользовательский интерфейс. Если вы никогда не занимались веб-приложениями, не волнуйтесь, в гайде детально рассмотрен каждый шаг.

Давайте начнем со скетча Arduino. Это скетч, который мы используем в этой части:

// библиотеки

#include

// создаем aREST

aREST rest = aREST();

// Инициализируем пины мотора

int motorPinPlus = 4;

int motorPinMinus = 5;

int motorPinEnable = 6;

void setup(void)

// запускаем обмен данных по серийному протоколу связи и объявляем пины мотора

pinMode(motorPinPlus, OUTPUT);

pinMode(motorPinMinus, OUTPUT);

pinMode(motorPinEnable, OUTPUT);

Serial.begin(115200);

// даем имя и ID нашему устройству

rest.set_id("001");

rest.set_name("motor_control");

// Handle REST calls

rest.handle(Serial);

При изучении скетча вы увидите, что он отличается от предыдущего. В нем тот же блок для инициализации контактов двигателя, но есть еще aREST для получения команд. Например, чтобы установить заданную скорость мотора, мы реализуем запрос с компьютера вида:

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

Последний блок состоит в разработке веб-интерфейса для удаленного управления скоростью мотора. Для этого мы будем использовать Node.js, который позволяет разрабатывать приложения, работающие на стороне сервера в Javascript. Этот туториал не про Node.js или Javascript, но основные моменты надо рассмотреть. Конечно же, все файлы прилагаются на GitHub .

Нам надо создать три файла: главный файл Node.js, сам интерфейс и кусок Javascript для обработки кликов в нашем пользовательском интерфейсе. Давайте начнем с файла Node.js. Код начинается с подгружения и настройки модуля Express, который представляет из себя фреймворк для простого создания сервера с Node.js:

var express = require("express");

var app = express();

// Объявляем порт

var port = 3000;

// Отображаем движок

app.set("view engine", "jade");

// Настраиваем общедоступную папку

app.use(express.static(__dirname + "/public"));

// Интерфейс

app.get("/", function(req, res){

res.render("dashboard");

После этого мы импортируем модуль Node-aREST, который обеспечивает связь между нашим сервером и платой Arduino:

var rest = require("arest")(app);

В этом файле мы также должны определить, к какому серийному порту подключена плата Arduino:

rest.addDevice("serial","/dev/tty.usbmodem1a12121",115200);

Конечно же, вам надо изменить это значение в соответствии с вашим серийным портом. Найти ваш серийный порт можно в Arduino IDE в меню Tools>Port.

Давайте заглянем в файл интерфейса, который расположен в dashboard.jade. Jade - язык, который по сути упрощает написание HTML - разметки. В Jade содержится описание интерфейса, который потом обрабатывается с помощью Node.js & Express. Ниже приведен Jade файл для нашего проекта. В нем создаются две кнопки (для направлений) и один слайдер (для изменения скорости двигателя):

h1 Motor Control

button.btn.btn-block.btn-lg.btn-primary#1 Forward

button.btn.btn-block.btn-lg.btn-danger#2 Reverse

input(type="range",min="0",max="255",value="0",id="motorspeed")

В конце мы должны добавить Javascript для обработки кликов пользователя по кнопкам и слайдеру. Это код для кнопки ‘Forward’ ("Вперед"):

$("#1").click(function() {

$.get("/motor_control/digital/4/1", function() {

$.get("/motor_control/digital/5/0");

Как мы видим, пин 4 установлен в HIGH, а пин 5 в LOW. Другие кнопки отрабатывают с точностью до наоборот. То есть, при их нажатии, мотор будет двигаться в противоположном направлении.

Для того, чтобы установить скорость мотора, мы определяем, когда пользователь отпустил слайдер. Реализуется это с помощью mouseup():

$("#motorspeed").mouseup(function(){

// Получаем значение скорости

speed = $("#motorspeed").val();

// Отсылаем команду

$.get("/motor_control/analog/6/" + speed);

Теперь можем перейти к тестированию проекта удаленного управления двигателем через веб-сайт. Не забывайте, что все исходники кода для программ, вы можете найти на GitHub . Сначала загрузите скетч remote_motor на Arduino. После этого убедитесь, что вы загрузили все файлы интерфейса и настроили ваш серийный порт в главном файле app.js.

Перейдите в эту папку через терминал и пропишите следующее:

sudo npm install express jade arest

После этого запустите приложение с помощью:

После этого вы можете перейти в ваш браузер и набрать в строке адреса следующее:

http://localhost:3000

В результате отобразится следующий интерфейс:

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

Дальнейшие направления развития проекта

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

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Как управлять Ардуино с компьютера через USB. Расскажем, как произвести включение светодиода и управлять сервомотором на Arduino с компьютерной клавиатуры через функцию Serial.available() и Serial.read() . Данные функции проверяют, поступают ли какие-то команды на микроконтроллер по последовательному порту, а затем считывают поступающие команды, вводимые в Serial monitor с компьютера.

Управление Ардуино через компьютер

Функция Serial.available() получает количество байт доступных для чтения из последовательного порта. Это те байты которые отправлены с компьютера и записаны в буфер последовательного порта. Буфер Serial monitor Arduino может хранить максимум до 64 байт. Функция используется также при подключении Bluetooth модуля к Ардуино и полезна при отладке устройства на проектирования.

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

Как управлять Ардуино с клавиатуры

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод и резистор 220 Ом;
  • 1 сервопривод;
  • провода «папа-папа» и «папа-мама».

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

Скетч. Управление Ардуино с компьютера

int val; pinMode (13, OUTPUT ); // объявляем пин 13 как выход } void loop () { if (val == "1") {digitalWrite (13, HIGH );} // при 1 включаем светодиод if (val == "0") {digitalWrite (13, LOW );} // при 0 выключаем светодиод } }

Пояснения к коду:

  1. функция Serial.available() проверяет поступление команд с компьютера;
  2. функция Serial.read() читает данные, поступившие в Serial monitor.
  3. в условном операторе if (val == "1") стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.

После сборки схемы загрузите следующий скетч в плату

Скетч. Управление сервоприводом с компьютера

#include // подключаем библиотеку для сервопривода Servo servo; // объявляем переменную servo типа "servo" int val; // освобождаем память в контроллере для переменой void setup () { Serial .begin (9600); // подключаем последовательный порт servo.attach (11); // привязываем сервопривод к выходу 11 } void loop () { // проверяем, поступают ли какие-то команды if (Serial .available ()) { val = Serial .read (); // переменная val равна полученной команде if (val == "1") { servo.write (10); } // при 1 поворачиваем серво на 10 if (val == "2") { servo.write (45); } // при 2 поворачиваем серво на 45 if (val == "3") { servo.write (90); } // при 3 поворачиваем серво на 90 } }

Пояснения к коду:

  1. в некоторых примерах программ можно встретить такой вариант проверки появления данных в Serial monitor if (Serial.available()>0) .
  2. в качестве команд можно использовать не только цифры, но и буквы. При этом имеет значение какая буква — прописная или строчная.

Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Так, практически в каждом доме есть несколько таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. Но самое интересное применение инфракрасного пульта — дистанционное правление роботом. Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.

1. ИК-пульт

Что нужно для того, чтобы научить робота слушаться инфракрасного (ИК) пульта? Во-первых, нам потребуется сам пульт. Можно использовать обычный пульт от телевизора, а можно приобрести миниатюрный пульт от автомагнитолы. Именно такие пульты часто используются для управления роботами.

На таком пульте есть 10 цифровых кнопок и 11 кнопок для манипуляции с музыкой: громкость, перемотка, play, stop, и т.д. Для наших целей более чем достаточно.

2. ИК-датчик

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

Для этого урока воспользуемся популярным ИК-датчиком VS1838B , который обладает следующими характеристиками:

  • несущая частота: 38 кГц;
  • напряжение питания: 2,7 — 5,5 В;
  • потребляемый ток: 50 мкА.

Можно использовать и другие датчики, например: TSOP4838, TSOP1736, SFH506.

3. Подключение

Датчик имеет три вывода (три ноги). Если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке,

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

Принципиальная схема подключения

Внешний вид макета

4. Программа

Подключив ИК-датчик будем писать программу для Ардуино Уно. Для этого воспользуемся стандартной библиотекой IRremote , которая предназначена как раз для упрощения работы с приёмом и передачей ИК сигналов. С помощью этой библиотеки будем принимать команды с пульта, и для начала, просто выводить их в окно монитора последовательного порта. Эта программа нам пригодится для того, чтобы понять какой код дает каждая кнопка.

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

Загружаем программу на Ардуино. После этого, пробуем получать команды с пульта. Открываем монитор последовательного порта (Ctrl+Shift+M), берём в руки пульт, и направляем его на датчик. Нажимая разные кнопочки, наблюдаем в окне монитора соответствующие этим кнопкам коды.

Проблема с загрузкой программы

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

TDK2 was not declared In his scope

Чтобы ее исправить, достаточно удалить два файла из папки библиотеки. Заходим в проводник. Переходим в папку, где установлено приложение Arduino IDE (скорее всего это «C:\Program Files (x86)\Arduino»). Затем в папку с библиотекой:

…\Arduino\libraries\RobotIRremote

И удаляем файлы: IRremoteTools.cpp и IRremoteTools.h. Затем, перезапускаем Arduino IDE, и снова пробуем загрузить программу на контроллер.

5. Управляем светодиодом с помощью ИК-пульта

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

  • FFA857 — увеличение громкости;
  • FFE01F — уменьшение громкости.

В качестве светодиода, используем встроенный светодиод на выводе №13, так что схема подключения останется прежней. Итак, программа:

#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if (irrecv.decode(&results)) { // если данные пришли switch (results.value) { case 0xFFA857: digitalWrite(13, HIGH); break; case 0xFFE01F: digitalWrite(13, LOW); break; } irrecv.resume(); // принимаем следующую команду } }

Загружаем на Ардуино и тестируем. Жмем vol+ — светодиод зажигается. Жмем vol- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!