Управление светодиодом Arduino UNO через среду LabVIEW
Библиографическое описание:Борисов, А. В. Управление светодиодом Arduino UNO через среду LabVIEW / А. В. Борисов, М. А. Осипова. — Текст : непосредственный // Молодой ученый. — 2020. — № 17 (307). — С. 12-16. — URL: https://moluch.ru/archive/307/69217/ (дата обращения: 22.10.2021).
В данной статье рассматривается плата Arduino UNO среда LabVIEW, приводится программная часть реализации загорания светодиода на плате Arduino UNO с помощью управления кнопкой в среде LabVIEW.
Ключевые слова: Arduino UNO, LabVIEW, светодиод.
С помощью платы Arduino UNO можно подключать огромное количество различных периферийных устройств. Это позволит, пользователям познакомившись с Arduino, создавать необходимые им устройства.
В Среде LabVIEW разрабатываются программы, созданные на графическом языке программирования «G», с помощью которых можно подключать и управлять различными устройствами.
Цель работы: Изучить способы подключения Arduino UNO к среде LabVIEW. Реализовать управление светодиодом Arduino UNO через LabVIEW.
Необходимые библиотеки их основные элементы для работы всреде LabVIEW
Для создания схемы и подключения платы необходимо установить следующие библиотеки:
- Драйвер для Arduino uno с официального сайта Arduino.
- библиотеку VI Package Manager.
Рис. 1. Библиотека VI Package Manager
После установки дополнительной библиотеки в среде LabVIEW появится значки Arduino.
Рис. 2. Вкладка Arduino в LabVIEW
Краткое описание основных необходимых элементов для создания схемы:
- Initialize: Инициализирует соединение с Arduino, на котором выполняется эскиз LIFA.
- Close: Закрывает активное соединение с Arduino.
- Digital Write Pin: Записывает указанное значение на выбранный вывод цифрового выхода (D0-D13).
- Set Digital Pin Mode: Конфигурирует указанный цифровой вывод ввода / вывода как вход или выход. [1].
Подключение кArduinoUNO через LIFABase
Необходимо установить скетч на Arduino UNO. Открываем диск, где установлена программа и далее выбираем C://Nationals Instruments/LabVIEW2012/vi.lib/ LabVIEW Interface for Arduino/Firmware/ LIFA_Base /LIFA_Base.ino.
Делаем проверку кода и загружаем его на плату. Так же в разделе Сервис задаем порт, к которому подключена плата и выбираем тип платы Arduino UNO. Проверка, к какому порту подключена плата Arduino UNO можно посмотрев в диспетчере устройств.
Рис. 3. Загрузка LIFA Base
Создание программы управления светодиодом спомощью платы Arduino:
Теперь перейдем к созданию блок-диаграммы, подробное описание подключение каждого блока представлено ниже.
Блок Init для инициализации порта, через который подключен Arduino Uno, так же задается скорость передачи данных «Baud Rate». Указывается тип платы Arduino Uno «Board Type». При наведении на вывод блока Init выбрать create→control.
Затем создаем цикл и добавляем в него блок Set digital pin mode настраиваем, что бы был подключен 13 pin платы (pin светодиода).
К блоку Digital write pin подключаем кнопку boolean через функцию преобразования логических данных побитно в арифметические.
Добавляем блок Digital read pin и подключаем светодиодный индикатор, через который будем управлять светодиодом платы.
Добавляем блок Close для закрытия соединения с Arduino.
Полученная блок-диаграмма, с подключенными блоками представлена на рисунке 4.
Рис. 4. Готовая схема
Панель управления представляет собой переключатели для задания параметров, копку стоп, и кнопки для управления светодиодом.
Рис. 5. Панель управления
Задав все необходимые параметры платы, и нажимая на кнопку, светодиод будет гореть.
Заключение:
В данной статье представлен один из способов использования платы Arduino UNO. Рассмотрены основные блоки для работы с Arduino в среде LabVIEW
Представлено реализация управления светодиодом Arduino uno через среду LabVIEW с помощью скетча LIFA Base.
Литература:
- LabVIEW-Arduino Interfacing for Data Acquisition and Telemetry System [Электронный ресурс] researchgate.net //: [сайт]. URL:https://www.researchgate.net /publication/299602749_LabVIEW-Arduino_Interfacing_for_Data_ Acquisition_and_Telemetry _System (дата обращения: 2.03.2019)
Основные термины (генерируются автоматически): UNO, LIFA, блок, панель управления, плат, светодиод, создание схемы, среда, тип платы, управление светодиодом.
Arduino и управление светом. Схема подключения.
Итак в первой части я описал своё видение минимального функционала «умного освещения» на базе Arduino UNO и сетевого модуля с чипом w5100. В этой части расскажу, как все элементы, указанные в первой части, собрать в одну схему.
На всякий случай, сообщу, что все действия, указанные, как в этой статье, так и во всех публикациях этого сайта, вы выполняете на свой страх и риск. Если решили попробовать, то будьте осторожны.
Вся схема для наглядности выведена на изображение (кликабельно):
- R1 — резистор с номиналом 1 кОм
- R2 — резистор с номиналом 220 Ом
- R3 — резистор с номиналом 100 Ом
- C1 — конденсатор электролитический 10 мкф 50v (полярность важна)
- C2 — конденсатор керамический S104 (полярность НЕ важна)
Итак первым подключим светодиод. У светодиода есть полярность и она важна при подключении, то есть нам надо знать, где у светодиода плюс, а где минус. Длинная ножка на светодиоде — это плюс, короткая, соответственно, минус. Но если попался светодиод с одинаковыми ножками, или отпаян откуда-то, то чтобы определить полярность, понадобятся батарейка и сам светодиод. Я использовал литиевую батарейку CR2025 с номиналом 3V, такие есть на материанских платах ПК. Можно использовать и обычную батарейку, как в пультах дистанционного управления. Соединяем контакты светодиода и батарейки.
a) Если светодиод НЕ загорелся
Светодиод не «горит» из-за не правильного подключения его к батарейке
то меняем контакты местами.
b) Если светодиод загорелся, то тот контакт, который прилегает к плюсу батарейки и будет плюсом светодиода. Это показано на изображении ниже.
Теперь плюс светодиода через резистор на 220 Ом подключаем к пину №6 Arduino, минус светодиода к пину gnd Arduino. Со светодиодом это все нюансы, которые стоило пояснить.
Остальное собираем внимательно по схеме, изображенной выше.
Несколько маленьких пояснений.
Конденсатор керамический S104, необходимый для ИК-приёмника, полярности не имеет, так же как и резисторы, поэтому каким контактом и куда вы его подключите не важно.
Но вот конденсатор электролитический с номиналом 10 мкф 50v имеет плюс и минус. Минус — это опять же более короткая «ножка» конденсатора, к тому же на бочёнке есть обозначение в виде белой полосы, в которой изображены прерывистые линии — это минус. С стальным, пожалуй, сложно ошибиться, просто смотрим на схему и так же соединяем. Если для ИК-приёмника развязку вам делать не надо, то есть вы купили уже готовый модуль, то просто подключаем этот модуль к Arduino. Там так же 3-и контакта, один для питания (контакт VCC), другой(data) — на пин№7 Arduino и третий (gnd) — на gnd Arduino.
Следующая часть будет посвящена написанию кода в Arduino IDE для нашей сборки.
Arduino. Управление цифровыми выходами | CUSTOMELECTRONICS.RU
Управление выводом микроконтроллера — первый шаг, который позволит зажигать светодиоды, открывать транзисторы, передавать сигнал и т.д. В этой статье мы рассмотрим примеры программ, работающих с цифровыми выходами.
Подготовка к работе
Как уже говорилось выше, все наши примеры описаны и проверены для наших плат EduBoard и TutorShield.
Плата EduBoard имеет 20 выводов, которые можно использовать как цифровые выходы. Максимальный ток каждого вывода – 20мА. Tutor Shield позволяет к каждому из этих выводов подключить по одному светодиоду.
Перед началом работы установите на шилде 20 перемычек между выводами, выделенными на рисунке:
Установка перемычек
Первый пример
Теперь разберем пример, который мы использовали для проверки готовности платы к работе:
int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(100); }
Запустите Arduino IDE, введите этот код и загрузите его.
Это пример простейшей программы. Она состоит из трех частей:
- Объявление глобальных переменных
- Процедура настройки. Эта подпрограмма выполняется однократно при старте контроллера. В ней необходимо сконфигурировать основные параметры контроллера.
- Основной цикл. Пока контроллер включен – он будет выполнять циклически все, что написано в этой части программы.
В программе используется три функции:
- pinMode() – имеет синтаксис: pinMode(pin,mode). Предназначена для настройки режима работы вывода как выхода, или входа. Функция имеет два параметра pin (номер вывода) и mode (режим работы вывода). Выводов, которые могут быть настроены на выход у EduBoard 20, следовательно, параметр pin может принимать значения от 0 до 19. Параметр mode
- digitalWrite() – синтаксис: digitalWrite(pin,value). Если вывод настроен на выход эта функция позволяет выставить на выводе напряжение высокого или низкого уровня. Параметр pin такой же, как в предыдущей функции. Параметр value может иметь значение LOW или HIGH. Значение LOW приводит к тому, что на выводе формируется низкое напряжение, близкое к 0В. Значение HIGH выставляет на выводе напряжение питания, то есть 5В при питании от USB-порта.
- delay() – синтаксис: delay(ms). Функция вызывает задержку в программе. Единственный параметр задает время задержки в миллисекундах.
В предложенном примере сначала 13-й вывод настраивается на выход. Затем циклически происходит включение светодиода высоким уровнем напряжения, задержка на 100мс, выключение светодиода, задержка на 100мс.
Попробуйте изменить значение переменной led и убедитесь, что светодиод начнет мигать на другом выводе. Также попробуйте изменить задержку и посмотреть, как будет меняться процесс мигания.
Второй пример
Теперь попробуйте ввести в окно редактора код, предложенный ниже:
int led1 = 13; int led2 = 12; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); delay(1000); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); delay(1000); }
Эта программа мигает уже двумя светодиодами.
Использование циклов
По такому принципу можно управлять любым количеством светодиодов, но код становится громоздким и сложным для чтения. Для улучшения качества кода имеет смысл применять циклические алгоритмы, например при помощи оператора for. Пример организации цикла for:
for (int x=0; x<100; x++) {println(x);}
Строчка int x=0 инициализирует переменную x и присваивает ей начальное значение 0. x<100 – условие выполнения очередной итерации. Если условие выполняется – будет выполнен вход в цикл, если нет – выполнение цикла прекратится. x++ — инкрементирует аргумент цикла (переменная x увеличивается после каждой итерации на 1). Рассмотрим применение цикла на примере следующего кода:
void setup() { for (int i=0; i<14; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=0; i<14; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=0; i<14; i++) { digitalWrite(i,LOW); delay(50);} }
Результатом выполнения предложенного кода будет циклическое пробегание волны огней от 0-го до 13-го светодиода. Попробуйте запустить эту волну в обратную сторону.
Выводы A0-A5
Их также можно использовать как цифровые выходы. Причем можно обращаться к ним, используя синтакисис A0-A5, так и номера 14-20.
void setup() { for (int i=A0; i<A6; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=A0; i<A6; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=A0; i<A6; i++) { digitalWrite(i,LOW); delay(50);} }
Заключение
И в заключение запустим бегущую волну по всей линейке светодиодов:
void setup() { for (int i=0; i<21; i++) { pinMode(i,OUTPUT);} } void loop() { for (int i=0; i<21; i++) { digitalWrite(i,HIGH); delay(50);} for (int i=0; i<21; i++) { digitalWrite(i,LOW); delay(50);} }
Индивидуальные задания
Попробуйте самостоятельно выполнить следующие задания:
- Используя светодиоды, подключенные к выводам 0, 1 и 2 напишите программу, имитирующую работу светофора. Сначала долго горит красный, затем на короткий промежуток времени одновременно с ним включается желтый, после чего красный и желтый гаснут и загорается зеленый. Зеленый горит достаточно долго, затем мигает три раза, гаснет, загорается желтый, гаснет желтый, загорается красный. Все длинные интервалы – 5с, все короткие – 0,5с.
- Запустите волну по линейке светодиодов так, чтобы одновременно только 4 светодиода. То есть, как только загорается 4-ый, то 0-ой гаснет, когда загорается 5-ый – гаснет 1-ый и так далее.
Остальные статьи цикла можно найти здесь.
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Регулировка яркости светодиода ШИМ двумя кнопками
В проектах часто используются кнопки для управления. Например, одной кнопкой что-то прибавляем, другой — уменьшаем. Разберем на примере управления яркостью светодиода.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno
- Один светодиод
- Один резистор сопротивлением 220-270 Ом.
- Два резистора сопротивлением 10-100 кОм.
- Две кнопки.
- Провода
- Макетная плата
СХЕМА ПОДКЛЮЧЕНИЯ
Резистор R1 ограничивает ток на светодиоде. Резисторы R2 и R3 «подтягивают» входные пины к нулю, чтобы не было ложных срабатываний. И так как управление светодиодом реализовано с помощью ШИМ (широтно-импульсная модуляция), то светодиод необходимо подключить только к определенным выводам платы ардуино.
В ардуино ШИМ можно реализовать на цифровых выводах, обозначенных PWM или ~. На плате Arduino Uno это D03, D05, D06, D10, D11. И скважность импульса задается в пределах от 0 до 255.
В данном скетче кнопка «+» с шагом 5 увеличивает яркость светодиода от 0 до 255, а кнопка «-» уменьшает.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int ledPin = 11; // Присваиваем имя ledPin цифровому выводу 11, к которому подключен светодиод int brightness =0; // переменная для задания яркости int fadeValue = 5; // шаг изменения яркости int buttonPlus=2; // Номер Pin к которому подключена кнопка "+" int buttonMinus=3; // Номер Pin к которому подключена кнопка "-" void setup() { pinMode(ledPin, OUTPUT); // Инициализируем цифровой вывод ledPin (pin 11) как выход } void loop() { // Этот цикл будет выполняться бесконечное количество раз. if (digitalRead(buttonPlus) == HIGH) { //если на выводе 2 (кнопка "+") высокий уровень (нажата), то brightness += fadeValue; // прибавляем значение яркости с шагом fadeValue } if (digitalRead(buttonMinus) == HIGH) { //если на выводе 3 (кнопка "-") высокий уровень (нажата), то brightness -= fadeValue; // уменьшаем значение яркости с шагом fadeValue } brightness = constrain(brightness, 0, 255); // Эта функция задает крайние точки диапазона для переменной brightness 0 и 255 analogWrite(ledPin, brightness); // устанавливаем на выводе ledPin значение яркости яркость brightness delay(50); // Пауза 50 миллисекунд. } |
Делаем управление светодиодом голосом с помощью Arduino. Управление голосовыми командами на базе модуля распознавания голоса FZ0475
А помните, как несколько лет назад (а может быть и сейчас) была популярна идея управления светом в комнате при помощи хлопков в ладоши? А, ведь, это очень удобно, лежишь в постели, лень встать и хлопком в ладоши выключается свет или заходим домой, темно, нащупать выключатель долго, а тут с самого порога хлопок или два и свет уже горит. Мне кажется, что эта концепция актуальна до сих пор, но к ней можно применить уже более высокие технологии по сравнению с теми, что были 5 лет, 10 лет назад. Теперь за сравнительно небольшую сумму можно купить несколько деталей и запрограммировать конструкцию на подобные функции, о чем пойдет речь ниже.
Сегодня рассмотрим модуль, предназначенный для распознавания голосовых команд (в том числе и просто голоса в рамках записанной голосовой команды) – Voice recognition module V3.1 (V3) или часто встречающуюся кодировку название FZ0475 .
В комплект поставки входит сам модуль (печатная плата очень хорошего качества), микрофон на гибкой ножке с разъемом 3,5 мм jack и угловые PLS контакты с шагом 2,56 мм для платы модуля (их можно не использовать, если подключаться к контактам модуля другим способом).
На сегодняшний день существует несколько видов модулей с аналогичным функционалом разных производителей и разработчиков или исполнений. Данный модуль распознавания голоса, на мой взгляд, имеет некий баланс между стоимостью, функционалом, удобством. Более мощным и существенно более дорогим будет модуль EasyVR. Более дешевыми и неудобными будут модули на базе LD3320 (неудобные как минимум потому, что нормальное описания на них найти не просто, а в остальном это уже субъективно).
Характеристики модуля Voice recognition module V3.1 (V3):
- Напряжение питания – 5 вольт
- Потребляемый ток – до 40 мА
- Интерфейсы – UART, GPIO
- Точность распознавания – 99% (в идеальных условиях)
- Дальность действия – зависит от используемого микрофона, для штатного микрофона из комплекта дальность составляет 0,5 – 1 метр максимального расстояния при достаточно громком голосе, если же голос тихий, то придется подносить микрофон поближе ко рту
Модуль представляет собой небольшую аккуратную плату, на которой расположены главный микроконтроллер (черная клякса), разъем jack 3,5 мм для подключения микрофона, микросхема flash памяти, контакты GPIO, UART и питания, пара светодиодов и остальной необходимый обвес, необходимый для работы схемы – резисторы, конденсаторы, кварц. Компактный размер платы позволит без особых трудностей встраивать модуль в собственные разработки. Для увеличения дальности работы голосовых команд предположительно необходимо использовать микрофон с усилителем. При достижении приемлемой дальности модуль пригоден для использования в системах умного дома. Без доработок по улучшению дальности работы модуль можно использовать в настольных системах управления, а также в системах охраны (контроля и ограничения доступа). Со штатным микрофоном из-за небольшой дальности надежнее всего использовать модуль распознавания голоса как гарнитуру и беспроводным способом передавать команды контроллеру, который чем-то управляет, используя аккумулятор и беспроводные модули (например, HC-05 или HC-12 или подходящие любые другие). Модуль способен работать без внешнего микроконтроллера, так как производителем заложена функциональная самостоятельность, необходимо лишь однократно записать голосовые команды и задать настройки для самостоятельной работы при помощи внешнего устройства (ПК или МК).
Итак, чтобы начать работу с модулем распознавания голоса нам необходимо подключить его или к компьютеру (нужен USB-UART переходник), или к микроконтроллеру (необходимо разрабатывать программный код для управления модулем).
Принципиальной разницы в управлении и настройке модуля между подключением к компьютеру или к микроконтроллеру нет, поэтому для наглядности воспользуемся ПК для настройки. В инструкции описываются команды для модуля в шестнадцатеричной форме, поэтому для удобства понадобится и терминал, передающий байты в шестнадцатеричной форме, например, AccessPort (можно скачать в конце статьи). Кроме того, производитель делает упор на пользователей платформы Arduino и предоставляет библиотеку для использования этого модуля и инструкцию по использованию этой библиотеки. Однако многим из нас намного интереснее работать с самим модулем напрямую, чем через обертку для Arduino.
Перед началом работы разберемся с платой. С торцов платы справа гнездо для подключения микрофона, с другого четыре контакта UART интерфейса. Снизу расположены восемь контактов, использующихся для вывода сигналов, вызываемых распознаванием голосовых команд. Сверху четыре контакта, настроенных как вход сигнала, используются для переключения между группами (по семь голосовых команд в каждой) команд, если такая функция используется. И остальные шесть контактов сверху, вероятно, используются для подключения к памяти модуля.
Для функционирования и конфигурации модуля используется система команд. Общий вид кадра выглядит следующим образом:
Первые четыре команды 00, 01, 02, 03 используются для проверки состояния модуля и его настроек. Следующие шесть команд 10, 11, 12, 13, 14, 15 используются для изменения настроек модуля, среди которых управление портами вывода и настройки автостарта (auto load). Далее три команды 20,21, 22 используются для записи голосовых команд. Следующие три команды 30,31,32 используются для управления распознаванием голосовых команд. Команды 0A, 0D, FF используются только при возвращении данных самим модулем. Команд на самом деле не много и все это не так страшно, как кажется на первый взгляд в документации на модуль. Рассмотрим команды, необходимые для работы с модулем распознавания голоса. Не все из существующих команд несут практический характер.
Примечательно то, что модуль может работать без внешнего управляющего микроконтроллера, а также самостоятельно управлять чем-нибудь своими портами вывода. Для этого необходимо их настроить (команды 12, 13, 14).
Команда 12 – настроить порты вывода. Этой командой настраивается режим работы портов вывода модуля распознавания голоса.
Формат: | AA | 03 | 12 | MODE | 0A |
Где MODE может принимать четыре значения: 0 – импульсный режим (при срабатывании голосовой команды соответствующий команде вывод изменит свое состояние на время, устанавливаемое командой 13), 1 – режим переключателя (toggle или flip) (при каждом срабатывании голосовой команды вывод, соответствующий голосовой команде инвертируется), 2 – режим включения (при срабатывании голосовой команды вывод перейдет в состояние логической единицы и больше не перейдет в состояние логического нуля, сброс осуществляется командой 14), 3 – режим выключения (аналогично режиму включения только, наоборот, при срабатывании голосовой команды вывод переходит в состояние логического нуля).
Наиболее практичным является режим переключателя, не требующий лишних команд. Импульсный режим был бы хорош, но логика этого режима такова, что при срабатывании голосовой команды он однократно выдает логическую единицу, на время от 10 мс до 1 с. Это мало. Хотя, смотря какие требования к этому режиму, может быть полезно. Режимы включения и выключения реализованы неудобно, так как требуют исполнение дополнительных команд.
Команда 13 – задание длительности импульса соответствующего режима.
Формат: | AA | 03 | 13 | LEVEL | 0A |
Где LEVEL принимает значение от 00 до 0F (соответствует длительности от 10 мс до 1 с).
LEVEL | длительность |
0x00 | 10 мс |
0x01 | 15 мс |
0x02 | 20 мс |
0x03 | 25 мс |
0x04 | 30 мс |
0x05 | 35 мс |
0x06 | 40 мс |
0x07 | 45 мс |
0x08 | 50 мс |
0x09 | 75 мс |
0x0A | 100 мс |
0x0B | 200 мс |
0x0C | 300 мс |
0x0D | 400 мс |
0x0E | 500 мс |
0x0F | 1 с |
Команда 14 – сброс портов вывод до состояния заданного режимами включения или выключения.
Формат: | AA| 03 | 14 | FF | 0A | — сброс всех портов вывода
| AA| 03+n | 14 | IO0 | … | IOn | 0A | — сброс выбранных портов вывода
Где n – количество выводов, которые сбрасываются выборочно, IO0…IOn – перечисление этих выводов в кадре отправки данных.
Далее чтобы голосовые команды выполнялись их необходимо записать в модуль (обучить модуль). Здесь есть ограничение. Одновременно распознаваться могут только семь команд, хотя записать их можно значительно больше. Для того чтобы расширить диапазон голосовых команд, которые будут распознаваться используется система группировки (команда 32), которая управляется портами ввода модуля. Устанавливая конфигурацию сигналов на этих контактах, осуществляется выбор группы команд, которая будет распознаваться. Это обусловлено ограниченностью производительности используемого голосового контроллера модуля.
Команда 20 — запись одной или нескольких голосовых команд.
Формат: | AA| 03+n | 20 | R0 | … | Rn | 0A |
Где n — это количество записываемых голосовых команд (если записывается одна команда n=0, две команды n=1 и так далее в соответствии с общим форматом передачи команд Lenght — длина), R0…Rn номера голосовых команд (AA 03 20 03 0A — команда для записи третьей голосовой команды).
Команда 21 — запись одной голосовой команды и установка для нее подписи.
Формат: | AA| 03+SIGLEN | 21 | RECORD | SIG | 0A |
Где RECORD — номер голосовой команды, SIG — подпись (может состоять из нескольких байт, таким образом, что каждый байт может соответствовать кодировке символа алфавита при необходимости), SIGLEN — количество байт, из которых состоит подпись.
Команда 22 — добавление или удаление подписи для выбранной голосовой команды.
Формат: | AA | 03+SIGLEN | 22 | RECORD | SIG | 0A | — добавление подписи
| AA | 03 | 22 | RECORD | 0A | — удаление подписи
В процессе записи голосовых команд необходимо руководствоваться сигналами светодиодов. После ввода команды, запускающей процесс записи, начинает быстро моргать желтый (оранжевый) светодиод. Как только загорится красный светодиод необходимо произнести голосовую команду в микрофон. При успешности загорится желтый (оранжевый) светодиод и далее снова красный — необходимо подтвердить голосовую команду, произнести ее еще раз. В случае успеха загорятся оба светодиода — голосовая команда сохранена.
После того, как в модуле записаны голосовые команды ничего происходить не будет до тех пор, пока эти команды не поместить в «распознаватель» (Recognizer) модуля. Для этого необходимо воспользоваться командой 30. После выполнения этой команды модуль начнет ожидать совпадения голосовой команды с сохраненными образцами. Одновременно распознавать можно лишь сем команд. При этом будет медленно моргать желтый (оранжевый) светодиод на плате модуля.
Команда 30 — загрузить записи в «распознаватель» (Recognizer) модуля.
Формат: | AA| 2+n | 30 | R0 | … | Rn | 0A |
Формат ответа следующий: | AA | 07 | 0D | 00 | GRPM | R | RI | SIGLEN | SIG | 0A |
Где GRPM — информация о группе, к которой относится команда (если используется), R — распознанная голосовая команда (по этим данным можно различать команда между собой если не используются подписи), RI — индекс команды в распознавателе, SIGLEN — длина подписи в байтах, SIG — подпись (если используется).
Ну и наконец, если модуль должен работать самостоятельно, то необходимо воспользоваться командой 15 для автоматического запуска по преднастройкам распознавателя. В этом случае модуль распознавания голоса будет работать самостоятельно без необходимости инициализации после включения.
Команда 15 — установка автозапуска распознавателя при включении.
Формат: | AA| 03 | 15 | 00 | 0A | — отключение функции автозапуска
| AA| 03+n | 15 | BITMAP | R0 | … | Rn | 0A | — установка функции автозапуска
Для контроля верности выполнения команд каждой из них соответствует свой ответ. В случае такой необходимости все данные можно найти в документации на модуль распознавания голоса, приложенной в конце статьи. Не стоит забывать, что все числовые значения представлены в шестнадцатеричной форме.
Таким образом, при помощи системы команд можно достаточно гибко настраивать модуль распознавания голоса для использования в различных целях. Если же простого управления портами вывода модуля недостаточно, то модуль распознавания голоса можно подключать к другим устройствам посредством UART или GPIO. Для беспроводного подключения можно использовать ранее рассмотренные модули .
При помощи беспроводных модулей можно подключать модуль распознавания голоса к любым устройствам, где это необходимо. Например, подключим его к микроконтроллеру, который относительно получаемых данные о распознавании голосовых команд будет управлять светодиодами. Беспроводные модули позволяют передавать данные в двух направлениях, поэтому при необходимости для микроконтроллера можно написать код инициализации голосового модуля и записи голосовых команд. В нашем случае под управлением ПК в модуле уже записано несколько голосовых команд и настроен автозапуск распознавания при включении питания, поэтому для микроконтроллера пропишем только прием данных и управление светодиодами относительно этих данных. Микроконтроллер STM32F103C8T6 использует USART1 для приема данных и контакты PB10…PB15, настроенные на выход, которыми управляет светодиодами. Исходный код расположен в приложения в конце статьи.
Немного о результатах
Распознавание голоса идет не совсем точное. Это зависит от выбранных команд и голоса пользователя. При тестировании мною было обнаружено несколько отрицательных моментов. При обучении командам модуля были выбраны голосовые команды «раз» и «два». Команда «два» проходила всегда четко, а вот команда «раз» достаточно часто определялась как команда «два» и соответственно выполнялся код второй команды. Далее при попытке отдавать голосовые команды по-английски (а они не записывались в голосовой модуль) практически всегда команда «one» определялась как «два». Возможно, все дело в произношении, интонации и прочих аспектах человеческого голоса, заложенных в алгоритм кодировки голосового модуля произносимых команд. Однако эти секреты производители в открытом доступе не дают. Кроме этого на качество распознавания влияют внешние шумовые условия – гул с улицы, шум вентилятора, случайные звуки и прочее. Производитель заостряет внимание на то, что высокий уровень точности распознавания имеет место в идеальных условиях. Идея использования микрофона с усилителем, конечно, увеличит дальность работы устройства, но так же увеличит вероятность и ошибки, так как усиление голоса будет происходить и с усилением шумов.
В итоге , если у вас невысокие требования к распознаванию голоса и выполнению голосовых команд, то этот модуль честно отработает, потраченные на него, деньги.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
IC1 | МК STM32 | STM32F103C8 | 1 | В блокнот | ||
VR1 | Линейный регулятор | AMS1117-3.3 | 1 | В блокнот | ||
MOD1, MOD3 | Модуль беспроводной связи | HC-12 | 2 | В блокнот | ||
MOD2 | Модуль распознавания голоса | VR3.1 | 1 | В блокнот | ||
Z1 | Кварц | 8 МГц | 1 |
В этом уроке по Arduino мы покажем, как использовать мобильное приложение для Android и модуль Bluetooth HC-05 для голосового управления светодиодом.
Для этого урока нам понадобится минимум комплектующих. После того как вы сделаете урок — вы сможете усложнить схему и дополнить её устройствами по своему вкусу.
- Arduino UNO
- HC-05 Bluetooth Модуль
- Макетная плата
- Провода
- 330 Ом резистор
- Светодиоды (LED)
Шаг 2: Подключение модуля Bluetooth HC-05
Стандартный модуль Bluetooth HC-05 имеет шесть контактов. Однако в этом проекте мы будем использовать только 4.
Мы будем использовать вывод VCC, вывод GND, вывод TXD и вывод RXD. Вывод VCC модуля bluetooth подключается к + 3,3 В от Arduino. Вывод GND модуля подключается к GND Arduino (земля). Штырь TX модуля bluetooth соединяется с цифровым выводом 0 (RXD), а контакт RXD подключается к цифровому выходу 1 (TXD).
Шаг 3: Подключение светодиодов
Следующим шагом в создании светодиодов, управляемых голосом, является подключение светодиодов к Arduino через макет.
Сначала подключите короткий конец светодиода к земле. Затем подключите длинный конец каждого из светодиодов к резистору 330 Ом. Наконец, подключите сопротивление тока от светодиодов к цифровым контактам на Arduino.
В этом проекте мы будем подключать один светодиод к цифровому выводу 2, другой — к цифровому выходу 3, а последний светодиод — к цифровому выходу 4.
Шаг 4: Питание
Для этого проекта мы можем подавать питание на Arduino через любой источник питания + 5 В. Вы можете использовать USB-порт со своего компьютера для питания Arduino, но в этом проекте мы будем использовать портативную батарею 5В. Прежде чем подключать источник питания к вашему Arduino, убедитесь, что GND Arduino подключен к земле макетной платы.
Шаг 5: Код
Код для нашего проекта ниже.
Шаг 6: Использование мобильного приложения
Вы можете начать тестировать свой проект, загрузив приложение для Android — BT Voice Control для Arduino (BT Voice Control for Arduino), созданное SimpleLabsIN.
После того как вы скачали и установили приложение на свой телефон на базе Android нажмите на строку меню в правом верхнем углу и выберите «Подключить робота». В появившемся новом окне выберите модуль Bluetooth HC-05 и подключите его.
Теперь, когда вы говорите с помощью определенных команд из кода на свое устройство через приложение, определенные светодиоды должны включаться и выключаться. Посмотрите внимательнее на код, где указаны команды и поставьте свои. Например, вместо «*switch on red» можно просто указать «red». Так команды будут быстрее, короче и понятнее.
Шаг 7: Итоговый результат
Итоговый результат можно посмотреть на видео ниже.
Желаем вам успешных проектов! Не забывайте оставлять комментарии на проект в нашей
Как видно из названия речь в этой статье пойдет о распознавании цифр на микроконтроллере. Сразу хочу оговориться, что в данной статье не будет приведен исходный код, рассматриваться технология или алгоритм распознавания, скажу лишь, что используются идеи системного подхода. Некоторые из них изложены в наших статьях ( , и вот ). Это связано с тем, что наш подход тянет на оригинальность, но требует уточнения некоторых вопросов. Кто-то может сказать: «очередная статья про программирование микроконтроллеров». Отнюдь нет, поиск подобных проектов не дал каких-то внятных результатов, за исключением этого видео . Из обсуждений на форумах понятно одно: идея получения подобного устройства (камера + микроконтроллер = результат распознавания на выходе, а не просто снятая картинка) приходила многим, но оставалась без реализации. Да и распознавание, по общему мнению, требует много вычислительных ресурсов и микроконтроллеры для этого не подходят, в частности про Arduino были высказывания, что это вообще невозможно. Если стало интересно прошу под кат.
Что бы не возникало очевидных вопросов, ответим на них:
- Нет, это не сервис по распознаванию изображений
- Нет, это не OpenCV
- Нет, это не нейронные сети
- Да, распознавание производится именно микроконтроллером!
Идея
Если кратко, то все началось с того, что было желание попробовать свои силы и проверить свои идеи в распознавании изображений. В процессе обсуждения пришли к выводу, что можем обойтись небольшими вычислительными мощностями для решения данной задачи. По понятным причинам подробности этих обсуждений описывать не будем.
Установка
Итак, задача поставлена, нужна реализация. Не отступая от уже устоявшихся принципов
берем то, что есть под рукой. А было под рукой парочка Arduino Uno, старая оптическая мышь и CD привод. Кстати, на то что бы использовать сенсор оптической мыши в качестве камеры для получения изображения нас натолкнула прочитанная когда то давно, ну и собственно весь остальной около «мышиный» материал. Единственное нам пришлось выпаять сенсор и всю его обвязку для удобства использования, а также приклеить к нему линзу, которую мы бережно «выдрали» из CD привода. Это было нужно для того, что бы увеличить расстояние от объекта съемки до камеры иначе цифры нашего размера не помещались и была видна лишь небольшая часть. Кстати говоря перед линзой из CD привода, мы пробовали прикрепить оптику от веб камеры, но как-то не срослось.
Ещё
Затем встал вопрос как эту камеру позиционировать над объектом съемки. Тут нам очень помог старый сломанный микроскоп, который лежал без дела. С уважением сняли с него механизм управления предметным столиком. Этот механизм нам позволил перемещать камеру лишь по двум осям, тут же пришла мысль использовать направляющую лазерной головки от CD привода. Все это закрепили на корпусе от многострадального CD привода. В итоге мы получили классный механизм позиционирования камеры.
Ещё
Итого: так называемая камера у нас есть, механизм позиционирования есть, осталось положить бумажечку с циферкой и получить изображение с камеры. Тут то и начались «проблемы». Так как характеристики «мышинного» оптического сенсора весьма скудны для использования его в качестве камеры, стали импровизировать с подсветкой.
Ещё
Стало понятно, что просто подсветить не получиться важна интенсивность, направление внешний свет тоже вносит коррективы. Пришлось включать в работу еще одну «ардуинку», что бы управлять интенсивностью подсветки ( естественно можно было и по другому управлять, но в последствии и не только подсветкой, а еще переключением цифр на индикаторе ). В итоге оказалось, что съемка на просвет гораздо лучше. А если например использовать в качестве цели светящийся семи сегментный индикатор то сенсор его видит вообще отлично. Так, что теперь у нас в качестве объектов съемки индикатор и полоса с белыми цифрами залитая черным фоном.
слева изображение в градациях серого полученное с индикатора (такое изображение мы получаем с сенсора), справа бинаризованное.
Ещё
Общий вид установки в сборе
ранний вариант установки
Блок распознавания
Немаловажную роль в нашей установке играет, так называемый блок распознавания (на картинке выше). Как видно, он состоит из Arduino Uno и всем известного wifi передатчика ESP8266 . Поясняю, wifi передатчик нам нужен для того, что бы результат распознавания увидеть на планшете. Приложение на планшете отправляет запрос, «ардуинка», получая запрос, «снимает» изображение с сенсора мыши, затем бинаризует его. После бинаризации происходит распознавание, а после его завершения формируется ответ. В ответе мы посылаем результат распознавания и 41 байт для построения бинаризованного изображения на экране планшета, так сказать, для наглядности.
Если оглянуться, то на «на ардуинку» возложен неплохой функционал: и работа с камерой, и распознавание, и работа с esp8266. Что не могло не отразится на работе — пришлось бороться с нехваткой памяти. Вот уж не думал, что когда либо придется отвоевывать каждый байт памяти.
Демонстрация процесса распознавания
Вместо заключения
На этом собственно и все. Впереди еще очень много работы. И первая задача: распознавание чисел (строки цифр) снимаемых «человеческой» камерой (а не «мышиным сенсором») и переносом разработанной технологии на ESP8266 и снижением накала борьбы за каждый байт памяти.
С радостью ответим на вопросы.
В данном проекте я совместил детектор распознавания лиц (face detection) и следящую (tracking system) систему.
Вкратце суть проекта: вебкамера, установленная на поворотном механизме подключена к компьютеру под управлением операционной системы Windows и с установленным программным обеспечением OpenCV . Если программа обнаруживает в поле зрения вебкамеры лицо, то вычисляется центр лица. Координаты X и Y передаются в контроллер Arduino, который подключен к компьютеру по USB. В свою очередь, контроллер Arduino по принятым командам управляет двумя сервомоторами: по координате X и по координате Y, т.о. обеспечивается следящая система.
Библиотеку OpenCV (Open Source Computer Vision Library) можно скачать . Библиотека мультиплатформенная, в настоящее время существует под следующие ОС: Windows, Linux, Android, Mac OS и даже iOS. Библиотека обеспечивает обработку изображений в режиме реального времени. Написана на С/С++.
Т.о. данный проект представляет собой смесь soft и hard решений. Обработка изображения ведется на компьютере, а управление серво осуществляется при помощи контроллера.
Итак, что я использовал для проекта:
Программное обеспечение:
Железо:
компьютер с ОС Windows 7 SP1
Arduino Uno или совместимый + БП
2 сервопривода
USB вебкамера
Итак, поехали.
Шаг 1. Установка программного обеспечения
1) Если у вас ОС Windows, то скачайте файл OpenCV-2.3.1-win-superpack.exe (или более позднюю версию) и установите библиотеку.
2) Скачайте и установите Microsoft Visual C++ 2010 Express. Если у вас 64-битная версия Windows, то также необходимо будет скачать Windows SDK (но для 64 версии могут быть проблемы, я так и не смог заставить работать OpenCV под Windows 7 x64).
Процесс настройку OpenCV для Visual C++ читайте на официальном сайте.
Шаг 2. Крепление камеры и сервомоторов
Я не стал делать конструкцию «долговечной», потому как после достижения конечной цели я все разбираю для следующего проекта.
Вебкамеру я прикрепил к сервомотору оси Х, а его, в свою очередь закрепил на сервомоторе оси Y. И всю эту конструкцию закрепил в струбцине от «третьих рук».
Шаг 3. Подключение
Подключение сервомоторов:
Желтый вывод от серво оси Х подключается к выводу 9 контроллера Arduino
Желтый вывод от серво оси Y подключается к выводу 10 контроллера Arduino
Красный вывод Vcc от серво подключается к выводу 5V
Черный вывод GND от серво подключается к выводу GND контроллера Arduino
Подключение вебкамеры:
Вебкамера подключается к компьютеру по USB интерфейсу. Программа C++ идентифицирует вебкамеру по номеру USB-порта. Возможно, потребуется указать порт в программе.
Подключение контроллера Arduino UNO:
Контроллер также подключается к компьютеру через USB-интерфейс. В системе появляется виртуальный COM-порт, который необходимо внести в код программы на C++.
Скачать файлы проекта
Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)
В данном проекте я совместил детектор распознавания лиц (face detection) и следящую (tracking system) систему.
Вкратце суть проекта: вебкамера, установленная на поворотном механизме подключена к компьютеру под управлением операционной системы Windows и с установленным программным обеспечением OpenCV . Если программа обнаруживает в поле зрения вебкамеры лицо, то вычисляется центр лица. Координаты X и Y передаются в контроллер Arduino, который подключен к компьютеру по USB. В свою очередь, контроллер Arduino по принятым командам управляет двумя сервомоторами: по координате X и по координате Y, т.о. обеспечивается следящая система.
Библиотеку OpenCV (Open Source Computer Vision Library) можно скачать . Библиотека мультиплатформенная, в настоящее время существует под следующие ОС: Windows, Linux, Android, Mac OS и даже iOS. Библиотека обеспечивает обработку изображений в режиме реального времени. Написана на С/С++.
Т.о. данный проект представляет собой смесь soft и hard решений. Обработка изображения ведется на компьютере, а управление серво осуществляется при помощи контроллера.
Итак, что я использовал для проекта:
Программное обеспечение:
Arduino IDE 1.0 for Windows
Microsoft Visual C++ 2010 Express SP1
Serial C++ Library for Win32 (от Thierry Schneider)
Железо:
компьютер с ОС Windows 7 SP1
Arduino Uno или совместимый + БП
2 сервопривода
USB вебкамера
Итак, поехали.
Шаг 1. Установка программного обеспечения
1) Если у вас ОС Windows, то скачайте файл OpenCV-2.3.1-win-superpack.exe (или более позднюю версию) и установите библиотеку.
2) Скачайте и установите Microsoft Visual C++ 2010 Express. Если у вас 64-битная версия Windows, то также необходимо будет скачать Windows SDK (но для 64 версии могут быть проблемы, я так и не смог заставить работать OpenCV под Windows 7 x64).
Процесс настройку OpenCV для Visual C++ читайте на официальном сайте.
Шаг 2. Крепление камеры и сервомоторов
Я не стал делать конструкцию «долговечной», потому как после достижения конечной цели я все разбираю для следующего проекта.
Вебкамеру я прикрепил к сервомотору оси Х, а его, в свою очередь закрепил на сервомоторе оси Y. И всю эту конструкцию закрепил в струбцине от «третьих рук».
Шаг 3. Подключение
Подключение сервомоторов:
Желтый вывод от серво оси Х подключается к выводу 9 контроллера Arduino
Желтый вывод от серво оси Y подключается к выводу 10 контроллера Arduino
Красный вывод Vcc от серво подключается к выводу 5V
Черный вывод GND от серво подключается к выводу GND контроллера Arduino
Подключение вебкамеры:
Вебкамера подключается к компьютеру по USB интерфейсу. Программа C++ идентифицирует вебкамеру по номеру USB-порта. Возможно, потребуется указать порт в программе.
Подключение контроллера Arduino UNO:
Контроллер также подключается к компьютеру через USB-интерфейс. В системе появляется виртуальный COM-порт, который необходимо внести в код программы на C++.
Рекомендуем также
arduino-uno — Управление светодиодом с использованием транзистора (TL188)
У вас должен быть резистор в несколько сотен омов на базовом соединении транзистора, то есть между базой и выводом 13.
Транзистор PNP несколько сложнее, чем NPN-транзистор. Большая часть этого делает вещи назад.
Операция, которую вы видите, кажется совершенно правильной, когда вы понимаете, как работает PNP.
С и транзистором NPN высокое напряжение на базе включает его, а низкое напряжение отключает его. С PNP-транзистором верно обратное.
Когда у вас есть напряжение, близкое или превышающее напряжение на эмиттере, транзистор отключится. Это означает, что предоставление HIGH для базы отключит его. Напряжение на базе, которое находится ниже напряжения эмиттера минус пороговое напряжение около 0,7 В, включит транзистор. Это означает, что предоставление LOW на базу включит его.
Таким образом, это означает, что когда встроенный светодиод включен, транзистор выключен, и поэтому светодиод на транзисторе отключится. Когда светодиод на плате выключен, транзистор будет включен, поэтому светодиод на транзисторе будет включен.
«Но», вы говорите: «встроенный светодиод не выключается». Это правильно. Он просто тускнеет. То есть, опять же, из-за того, как работает PNP-транзистор. Ток (видимый из условного смысла — то есть, текущий от + до -) входит в эмиттер и затем разделяется между коллектором и базой. Количество тока, которое может выходить из базы, определяет, сколько разрешено вытекать из коллектора (в NPN это ток в базу и коллектор, которые объединяются, чтобы вытекать из излучателя, и количество, которое разрешено протекать в базу определяет, сколько разрешено втекать в коллектор). Таким образом, будет существовать некоторый ток, вытекающий из базы, — который делает свой способ заземления как через вывод IO микроконтроллера, так и через светодиод на плате, что делает его слегка светящимся *.
* Это немного грубо говоря, но как-то иллюстрирует, что происходит.
Vanyamba uses Linux — Управление светодиодами по UART
Проблема синхронизации
Как показала практика, данная схема может зависать, если тактировать модули слишком высокой частотой осциллятора. Я тестировал её на чипе Cyclone III EP3C25E144C8N, и при этом наблюдались случайного типа зависания. Частота тактирования модулей была 48 МГц (реальный битрейт 57623 бод).
Тогда я попробовал добавить в схему ещё один модуль clkdiv, который использовал как основной сигнал CLK. На частоте 1 МГц (реальный битрейт 58823 бод) данные передавать не получилось совсем. Зато на частоте тактирования 12 МГц (реальный битрейт 57692 бод) всё заработало, и схема перестала зависать.
Как показали дальнейшие исследования, на частоте 5.760 МГц (реальный битрейт 57600), тоже происходят зависания. При этом, волшебная частота 12 МГц странным образом совпадает с внутренней частотой тактирования микросхемы FT232RL, выступающей в роли виртуального COM-порта. И как выяснилось далее, зависаний не происходит, даже если тактировать модуль UartTX8N1 с частотой 5.760 МГц, а остальные модули с частотой 12 МГц. То есть это не модуль трансмиттера подвисал, хотя я был уверен, что подвисает именно он.
Решение проблемы подсказали знающие товарищи. Суть её состоит в том, что последовательный сигнал, при передаче из одного временного домена в другой временной домен, становится асинхронным, и его нужно синхронизировать под другую тактовую частоту. Более подробно можно прочитать в статье Иосифа Каршенбойма Краткий курс HDL.Часть 11. Асинхронные частоты,пересечение клоковых доменови синхронизация.
Я применил простейшее решение — пропустить сигнал через два последовательных D-триггера, добавив в схему модуль UartRxSync
(скачать).
module UartRxSync (
input wire clkIN, input wire rxIN,
output wire rxOUT
);
reg [1:0] sync;
assign rxOUT = sync[1];
always @ (posedge clkIN)
sync <= { sync[0], rxIN };
endmodule
Схема проекта (скачать BDF):
Управление 3 светодиодами с Arduino и одной кнопкой • AranaCorp
Теги: Arduino, C / C ++, ПрограммированиеОдин из самых простых и быстрых способов начать изучение программирования и электроники с Arduino — это использовать светодиоды. Здесь мы увидим, как управлять светодиодами и как выбирать различные функции кода, используя только одну кнопку. Это в простой форме резюмирует то, с чем вы можете столкнуться при работе с роботом: мозг (плата Arduino), чувства (датчики, здесь кнопка) и выходы или исполнительные механизмы (здесь обозначены светодиодами).
Материал
- Компьютер
- Arduino UNO
- Кабель USB
- Светодиоды x3
- Макетная плата
- Кабель Dupont M / M
- Кнопка x1
- Сопротивления x4
Объектив
В этом уроке мы создадим несколько функций для управления светодиодами различными способами в соответствии с выбранным режимом. Это цель любой программы робота: выполнить действие в зависимости от входов от датчиков.
Электропроводка
Кнопка подключена к контакту 8, LED1 — к 9, LED2 — к 10 и LED3 — к 11.Мы добавили некоторое электрическое сопротивление для защиты компонентов, но оно не всегда необходимо. Перед использованием сверьтесь с таблицей компонентов.
Код
Для управления светодиодом мы можем использовать функцию digitalWrite () с параметром HIGH, чтобы включить его, и LOW, чтобы выключить.
digitalWrite (led1Pin, HIGH); задержка (30); digitalWrite (led1Pin, LOW); задержка (30);
Мы также можем регулировать яркость светодиода с помощью analogWrite ().
int яркость = 0; int fadeAmount = 5; for (яркость = 0; яркость <= 255; яркость + = fadeAmount) { analogWrite (led1Pin, яркость); задержка (30); }
Эти базовые функции используются в примерах из Arduino IDE, Blink и Fade.Из них мы можем создать подфункции, которые будут по-разному управлять светодиодами в зависимости от выбранного режима.
Чтобы прочитать состояние кнопки, мы используем функцию digitalRead (). В этом приложении мы хотим подсчитать количество нажатий кнопки. Для этого есть специальная функция pulseIn (), которая измеряет длину импульса.
беззнаковая длинная кнопкаState = 0; int funcState = 0; void buttonPressed () { buttonState = pulseIn (btnPin, HIGH, 1000000); if (buttonState> 50) { funcState + = 1; Серийный .print ("Состояние кнопки n:"); Серийный .println (funcState); } funcState = funcState% NBSTATE; }
Выбранный режим сохраняется в переменной funcState. Мы можем определить режимы и связать соответствующие функции. Мы используем ключевые слова enum, которые создают список целых чисел, и switch..case, которые выбирают фрагмент кода для выполнения в зависимости от переменной.
enum fcnMode { ВЫКЛЮЧЕННЫЙ, LED1, LED2, LED3, FADE1, ВСЕ, МИГАЕТ, NBSTATE }; // ВЫКЛ = 0 и NBSTATE = 7 switch (funcState) { case OFF: перерыв; корпус LED1: digitalWrite (led1Pin, HIGH); перерыв; корпус LED2: digitalWrite (led2Pin, HIGH); перерыв; корпус LED3: digitalWrite (led3Pin, HIGH); перерыв; case FADE1: fade1 (); перерыв; case ALL: digitalWrite (led1Pin, HIGH); digitalWrite (led2Pin, HIGH); digitalWrite (led3Pin, HIGH); перерыв; case МИГАЕТ: blinkLed1 (); blinkLed2 (); blinkLed3 (); перерыв; }
Полный код
Вы можете изменить весь код, чтобы адаптировать его к вашему проекту.
// Назначение контактов const int btnPin = 8; const int led1Pin = 9; const int led2Pin = 10; const int led3Pin = 11; enum fcnMode { ВЫКЛЮЧЕННЫЙ, LED1, LED2, LED3, FADE1, ВСЕ, МИГАЕТ, NBSTATE }; // ВЫКЛ = 0 и NBSTATE = 7 int ledState1 = LOW, ledState2 = LOW, ledState3 = LOW; // ledState используется для установки светодиода unsigned long buttonState = 0; int funcState = 0; беззнаковый длинный currentMillis1, currentMillis2, currentMillis3; // сохраним текущее время беззнаковое длинное значение previousMillis1, previousMillis2, previousMillis3; // сохранит время последнего обновления светодиода const long interval1 = 100; // интервал мигания (миллисекунды) const long interval2 = 300; const long interval3 = 500; / *********************************************** ***************** \ ЧАСТНАЯ ФУНКЦИЯ: настройка ПАРАМЕТРЫ: ~ пусто ВОЗВРАЩЕНИЕ: ~ пусто ОПИСАНИЕ: Инициировать входы / выходы \ *********************************************** ***************** / void setup () { Серийный .begin (9600); // инициализируем последовательный порт pinMode (btnPin, INPUT_PULLUP); pinMode (led1Pin, ВЫХОД); pinMode (led2Pin, ВЫХОД); pinMode (led3Pin, ВЫХОД); } / *********************************************** ***************** \ ЧАСТНАЯ ФУНКЦИЯ: петля ПАРАМЕТРЫ: ~ пусто ВОЗВРАЩЕНИЕ: ~ пусто ОПИСАНИЕ: Основная функция кода \ *********************************************** ***************** / void loop () { buttonPressed (); установить режим(); } / *********************************************** ***************** ПОДФУНКЦИИ \ *********************************************** ***************** / void buttonPressed () { buttonState = pulseIn (btnPin, HIGH, 1000000); if (buttonState> 50) { funcState + = 1; Серийный .print ("Состояние кнопки n:"); Серийный .println (funcState); } funcState = funcState% NBSTATE; } void setMode () { // Все выключить digitalWrite (led1Pin, LOW); digitalWrite (led2Pin, LOW); digitalWrite (led3Pin, LOW); Серийный .print ("Функция:"); Серийный .println (funcState); switch (funcState) { case OFF: перерыв; корпус LED1: digitalWrite (led1Pin, HIGH); перерыв; корпус LED2: digitalWrite (led2Pin, HIGH); перерыв; корпус LED3: digitalWrite (led3Pin, HIGH); перерыв; case FADE1: fade1 (); перерыв; case ALL: digitalWrite (led1Pin, HIGH); digitalWrite (led2Pin, HIGH); digitalWrite (led3Pin, HIGH); перерыв; case МИГАЕТ: blinkLed1 (); blinkLed2 (); blinkLed3 (); перерыв; } } void fade1 () { int яркость = 0; int fadeAmount = 5; for (яркость = 0; яркость <= 255; яркость + = fadeAmount) { analogWrite (led1Pin, яркость); задержка (30); } for (яркость = 255; яркость> = 0; яркость - = fadeAmount) { analogWrite (led1Pin, яркость); задержка (30); } } void blinkLed1 () { currentMillis1 = миллис (); if (currentMillis1 - previousMillis1> = interval1) { // сохраняем время последнего мигания светодиода previousMillis1 = currentMillis1; // если светодиод не горит, включить его и наоборот: if (ledState1 == LOW) { ledState1 = ВЫСОКИЙ; } еще { ledState1 = LOW; } // устанавливаем светодиод с ledState переменной: digitalWrite (led1Pin, ledState1); } } void blinkLed2 () { currentMillis2 = миллис (); if (currentMillis2 - previousMillis2> = interval2) { // сохраняем время последнего мигания светодиода previousMillis2 = currentMillis2; // если светодиод не горит, включаем и наоборот: if (ledState2 == LOW) { ledState2 = ВЫСОКИЙ; } еще { ledState2 = LOW; } // устанавливаем светодиод с ledState переменной: digitalWrite (led2Pin, ledState2); } } void blinkLed3 () { currentMillis3 = миллис (); if (currentMillis3 - previousMillis3> = interval3) { // сохраняем время последнего мигания светодиода previousMillis3 = currentMillis3; // если светодиод не горит, включаем и наоборот: if (ledState3 == LOW) { ledState3 = ВЫСОКИЙ; } еще { ledState3 = LOW; } // устанавливаем светодиод с ledState переменной: digitalWrite (led3Pin, ledState3); } }
Оставьте комментарий, чтобы поделиться своими проектами или сообщить нам, что вы думаете об этом руководстве.Не стесняйтесь обращаться к нам с любыми вопросами, которые могут у вас возникнуть.
Приложение
Источник
Найдите другие примеры и руководства в нашем автоматическом генераторе кода
Code Architect
LED - Сколько отдельных лампочек может контролировать Arduino
Любой данный вывод микроконтроллера AVR может потреблять до 40 мА, а общий источник питания, получаемый или потребляемый микросхемой (то есть на земле и выводах Vcc), должен быть ниже 200 мА.
Charlieplexing - отличное решение для ситуаций, когда вам нужно много светодиодов, но вы можете обойтись только одним светодиодом , горящим за раз. Стандартная плата Arduino (например, Duemilanove) имеет 17 «свободных» контактов ввода / вывода, не считая TX, RX, Reset или 13 контакта. Таким образом, вы можете подключить 17 * 16 = 272 светодиода. Это может работать хорошо, особенно если вы держите один светодиод горящим или быстро просматриваете только несколько. Но если вы попытаетесь осветить всю матрицу узором, вы обнаружите, что каждый из них включен (чуть меньше) 1/272 времени, поэтому, если ток вашего привода составлял 30 мА в любой данный момент, каждый светодиод средний ток будет около 0.1 мА - довольно тускло.
Если вам не нужно так много светодиодов, но вместо этого требуется большая яркость, традиционное мультиплексирование может быть лучшим вариантом. В этом случае вы используете некоторые из ваших строк как строки, а некоторые как столбцы в матрице. Если вы используете ток светодиода 10 мА, вы можете определить матрицу из 4 столбцов и 13 строк, где все 4 светодиода в одной строке могут быть включены одновременно, и вы просматриваете строки. Тогда каждая строка находится в 1/13 времени при токе 10 мА, поэтому средний ток светодиода может достигать 0.76 мА, НО получается всего 4 * 13 = 104 светодиода. (Определенно ярче для каждого светодиода, чем с Charlieplexing.)
Предел в последнем примере - 40 мА на вывод на AVR - поскольку каждый вывод выводит рядный источник 4x10 = 40 мА. Если вы разрешите добавлять внешние транзисторы (которые могут быть дешевыми и небольшими) к выходам строк, вы можете избежать этого конкретного ограничения и увеличить яркость. Например, вы можете сделать массив 8x9 с 8 строками и 9 столбцами, всего 72 светодиода. Одна из 8 строк включена за раз, выбранная через транзистор.До всех 9 светодиодов в заданном ряду могут быть включены одновременно при токе 20 мА, поэтому 180 мА поступает от транзистора, и вы остаетесь ниже предельных значений тока AVR. Средний ток на светодиод теперь составляет 20 мА / 8 = 2,5 мА - обычно достаточно яркий.
Как управлять светодиодом WS2811 RGB с помощью Arduino
Адресуемое управление светодиодами WS2811 RGB:
Адресные светодиоды RGB WS2811 отлично подходят для получения различных цветов. Давайте сделаем WS2811 RGB LED control RGB LED Controller для управления пиксельными светодиодами.
Необходимые компоненты:
1. Плата Arduino Uno R3
2. Светодиоды WS2812B
3. Источник питания 5 В
4. IRFZ44N
5. Светодиод:
6. Резистор
7. Конденсатор
8. Паяльник
Что такие светодиоды ws2811?
ws2811 - это светодиод RGB. Но это не простая светодиодная лента RGB. Это адресный светодиод RGB. Это означает, что вы можете контролировать каждый цвет светодиода с помощью входного сигнала данных.
Вы можете получать эти сигналы данных от различных устройств, таких как цифровой вывод платы Arduino, от соответствующего контроллера светодиодов RGB и многих других.Главное, чтобы этот информационный сигнал был импульсом ШИМ. Эти импульсы ШИМ запускают светодиоды.
Я использую светодиодную панель с адресуемой RGB-подсветкой ws2811. Название ws2811 происходит от микросхемы драйвера ws2811. Для этого мы называем это светодиодами ws2811.
Иногда ИС может быть внутри светодиода, этот тип светодиода известен как светодиоды ws2812. Эти светодиоды также работают по тому же принципу.
Этот адресный светодиодный RGB-светодиод ws2811 работает от постоянного тока 5 В. Поэтому следует позаботиться о полярности напряжения.
Контроллер светодиодов RGB WS2811, который мы производим сегодня, также работает с постоянным током 5 В.
Подключение для светодиодов WS2811 RGB:
У купленных мной светодиодных лент RGB есть порт папа и порт женщины.Мужской порт используется для отправки сигнала данных от контроллера на светодиоды. А женский порт используется для отправки сигнала данных на следующие светодиодные ленты. Таким образом, соединение идет, и мы можем управлять светодиодом WS2811 RGB.
Для работы светодиодов требуется 5 В постоянного тока. Но все мы знаем, что у округа Колумбия большие потери. Так вы увидите, что светодиод возле блока питания светится больше, чем светодиодные ленты Last.
Для решения этой проблемы нам необходимо подключить все светодиоды + ve и все светодиоды к земле. Затем мы должны дать мощность в каждой полосе.
Контроллер:
В этом случае есть 2 варианта. Вы можете купить готовые контроллеры. Что будет легче программировать с данным программным обеспечением. Вы получите простой программный интерфейс, который поможет вам, если вы не хотите возиться с кодированием.
Arduino как контроллер светодиодов WS2811 RGB:
Здесь я буду использовать несколько основных примеров из библиотеки Arduino
1. FastLED.
2. Adafruit Neopixel.
Теперь посмотрите видеоинструкцию о том, как это использовать и какие параметры вам нужно изменить.Позвольте мне сказать вкратце.
LED_Pin также известен как Data_Pin. Контакт используется для подачи сигнала данных на светодиоды.
Num_LED также известен как количество светодиодов. Здесь вы должны указать общее количество светодиодов, которые вы подключаете к светодиодам.
В некоторых кодах вы найдете настройки яркости. Эта опция в основном используется для настройки правильной яркости светодиодов. Здесь мы поговорим о цифровых ценностях. Здесь общий диапазон составляет от 0 до 255. Теперь 0 соответствует яркости 0%, а 255 - яркости 100%.Вы можете использовать любые значения между этими двумя значениями для светодиодного контроллера WS2811 RGB.
Работая с этими двумя библиотеками, я обнаружил, что библиотека fastLED работает безупречно и легко для понимания. И здесь вы можете кодировать один за другим, а также можете использовать любой массив для освещения светодиодов.
Предположим, вы хотите запустить светодиод 1, тогда вы можете написать одну строку кода и заставить светодиоды светиться.
Вы можете сделать простой цикл for_loops для работы светодиодов. Эта библиотека действительно имеет смысл.
Матрицы форм:
С этими светодиодами можно сделать отличный дисплей. В основном, используются светодиоды ws2812.Эти светодиоды имеют высокую плотность, поэтому дисплей, который будет производиться, будет намного больше по сравнению со светодиодами ws2811.
Для создания изображения вам понадобится драйвер светодиодов, потому что светодиодов слишком много, вы не можете управлять всеми ими с помощью одного Arduino (это не невозможно. Но с Arduino очень сложно запустить видеофайл через Arduino. ). Так что в основном люди используют подходящий контроллер t300k для управления этими светодиодами. И сделать это несложно.
Для этого вам понадобится кабель Ethernet.Подключите контроллер к компьютеру, а затем откройте данное программное обеспечение. Затем запустите любой видеофайл, и ваш видеофайл отобразится на дисплее. Все очень просто.
Схема:
с инфракрасным портом - Arduino - Робо Индия || Учебники || Изучите Arduino |
Robo India представляет руководство по управлению светодиодом, подключенным к Arduino, с помощью ИК-приемника. 1.Введение:Беспроводное управление на Arduino очень просто.
В этом уроке мы будем управлять светодиодами, подключенными к Arduino UNO, с помощью ИК-пульта.
2. Необходимое оборудованиеДля выполнения этой схемы потребуется следующее оборудование.
3. Строительный контурВыполните следующие соединения с Arduino-
4. Файл библиотекиДля запуска этого скетча потребуется следующая библиотека.Загрузите zip-файл, распакуйте его и скопируйте в папку с библиотекой Arduino.
Этот файл библиотеки должен быть помещен в папку установки Arduino. У меня 64-битная ОС Win7, а адрес моей папки библиотеки Arduino находится по адресу
.C: \ Program Files (x86) \ Arduino \ библиотеки
Вы можете скачать файл библиотеки отсюда.
5. ПрограммированиеВы можете скачать этот скетч Arduino отсюда.
// Учебник Robo India по управлению светодиодами с помощью ИК-пульта дистанционного управления // https: // www.roboindia.com/tutorials #include6. Выход#include #include #include int IR_Remote = 8; // ИК-датчик, подключенный к arduino int RedLED = 4; int GreenLED = 3; int YellowLED = 2; int led [] = {0,0,0,0}; #define code1 0xC101E57B // Шестнадцатеричный код для кнопки 1 IRR Remote #define code2 0x97483BFB // Шестнадцатеричный код для кнопки 2 IRR Remote #define code3 0xF0C41643 // Шестнадцатеричный код для кнопки 3 пульта IRR Remote IRrecv irrecv (IR_Remote); decode_results результатов; установка void () { irrecv.enableIRIn (); // Запускаем приемник pinMode (RedLED, ВЫХОД); pinMode (GreenLED, ВЫХОД); pinMode (желтый светодиод, ВЫХОД); } void loop () { если (irrecv.decode (& результаты)) { беззнаковое целое значение = результаты.значение; переключатель (значение) { case code1: если (led [1] == 1) { digitalWrite (RedLED, LOW); // светодиод гаснет при нажатии кнопки led [1] = 0; } еще {// если первый светодиод не горит digitalWrite (RedLED, HIGH); // включаем при нажатии кнопки светодиод [1] = 1; // и установим его состояние как на } перерыв; case code2: если (led [2] == 1) { digitalWrite (GreenLED, LOW); светодиод [2] = 0; } еще { digitalWrite (GreenLED, HIGH); светодиод [2] = 1; } перерыв; case code3: если (led [3] == 1) { digitalWrite (желтый светодиод, НИЗКИЙ); led [3] = 0; } еще { digitalWrite (желтый светодиод, высокий); светодиод [3] = 1; } перерыв; } irrecv.продолжить(); // Получаем следующее значение } }
После успешной загрузки кода, если вы нажмете кнопку 1 на ИК-пульте дистанционного управления, загорится красный светодиод, а если вы нажмете ту же кнопку еще раз, красный светодиод погаснет. То же, что и для зеленого и желтого светодиодов для кнопок 2 и 3 ИК-пульта дистанционного управления соответственно.
Вы можете добавить больше светодиодов для большего количества кнопок.
Если у вас есть какие-либо вопросы, напишите нам по адресу [email protected]
Благодарности и приветы
Команда разработки контента
Robo India
https: // roboindia.ком
Что такое COB LED? Светодиоды COB и ШИМ-управление Arduino
Светодиоды, или светодиоды, стали доступны для использования в электронике с начала 1960-х годов. В последующие десятилетия их возможности и возможности применения резко возросли, что позволило этим устройствам освещать городские улицы, часами освещать фонари при питании от батареи, а также питать телевизоры и экраны компьютеров способами, которые еще недавно были немыслимы.
Что такое светодиод COB?
Одним из способов изменения светодиодов с 1960-х годов является их миниатюризация, переход от сквозных компонентов к гораздо меньшим поверхностным устройствам (SMD), а теперь и к COB, или встроенным светодиодам. Хотя эти более крупные (или менее плотные) стили определенно не исчезнут в ближайшее время, светодиоды COB обладают невероятной «плотностью светового потока». Фактически, они способны излучать почти в 40 раз больше света на площадь поверхности, чем технология сквозных отверстий, и почти в 10 раз больше, чем светодиодная технология для поверхностного монтажа.
Секрет невероятных световых возможностей COB LED заключается в том, что в одном незаметном припаянном модуле размещается несколько светодиодов. Это означает, что в процессе сборки светодиодной осветительной установки не нужно прикреплять каждый отдельный светодиод. Это занимает много времени и сравнительно неэффективно с точки зрения пространства, поскольку COB не должен упаковывать каждый диод индивидуально. Здесь можно просто разместить один компонент и установить несколько светодиодов - часто сотни - в ограниченном пространстве.
Где использовать COB Lights
Как и в случае с любой другой технологией, есть несколько соображений, которые могут сделать использование COB-освещения неуместным.Во-первых, при таком количестве светодиодов, помещенных в ограниченное пространство, один из этих блоков может выделять много тепла. Хотя светодиоды очень эффективны по сравнению со своими собратьями от ламп накаливания, огромное количество отдельных излучателей света / тепла действительно складывается (как мы рассмотрим позже). Управление этими устройствами также может быть сложным, поскольку вы не можете просто протянуть два провода между батареей CR2032. Вам часто нужно производить более 30 В постоянного тока, чтобы заставить работать COB-светильник.
Еще одно соображение заключается в том, что доступно не так много цветов, как у традиционных светодиодов, а функции адресации или изменения цвета кажутся (пока) неизвестными с этой новой технологией.COB также меньше точечный источник, чем одиночный диод, поэтому правильное наведение луча может означать очень большой узел отражателя.
Наконец, если вы просто не получили в руки ни одного - честного или нет - вы можете не решиться использовать их. В оставшейся части статьи я рассмотрю несколько экспериментов, которые я проделал со светодиодами COB.
COB LED в разобранном виде
Неповрежденный COB и блок с частично соскобленным покрытием, чтобы обнажить отдельные диоды
Если вам интересно, где на самом деле диоды находятся на COB, они находятся прямо под поверхностью специального люминофорного покрытия, которое делает COB чем-то похожим на жареное яйцо в отключенном состоянии.Это помогает им излучать правильный оттенок - или смесь длин волн - белого. Сотрите это, и вы увидите светодиоды внизу, хотя после двух попыток сделать это сложнее, чем я предполагал, и есть явная вероятность, что вы повредите COB в процессе. Тем не менее, вы можете увидеть разницу выше и увидеть, сколько маленьких огней можно втиснуть в круг, размер которого в данном случае составляет примерно квартал США.
Регулируемая яркость с ШИМ
Как отмечалось ранее, учитывая количество задействованных светодиодов, эти блоки COB действительно сильно нагреваются, чего я не оценил, когда впервые экспериментировал с ними.Фактически, я быстро разрушил соединение на первом протестированном блоке. В конце концов я использовал один из самых маленьких початков, который я получил для этой статьи (с тем, что при других обстоятельствах было бы забавно большим радиатором). Также примечательно то, что эти устройства могут быть очень яркими. После некоторых начальных экспериментов было проведено тестирование под кожухом диффузора в солнцезащитных очках.
Другое соображение заключается в том, что мой обычный источник питания рассчитан только на 30 В, в то время как блоки, которые я тестировал, были рассчитаны примерно на 35 В.Это означало создание источника питания, способного выдерживать это более высокое напряжение. Разобравшись с этим, я экспериментировал с ограничением тока для изменения яркости. В какой-то степени это работает, но с моей конкретной настройкой было довольно сложно управлять.
Настройка управления ШИМ
Затем я обратился к ШИМ для управления через полевой МОП-транзистор FQP30N06L и Arduino Nano Every. Он был загружен слегка модифицированной версией встроенного примера «замирания», с использованием вывода 3 в качестве выхода ШИМ, подключенного к выводу затвора MOSFET через резистор на 200 Ом.Переключение этого MOSFET-транзистора с «аналоговым» выходом PWM с источником питания COB, установленным на 34,5 В, позволяло светодиоду COB плавно увеличиваться и уменьшаться, как если бы это был обычный светодиод. Я также добавил 5-миллиметровый светодиод со сквозным отверстием прямо на выходной контакт, чтобы отразить то, что происходило с более мощным COB.
Это сработало так, как должно было, поскольку и напряжение, и ток находятся в пределах спецификаций FQP30N06L - 60 В и 32 постоянного тока соответственно. Хотя это не проблема для этого типа полевого МОП-транзистора, само собой разумеется, что выходы Arduino далеко не подходят для обеспечения необходимой здесь мощности.Также примечательно то, что, хотя номинально это деталь для поверхностного монтажа, припаивать провода к тестируемым устройствам COB было довольно легко.
Заключение
Когда я «испачкал руки» светодиодами COB, стало ясно, что они удивительно способны производить очень яркий свет из небольшого корпуса. С другой стороны, требования к питанию немного выше, чем у одиночных светодиодов, и здесь меньше цветовых и технологических вариантов. Если вы все же решите провести аналогичные эксперименты, обязательно примите необходимые меры предосторожности, в том числе защитите глаза и используйте радиатор большего размера, чем вы изначально предполагали!
Дополнительная литература :
· Мультиплексирование светодиодов с модулем MAX7219
· Учебное пособие по Charlieplexing: Charlieplexing LED Matrix
· Что такое ШИМ? Объяснение широтно-импульсной модуляции
· Arduino PWM: широтно-импульсная модуляция в Arduino
Как использовать светодиод RGB в Arduino
Это руководство предоставляет вам некоторую информацию о светодиодах Arduino RGB и о том, как вы можете использовать или управляйте ими с помощью Ozeki 10.Вы узнаете об основной концепции светодиодов RGB. в первой части документа, затем, следуя пошаговой инструкции, вы сможете увидеть, как вы можете управлять этими светодиодами RGB из ваш компьютер с помощью Ozeki 10. Итак, начнем прямо сейчас.
Что такое RGB?
Расшифровывается как «красный, зеленый, синий». RGB означает три оттенка света, которые можно смешивать. вместе, чтобы создать разные цвета. Сочетание красного, зеленого и синего света это стандартный метод получения цветных изображений на экранах, например телевизорах, компьютерные мониторы и экраны смартфонов.
Что такое светодиод RGB?
На самом деле существует два типа светодиодов RGB; общий катодный и общий анод один. В общем светодиоде RGB с катодом катод всех светодиодов общий. и мы подаем ШИМ-сигналы на анод светодиода, в то время как в общий анодный светодиод RGB, анод всех светодиодов общий, и мы подаем ШИМ-сигналы на катод светодиодов.
Как работает светодиод RGB?
Светодиод RGB может излучать разные цвета, смешивая 3 основных цвета: красный, зеленый и синий.Таким образом, он фактически состоит из 3 отдельных светодиодов - красного, зеленого и синего, упакованных в один корпус. Вот почему у него 4 вывода, по одному для каждого из 3 цветов и один общий катод. или анод в зависимости от типа светодиода RGB. Катод будет подключен к земле и 3 анода будут подключены через резисторы 220 Ом к 3 цифровым контактам. на плате Arduino, которая может обеспечивать сигнал ШИМ. Мы будем использовать PWM для моделирования аналоговый выход, который будет обеспечивать разные уровни напряжения на светодиодах, чтобы мы могли получить желаемые цвета.
Схема подключения светодиодовArduino RGB
Рисунок 1 - Схема подключения Arduino RGB LED
Как использовать светодиод Arduino RGB в Ozeki
Подключение контроллера светодиода RGB позволяет легко управлять яркостью и цветом вашего светодиода RGB. Команды могут быть перенаправлены на ваш светодиодный контроллер с любого подключения вашего Ozeki 10. Вы можете смешивать любой цвет, используя правильную шкалу из 3-х основных цветов. Каждый цвет масштабируется от 0 до 255. Вы можете изменять яркость, сохраняя при этом цвет.Чтобы использовать светодиод RGB в Ozeki, вам сначала необходимо загрузить Ozeki Robot Developer. Озэки Robot Developer установит библиотеки Arduino, необходимые для эффективного использования этого датчика.
Скачать Ozeki Robot Developer
После установки Ozeki Robot Developer вам необходимо загрузить код управления светодиодами RGB. к вашему Arduino. Вы можете найти код и инструкции по загрузке на следующих страницах. Процесс загрузки состоит из двух шагов: сначала вам нужно отформатировать EEPROM Arduino, тогда вам нужно загрузить контрольный код.Процедура очень проста, требуется всего лишь несколько секунд.
Загрузите код светодиода RGB в Arduino Uno
Загрузите код светодиода RGB в Arduino Mega 2560
Загрузите код светодиода RGB в Arduino Nano
Загрузите код светодиода RGB в Raspberry Pi
Датчики arduino и Ozeki будут обмениваться данными через порт USB с использованием протокола светодиодов Ozeki RGB. Этот Протокол позволяет вам использовать датчик прямо на вашем ПК. Вы сможете управлять этим датчиком через Интернет. пользовательский интерфейс или вы сможете общаться с ним с помощью Ozeki Chat.Вы можете узнать больше об управлении чатом на следующей странице.
Как общаться с RGB-светодиодом с помощью чата
Важно понимать управление чатом, потому что когда вы создаете робота, способ управления этим датчиком - отправка и получение сообщений. если ты откройте приложение Ozeki Robot Developer, вы увидите, кому вы можете написать C # .Net программа для работы с этим датчиком.
Шаги подключения
- Используйте схему подключения для подключения светодиода RGB к Arduino
- Подключите плату Arduino к компьютеру
- Проверьте COM-порты в списке устройств Windows
- Откройте приложение Arduino на своем компьютере
- Загрузите пример кода в Arduino
- Откройте графический интерфейс Ozeki 10 в своем браузере
- Выбрать подключение светодиода RGB
- Проверьте светодиод RGB, установив цвет в Ozeki 10
Обзор системы
Предлагаемая нами система состоит из светодиода RGB, подключенного к аналоговому порту. вашего Arduino.Arduino будет отвечать за чтение данных с этого устройства. в реальном времени. Мозг системы будет работать на ПК (рисунок 2). На ПК Озэки 10 смогут управлять общением. Вы можете легко запустить Ozeki 10 с помощью веб-браузера.
Рисунок 2 - Конфигурация системы подключения светодиода RGB к ПК с помощью Arduino
Предварительные требования
- Светодиод RGB
- Резистор 2x100 Ом и 1x220 Ом
- Ozeki 10 установлен на вашем компьютере
- Программируемая плата (Arduino Mega / Nano / Uno или Raspberry Pi) Кабель USB
- необходим между Arduino Mega / Nano / Uno и вашим компьютером
Шаг 1. Подключите светодиод RGB к Arduino
Вы можете увидеть, как подключить светодиод RGB на любую из следующих досок:
Ваш браузер не поддерживает видео тег.
После подключения подключите плату к компьютеру!
Шаг 2 - Загрузите код в микроконтроллер
(Вот код для загрузки)
Ваш браузер не поддерживает видео тег.
Шаг 3. Запустите Ozeki 10, чтобы попробовать RGB LED
Ваш браузер не поддерживает видео тег.
Шаг 4. Настройте RGB-светодиод в Ozeki 10
Чтобы настроить светодиод RGB (подключенный к Arduino) в Ozeki 10, который установлен на вашем компьютере, вам необходимо открыть графический интерфейс пользователя (GUI) Ozeki 10.Вы можете открыть графический интерфейс, введя URL-адрес компьютера в свой веб-браузер. Например, если у нашего ПК IP-адрес 192.168.1.5, мы бы введите http://192.168.1.5:9513 в наш веб-браузер.
Шаг 5. Знакомство с протоколом светодиодов RGB
Контроллер светодиодов RGB может связываться с Ozeki через следующий протокол.
Каталожные номера:
https://howtomechatronics.com
https://create.arduino.cc
https: // techterms.ком
Дополнительная информация
Управление светодиодами через UART - обмен текстовыми данными между двумя платами - XOD
В этом примере описывается обмен данными между двумя платами Arduino.
В качестве источника данных мы будем использовать два потенциометра, подключенных к первой плате Arduino. Мы сериализуем данные в форматированные текстовые строки и отправим их через UART на вторую плату Arduino. Вторая плата Arduino будет управлять яркостью двух светодиодов, используя полученные данные.
Необходимое оборудование
- 2 × плата Arduino Uno
- 2 × светодиода
- Резистор 2 × 220 Ом
- Потенциометр 2 × 10 кОм
- 2 макета
- соединительные провода
Цепи
Плата отправителя
Первым шагом является создание схемы для платы Arduino, которая отправляет данные. Подключите два потенциометра к аналоговым портам A0
и A1
на плате Arduino.
Плата приемника
Второй шаг - создать схему для платы Arduino, которая принимает данные.Подключите два светодиода через резисторы 220 Ом к цифровым портам D4
и D6
на плате Arduino.
Для управления яркостью оба светодиода должны быть подключены к портам, поддерживающим ШИМ.
Ссылка на платы Arduino
Третий шаг - создать соединение UART между платами Arduino. Все платы Arduino имеют по крайней мере один интерфейс UART, также известный как hardware serial или просто «последовательный».
Для связи последовательного интерфейса используются два контакта с именами TX
и RX
. TX
и RX
- это сокращения для передачи и приема соответственно.
Например, Arduino Uno имеет один последовательный интерфейс на цифровых выводах D0
( RX
) и D1
( TX
). На Uno этот порт также используется для связи с компьютером через USB. В свою очередь, Arduino Mega имеет три дополнительных интерфейса UART:
-
Serial1
на контактахD19
(RX
) иD18
(TX
) -
Serial2
на контактахD17
(RX
) иD16
(TX
) -
Serial3
на контактахD15
(RX
) иD14
(TX
)
Если аппаратных последовательных интерфейсов недостаточно, можно программно смоделировать интерфейс UART на любых цифровых выводах Arduino.Этот метод известен как bit-banging, и такой интерфейс называется software serial
.В этом руководстве платы Arduino Uno имеют только один интерфейс UART. Он занят, потому что мы используем его для загрузки прошивки и связи с компьютером. Итак, давайте создадим новую серию программ.
Определите цифровые выводы TX
и RX
на обеих платах Arduino. Пусть вывод D8
Arduino будет RX
, а вывод D9
Arduino будет TX
.
Чтобы связать два устройства с шиной UART, вывод TX
первого устройства должен быть подключен к выводу RX
второго устройства, а вывод TX
второго устройства должен быть подключен к RX.
пин первой. Это можно сделать физически, перекрыв провода.
Свяжите вывод D9
на первой плате Arduino с выводом D8
на второй плате Arduino и вывод D9
на второй плате Arduino с выводом D8
на первой плате.
Для всех сигналов требуется опорное напряжение. GND
- это то, что обеспечивает эту ссылку для несимметричных сигналов, таких как те, которые используются UART. Поэтому основания на обеих досках должны быть соединены.
Свяжите вывод GND
на первой плате Arduino с выводом GND
на второй плате.
Программирование
Создайте новый проект в XOD и назовите его примерно так: uart-led-control
. Мы создадим два патча XOD - по одному для каждой платы.Создайте новый патч для платы подключенных потенциометров и назовите его pots
.
Получить значения
Давайте соберем значения потенциометров и подготовим их для последующей сериализации.
- Добавьте два узла
pot
на патч. Они соответствуют паре потенциометров на макетной плате. Чтобы избежать путаницы, маркируйте их по-другому. Например, горшокA
и горшокB
. - Установите контакты
PORT
узлаpot
.Когда мы подключили их кA0
иA1
, мы установили значения выводаPORT
наA0
иA1
. - Узел
pot
выводит значения сигнала в диапазоне от0
до1
. Потенциометр - это аналоговый электронный компонент. Даже если вы не дотронетесь до ручки потенциометра, выходное значениеpot
может непрерывно изменяться, например, с0,855
на0,856
и обратно. Чтобы избавиться от этих незначительных изменений, округлим выходы потенциометров до двух десятичных знаков после точки. - Добавьте два узла
round-фракции
на патч и свяжите их с узламиpot
. Чтобы установить два десятичных разряда после точки, поместите значение2
на выводDIG
.
Собрать данные
В этом руководстве мы используем текстовый формат CSV (значения, разделенные запятыми) для формирования строковых строк с данными, которые мы передаем. Каждая строка представляет собой строку из двух значений сигнала от потенциометров, разделенных запятой.
Вот пример строки: 0.25,0.95
.
Чтобы объединить все значения данных в одну строку, используйте узел join
.
- Поместите
соединение
на патч. - Установите значение разделителя на выводе
D
на,
. - Свяжите узел
join
с обоими узламиокругленного дробления
.
Отправить данные
Давайте определим программный последовательный интерфейс в программе pots
и опишем, как передаются данные.
- Чтобы настроить программный последовательный интерфейс, поместите узел
soft-uart
из библиотекиxod / uart
в патч. Установите значения выводовRX
иTX
. Мы помещаем значениеD8
на выводRX
и значениеD9
на выводTX
. - Вывод
BAUD
устанавливает скорость передачи данных в битах в секунду (бод) для последовательной связи. Эти значения скорости передачи стандартизированы. Для программного последовательного интерфейса максимальное значение скорости передачи составляет115200
.Обратите внимание, что чем выше значение скорости передачи, тем больше вероятность того, что данные могут быть потеряны или повреждены во время передачи. Мы устанавливаем значениеBAUD
равным19200
. - Добавьте в патч узел
print
из библиотекиxod / uart
. Этот узел преобразует строковое значение из выводаDATA
в одну строку, добавляя два байта с возвратом каретки\ r
и переводом строки\ n
байтовыми литералами. После этогоprint
отправляет линию через UART каждый раз, когда импульсный сигнал поступает на его выводSEND
. - Свяжите вывод
DATA
с узломjoin
. - Свяжите вывод
UART
узлаprint
с узломsoft-uart
.
Вот пример отправляемой строки: 0,25,0,95 \ r \ n
.
Предельная частота
Последний шаг для патча pots
- ограничение частоты отправки. Мы отправим новую строку только при изменении любого из значений потенциометра.
Также мы собираемся использовать узел дроссельной заслонки
, чтобы снизить частоту импульсов.Во время поворота потенциометр генерирует множество новых значений, а частота пульса высока. Желательно ограничить частоту импульсов, чтобы каждая строка могла быть отправлена в целостности.
- Добавьте два узла
с изменением импульса
на патч и свяжите их с узламис округлением и дробью
. - Поместите
любой узел
в патч и свяжите его входы с узламис импульсным переключением
. Теперь узлылюбого импульсного изменения
и - Добавьте узел
дроссельной заслонки
в патч и поместите его междулюбыми узлами
ипечати
. ДроссельT
секунду. Чтобы снизить частоту, мы помещаем значение0,05
секунды на выводT
.
Патч для первой платы Arduino готов. Загрузите, используйте эмулятор терминала, чтобы увидеть результат. Сделаем следующий патч.
Получение данных
Программа для платы Arduino со светодиодами запускается с приема данных от UART.Создайте новый патч для платы подключенных светодиодов и назовите его leds
.
- Чтобы настроить программный последовательный интерфейс, поместите узел
soft-uart
из библиотекиxod / uart
в патч. Установите значения выводовRX
иTX
. Мы помещаем значениеD8
на выводRX
и значениеD9
на выводTX
. Платы - Arduino должны обмениваться данными с одинаковой скоростью. Значение вывода
BAUD
такое же, как и в предыдущем патче.Установите значение19200
на выводBAUD
. - Добавьте в патч строку чтения
ищет в нем литерал байта
\ n
и выгружает все символы перед\ n
в одну строку. Он также вырезает из вывода литерал байта\ r
. ВыводREAD
запускает новое чтение строки. - Свяжите вывод
UART
узластроки чтения
с узломsoft-uart
и установите значениеREAD
наНепрерывно
.
Анализировать данные
Когда строка получена, ее нужно проанализировать. Мы будем использовать узел parse-tabular
, чтобы разобрать сериализованную строку CSV обратно на два числа.
- Добавьте два узла
parse-tabular
в исправление. Один узел на светодиод. Узелparse-tabular
является инверсным ксоединению
. Он разбивает строкуSTR
на токены, используяD
в качестве разделителя, и выводит токен с индексомIDX
.НумерацияIDX
начинается с0
. Например, для строкиABCD, 1234, EFGH
с разделителем,
часть с номером0
будетABCD
, часть с номером1
будет1234
, а часть с номером номер2
- этоEFGH
. - Свяжите выводы
STR
узловс синтаксической таблицей
с выводомLINE
узластроки чтения
. - Установите разделитель на штифтах
D
. Укажите его как символ в одинарных кавычках. - Установите значение
IDX
первого узласинтаксического анализа
на0
, чтобы прочитать значениеPot A
. - Установите значение
IDX
второго узласинтаксического анализа
на1
, чтобы прочитать значениеPot B
.
Контрольные светодиоды
Для завершения патча leds
осталось отправить части линии на светодиоды.
- Поместите два узла
с номером синтаксического анализа
из библиотекиuart-example
в патч и свяжите их с узлами синтаксического анализаparse-number
преобразует значения из типа String в Number. - Добавить к
светодиодам по
узел для каждого потенциометра. Вы можете назвать ихLED A
иLED B
как потенциометры. Когда мы подключаем светодиоды к контактамD3
иD6
на плате Arduino, мы помещаем значенияD3
иD6
на контактыPORT
узловled
. - Свяжите выходы с номером синтаксического анализа с выводами
LUM
узловled
.