Содержание
Возможности Arduino, как и большинство платформ программирования, можно расширить с помощью библиотек. Библиотеки предоставляют дополнительные функции, которые можно без труда использовать в своих программах. Например, при обработке данных или при использовании какого-то определенного оборудования. Чтобы использовать библиотеку в программе, выберите ее из списка в меню «Скетч» > «Подключить библиотеку». Ряд библиотек включены в сборку IDE, но при необходимости можно загрузить или создать свои собственные. Подробнее об установке библиотек смотрите в этих инструкциях . Прочтите также руководство по написанию собственных библиотек.
Стандартные библиотеки:
- EEPROM — чтение и запись постоянной памяти;
- Ethernet / Ethernet 2 — для подключения к Интернету при использовании Arduino Ethernet Shield, Arduino Ethernet Shield 2 и Arduino Leonardo ETH;
- Firmata — для связи с приложениями на компьютере с использованием стандартного последовательного протокола;
- GSM — для подключения к сети GSM / GPRS при использовании платы GSM;
- LiquidCrystal — для управления жидкокристаллическими дисплеями (LCD);
- SD — для чтения и записи SD карт;
- Servo — для управления сервомоторами;
- SPI — для связи с устройствами с использованием шины последовательного периферийного интерфейса (SPI);
- SoftwareSerial — для последовательной связи через любые цифровые контакты. Версия 1.0 и более поздняя версия Arduino включают библиотеку NewSoftSerial;
- Stepper — для управления шаговыми двигателями;
- TFT — для рисования текста, изображений и фигур на экране Arduino TFT;
- WiFi — для связи с Интернетом при использовании платы Arduino WiFi shield;
- Wire — для использования двухпроводного интерфейса (TWI / I2C) при отправке и приеме данных через сеть устройств или датчиков.
Библиотеки Matrix и Sprite больше не входят в основной установочный пакет IDE.
Библиотеки только для определенных плат:
101
- CurieBLE — для взаимодействия со смартфонами и планшетами через Bluetooth (BLE);
- CurieIMU — для управления встроенным акселерометром и гироскопом;
- CurieTimerOne — для использования функций таймера;
- CurieTime — для использования и управления внутренними часами реального времени (RTC).
Due
- Audio — для проигрывания аудио файлов с SD карты.
Due, Zero, MKR1000
- USBHost — для подключения периферийных устройств с USB (мышь, клавиатура);
- Scheduler — для управления несколькими неблокирующими задачами.
Zero, MKRZERO, MKR1000
- AudioFrequencyMeter — для моделирования аудио сигнала и измерения его частоты;
- AudioZero — для проигрывания аудио файлов с SD карты;
- RTC — часы реального времени для планирования событий;
- ArduinoSound — простой способ воспроизведения и анализа аудиоданных;
- I2S — для использования протокола I2S на SAMD21
WiFi 101, MKR1000
- WiFi101 — библиотека, которая используется только с платой Wifi 101;
- WiFi101OTA — для беспроводного обновления платы MKR1000
MKR WiFi 1010, MKR VIDOR 4000, Arduino UNO WiFi Rev.2
- WiFi NINA — библиотека для работы с модулем WiFi Nina при использовании вышеперечисленных плат.
MKR Motor Carrier
- MKR Motor Carrier — библиотека, которая использоваться с MKR Motor Carrier
MKR FOX 1200
- SigFox — библиотека, которая использоваться с MKRFOX1200
MKR WAN 1300
- MKRWAN — библиотека, которая использоваться с MKR WAN 1300
MKR GSM 1400
- MKRGSM — библиотека, которая использоваться с MKR GSM 1400
Esplora
- Esplora — эта библиотека позволяет легко получить доступ к различным датчикам и исполнительным устройствам, установленным на плате Esplora.
Arduino Robot
- Robot — эта библиотека обеспечивает легкий доступ к функциям Arduino Robot.
Yún
- Bridge Library — обеспечивает связь между процессором Linux и микроконтроллером на Yún;
- Ciao Library — для упрощения взаимодействия между микроконтроллером и операционной системой Linino OS. Позволяет использовать различные соединения с большим числом распространенных протоколов обмена данными.
USB (Leonardo, Micro, Due, Zero и Esplora)
- Keyboard — для отправки информации о нажатии клавиш на подключенный компьютер;
- Mouse — для управления движением курсора на подключенном компьютере.
Дополнительные библиотеки
Если вы хотите использовать какие-то из этих библиотек, вам нужно сначала установить ее. Подробнее об установке смотрите в этих инструкциях. Также смотрите руководство по написанию собственных библиотек.
Связь (сети и протоколы):
- Messenger — для обработки текстовых сообщений с компьютера;
- NewSoftSerial — улучшенная версия библиотеки SoftwareSerial;
- OneWire — управление устройствами от Dallas Semiconductor по протоколу One Wire;
- PS2Keyboard — чтение символов с клавиатуры PS2;
- Simple Message System — отправка сообщений между Arduino и компьютером;
- SSerial2Mobile — отправка текстовых сообщений или электронных писем с помощью мобильного телефона (через AT-команды с помощью программного обеспечения);
- Webduino — расширяемая библиотека для веб-сервера при использовании платы Arduino Ethernet;
- X10 — отправка сигналов X10 по линиям электропитания переменного тока;
- XBee — для связи с XBees в режиме API;
- SerialControl — дистанционное управление другим платами Arduino через последовательное соединение.
Датчики:
- Capacitive Sensing — работа с емкостными датчиками;
- Debounce — для чтения цифровых входов с шумом (например, с кнопок).
Дисплеи и светодиодные индикаторы:
- GFX — базовый класс со стандартными графическими подпрограммами;
- GLCD — графические подпрограммы для ЖК-дисплея на основе KS0108 или эквивалентных микросхем;
- Improved LCD library — исправляет ошибки инициализации ЖК-дисплея в официальной библиотеке LCD;
- LedControl — для управления светодиодными матрицами или семисегментными дисплеями на основе MAX7221 или MAX7219;
- LedControl — альтернатива библиотеке Matrix при управлении светодиодами с помощью микросхем Maxim;
- LedDisplay — управление светодиодным дисплеем HCMS-29xx;
- Matrix — основная библиотека управления матричными светодиодами;
- PCD8544 — для работы ЖК-контроллера на дисплеях Nokia 55100;
- Sprite — основная библиотека спрайтов с изображениями для использования в анимациях со светодиодной матрицей;
- ST7735 — для работы ЖК-контроллера на 1.8 «, 128×160 TFT-экране.
Аудио и другие формы сигналов:
- FFT — частотный анализ аудио или других аналоговых сигналов;
- Tone — для генерации звуковых и других частотных сигналов в фоновом режиме на любом микроконтроллере.
Двигатели и ШИМ:
- TLC5940 — 16-канальный 12-битовый ШИМ контроллер.
Время:
- DateTime — библиотека для отслеживания текущей даты и времени в программном обеспечении;
- Metro — помогать вам выполнять регулярные действия по времени;
- MsTimer2 — использует прерывание таймера 2 для запуска действия каждые N миллисекунд.
Утилиты:
- PString — простая библиотека для печати в буфер обмена;
- Streaming — способ упростить вывод на печать.
Привет! Сегодня сделаем обзор на приемник ИК сигнала KY-022 для Ардуино. А также, соберем простую схему и напишем программу, чтобы обработать сигналы от пульта дистанционного управления и научиться управлять Ардуино с помощью таких пультов.
В прошлый раз мы делали обзор на модуль фоторезистора. Пожалуйста, посмотрите его, если уже забыли или пропустили.
Фоторезистор KY-018. Датчики. Ардуино
Сегодня возьмем новый датчик для Ардуино и попробуем расшифровать невидимые инфракрасные сигналы от пульта дистанционного управления.
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- IR модуль KY-022
- Пульт ДУ
- Кабель USB
Что такое инфракрасный свет
Инфракрасное излучение, это такой же свет, какой мы видим вокруг нас. Единственное отличие от простого дневного света, это частота и длина волны. Инфракрасное излучение находится за пределами видимого глазом человека диапазона света. Поэтому мы его не видим. Но, если бы видели, он был бы таким же светом, как луч фонарика или лампы.
Поскольку ИК свет, это вид света. Для работы приемника ИК сигналов требуется прямая видимость между приемником и источником. Он не может работать через стены как wifi или bluetooth.
ИК приемник KY-022
Модуль KY-022 это приемник ИК сигналов, сигнальный светодиод и сопротивление для него. У модуля три контакта. Питание 5 вольт, земля и контакт вывода данных. С него мы будем получать код сигнала.
Подключим модуль к Ардуино по схеме.
Библиотека IRremote.h
Для удобной работы с модулем для Ардуино уже готова библиотека IRremote.h. Скачайте и установите ее с помощью менеджера библиотек. И затем откройте код программы IRreceiveDump из примеров.
С помощью этой программы мы выведем в монитор порта данные, которые считает модуль с пульта управления.
Загрузим программу в Ардуино, подключим схему и попробуем пульт.
Кроме самого кода сигнала программа выводит имя протокола, который использует пульт ДУ. В нашем случае это NEC. Пульт от телевизора Samsung будет работать по своему протоколу. Вы можете прочитать подробнее про разные протоколы, например, здесь.
Полный текст программы
#include #if defined(ESP32) int IR_RECEIVE_PIN = 15; #else int IR_RECEIVE_PIN = 11; #endif IRrecv IrReceiver(IR_RECEIVE_PIN); // On the Zero and others we switch explicitly to SerialUSB #if defined(ARDUINO_ARCH_SAMD) #define Serial SerialUSB #endif void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(115200); #if defined(__AVR_ATmega32U4__) || defined(SERIAL_USB) || defined(SERIAL_PORT_USBVIRTUAL) delay(2000); // To be able to connect Serial monitor after reset and before first printout #endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__)); IrReceiver.enableIRIn(); // Start the receiver IrReceiver.blink13(true); // Enable feedback LED Serial.print(F("Ready to receive IR signals at pin ")); Serial.println(IR_RECEIVE_PIN); } void dump() { // Dumps out the decode_results structure. // Call this after IRrecv::decode() int count = IrReceiver.results.rawlen; IrReceiver.printResultShort(&Serial); Serial.print(" ("); Serial.print(IrReceiver.results.bits, DEC); Serial.println(" bits)"); Serial.print("Raw ["); Serial.print(count, DEC); Serial.print("]: "); for (int i = 0; i < count; i++) { if (i & 1) { Serial.print(IrReceiver.results.rawbuf[i] * MICROS_PER_TICK, DEC); } else { Serial.write('-'); Serial.print((unsigned long) IrReceiver.results.rawbuf[i] * MICROS_PER_TICK, DEC); } Serial.print(" "); } Serial.println(); } void loop() { if (IrReceiver.decode()) { Serial.println(); dump(); IrReceiver.resume(); // Receive the next value } }
Заключение
Мы научились считывать сигналы от инфракрасного излучения и обрабатывать их в программе на Ардуино. В будущих проектах это позволит нам использовать пульты для управления устройствами на Ардуино. Попробуем сделать простую схему, чтобы проверить это в следующем проекте.
Где купить
Так исторически сложилось, что на текущий момент одним из самых популярных цифровых температурных датчиков является датчик DS18B20 корпорации Dallas Semiconductor. Конечно же и мы не можем обойти его стороной.
Сейчас вы можете приобрести его в разном исполнение. И как готовый модуль, в влагозащитном корпусе, просто датчик в разном исполнении. Дума каждому найдется предложение для его нужд.
Особенности датчика :
- Простой интерфейс подключения 1-Wire .
- Наличие уникального 64-битного адреса датчика, для использование систем с большим числом датчиков.
- Напряжение питания от 3 V до 5.5 V .
- Точность в ±0,5 С, для диапазона -10…+85 С . Для диапазона -55… +125 точность ± 2 С.
- Возможность паразитного питания (Parasite power).
Более подробно можно почитать в Datasheet или на русском . Мы не будем заморачиваться с паразитным питание и подключим датчик всем тремя проводами. Если у вас не готовый модуль о вам придется поставить еще подтягивающий резистор для работы по 1-Wire.
Вся память DS18B20 включает в себя оперативную (SRAM) и энергонезависимую (EEPROM) память. В EEPROM хранятся регистры TH, TL и регистр конфигурации. Если функция тревожного сигнала не используется, то регистры TH и TL могут использоваться как регистры общего назначения. В режиме термостата TH содержит значение верхнего порога температуры, TL соответственно нижнего порога.
Кодинг.
Первым делом нам потребуется библиотека OneWire которая нам очень упростит жизнь. Скачать можно с GitHub или с нашего сайта.
Любое общение с датчиком начинается с команды Reset . То есть МК прижимает шину данных в состояние логический «0» на 480 µs, потом отпускает ее. Датчик отвечает на это сигналом присутствия, после чего мы отправляем команду Skip ROM ( 0xCC ). Тое сть обратимся ко всем датчика которые присутствуют на шине.
OneWire( uint8_t pin);
Конструктор, Pin – номер вывода, к которому подключен датчик.
uint8_t reset(void);
Инициализация операции на шине. С этой команды должна начинаться любая операция обмена данными. Возвращает:
- 1 – если устройство подключено к шине (был ответный импульс присутствия);
void write(uint8_t v, uint8_t power = 0);
Запись байта. Передает байт в устройство на шине.
- v – байт;
- power – признак выбора режима питания; power = – питание от внешнего источника. power = 1 – “паразитное” питание.
Отправим команду 0x44 инициализации измерения температуры.
Пауза 1 сек. Ожидание на время, необходимое для выполнения датчиком преобразования температуры. Это время зависит от выбранной разрешающей способности датчика. Разрешение 12 бит установлено в датчике по умолчанию. Время преобразования для него – 750 мс.
Затем мы отправляем команду Reset , Skip ROM ( 0xCC ) , а замет команду 0xBE чтения памяти датчика.
uint8_t.read_bytes(buf, 9) — Чтение 9 ти байтов данных.
uint8_t.read(); Или читаем по байтно.
Основные команды библиотеке OneWire :
- search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
- reset_search() – производится поиск на первом приборе.
- reset() – выполнение сброса шины перед тем, как связаться с устройством.
- select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
- write(byte) – производится запись байта информации на устройство.
- write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
- read() – чтение байта информации с устройства.
- crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.
Вот и сам код из библиотеке :
#include // OneWire DS18S20, DS18B20, DS1822 Temperature Example // // http://www.pjrc.com/teensy/td_libs_OneWire.html // // The DallasTemperature library can do all this work for you! // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(10); // датчик на выводе 10 (а резистор 4.7 K является необходимым) void setup(void) { Serial.begin(9600); } void loop(void) { byte i; byte present = 0; //переменные byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); ds.reset_search(); delay(250); return; } Serial.print("ROM ="); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC недопустимый!"); return; } Serial.println(); // первый байт ROM указывает, какой чип (8 бит код чипа, 48 бит серийный номер , 8 бит CRC ) switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Не является устройством семейства DS18x20."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 0); // старт преобразования с питание от внешнего источника. delay(1000); // ждем конца преобразования. // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Читаем память . Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // нам нужно 9 байт data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразование данных в фактическую температуру //поскольку результатом является 16-разрядное целое число со знаком // ранится в типе "int16_t", который всегда составляет 16 бит // даже при компиляции на 32-битном процессоре. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 бит разрешение по умолчанию у датчиков DS18S20 or old DS1820 if (data[7] == 0x10) { // "количество остается" дает полное разрешение 12 бит raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // при более низком разрешении низкие биты не определены, поэтому давайте обнуляем их. if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }</pre> Собственно это библиотека подходить для всех датчиков семейства DS18 (DS18B20, DS18S20, DS1820, DS1822) подключение ни чем не отличается. Ну а некоторые различия можно уже узнать из datesheet к ним. Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Вступление
После некоторых раздумий, решил, что второму посту про поделки на Ардуино все-таки быть.
Для тех, кому не интересны офигительные истории и процесс разработки, а просто хочется посмотреть на работу устройства, просто перемотайте на заголовок В«Скучная часть оконченаВ» или В«ДемонстрацияВ». Все остальные могут читать далее.
Предвидя некоторые комментарии, скажу, что цель поста просто повеселиться, с технической точки зрения, и получить немного нового опыта. На премию В«изобретение векаВ» не претендую и это не do it yourself. Хотите – делайте, не хотите – не делайте. Просто пост о моем опыте возни с железками и кодом.
Вдохновился я на это изделие при повторном просмотре закрывателя окон от Alex Gyver (https://alexgyver.ru/gyvertripper/ тут и его видео и его исходники, очень круто сделано, я вдохновлялся именно этой поделкой), но в отличии от этого проекта, я решил сделать управление под свои нужды и без радио модулей.
Все, как и в предыдущем посте, поделено на две основные части – железная и программная (Hardware, Software).
Железки (Hardware)
Еще в конце прошлого года я получил набор модулей для Arduino, среди которых были как интересные модули, которых я ранее не видел, так и те, что кладут в стартовом наборе. Одним из таких модулей был ИК (IR) приемник. На картинке ниже его хорошо видно.
Многие тут скажут, что в стартовый набор часто кладут такой трехногий приемник без платы, он отлично работает и ничего особого в отдельно распаянном модуле нет. От части вы правы, но есть пара интересных вещей… У модуля есть две очень приятные особенности.
2) Расческа в виде пинов. Лучше чем голый модуль, потому что удобнее вставлять в макетку и вытаскивать из нее, а еще если проект состоит только из светодиода, то можно обойтись проводами папа-мама (ну или другой вариацией, если контакты для макетирования выведены не клипсами, а тоже расческами, как это обычно бывает на моделях Nano)
Понятно, что у модуля есть и жирный минус в виде его громоздкости, но я занимаюсь этим только в виде хобби и поэтому для меня модули, с возможностью В«тихо сзади подошел, быстро вставил и пошелВ» – самое то.
Имея этот модуль, Ардуино плату, пульт из стартового набора и ноут, я решил, что можно поуправлять компом при помощи пульта.
Пульт взял из стартового набора:
Выглядит не очень, но выполняет свою функцию отлично.
Вот собрали мы нашу схему. Она изображена ниже. Взял из интернета, потому что уже готовая схема вполне наглядна и придумывать что-то свое нет смысла. Еще ниже приложу фото того, как оно выглядит у меня в сборке (отказался от макетки, потому что эта конструкция нужна мне переносной).
Чем мне нравится весь мир инженерии, так это тем, что одну задачу можно решить большим количеством способов. Причем, иногда, чем проще задача, тем больше способов решения. Наша текущая задача – не исключение.
Есть два основных способа управления, которые приходят на ум
1) Использовать плату Ардуино как HID устройство. Получать сигнал и обрабатывать его на стороне микроконтроллера, проводя дальнейшие действия с компьютером как клавиатура.
2) Обрабатывать все пришедшие сигналы на стороне компьютера. Тогда пространство для манипуляций расширяется и можно гораздо легче автоматизировать запуск дополнительных скриптов.
Ну и конечно же можно совместить оба способа, никто не запрещает, но это уже план на будущее, на исполнение которого пока что нет особых желаний и времени.
Первый способ отлично продемонстрирован и успешно работает в вышеупомянутой самоделке от Alex Gyver, который, в свою очередь, воспроизвел данную поделку по методу реверс инжиниринга одного проекта зарубежного электронщика. Поэтому, для себя я выбрал второй вариант.
Уверен, что на рынке достаточно готовых и не дорогих решений, поэтому напомню, что делалось это не чтобы сэкономить и получить готовое устройство, а чтобы самому повозиться и сделать что-то свое.
Программки (Software)
Поскольку я выбрал второй вариант, код для самого микроконтроллера будет очень простым. Я просто использую готовую библиотеку и с ее помощью буду расшифровывать сигнал с приемника и отправлять в Serial. Простота этого кода предусматривает использование абсолютно любого другого пульта и никак не привязывается к командам одного пульта.
Дело осталось за обработкой команд на стороне компа. Я решил использовать язык Python, потому что часто его использую в других проектах и в работе. При помощи не хитрой библиотеки я настроил проверку com порта и обрабатывал полученные коды. На каждый код я запрограммировал определенные действия и нажатия хоткеев в системе Windows.
Отступление
На этом можно было бы закончить пост, продемонстрировать работу и заниматься личной жизнью. Если это было бы 2 или 3 месяца назад, когда мне и пришел набор с этим модулем. Но недавно я опубликовал свой пост про упрощение модуля матрицы из стартового набора и увидел, что некоторым людям такие посты интересны, после чего понял, что мне самому интересно писать о подобных вещах, поэтому пару дней назад я решил доработать программу, чтобы ее было не так стыдно показывать людям.
Было принято решение доработать программу и сделать графический интерфейс для тех, кто не сильно хочет заморачиваться и вникать в код программы под саму Windows. Для создания графической части программы я использовал QtDesigner и библиотеку PySide2. За несколько часов разработал интерфейс и начал реализовывать управление. Суммарно на все переработки и доработки я потратил часов 10. Было очень интересно создать такую вещь, которой можно было бы пользоваться, просто запуская исполняемый EXE’шник. Протестировав и собрав приложение, я решил выпустить официальный релиз на GitHub. Весь код для Ардуино и исходники приложения лежат в моем репозитории, они открыты и вы можете дорабатывать проект напильником по своему вкусу. Ссылка на репозиторий – https://github.com/donexdoc/Remote-IR.
Скучная часть окончена
Инструкция по использованию доступна на странице репозитория.
Основная функция программы – перехватывать код из сообщения и сохранять себе в память, назначать на полученные коды разные команды. Список команд пока не очень большой:
1) “media_prev” – предыдущий медиа файл,
2) “media_next” – следующий медиа файл,
3) “media_play_pause” – запустить/поставить на паузу медиа файл,
4) “vol_down” – уменьшить громкость,
5) “vol_up” – увеличить громкость,
6) “lock_screen” – заблокировать экран,
7) “fast_clean” – свернуть/развернуть все окна (win + d),
8) “empty” – заглушка, ничего не выполняет.
Звук из видео удалил, потому что все равно тестировал в наушниках и на фоне шумели домашние. Но на виджете винды видно, что ползунок громкости меняется.
Как можно улучшить
Как уже повелось с первого поста, я опишу, как я мог бы улучшить это все.
1) Использовать проект в гибридном режиме (как виртуальную клавиатуру и как сигнальный механизм), это позволит расширить функциональность проекта до многофункциональной клавиатуры с возможностью запуска скриптов (аля стримпад).
2) Добавить больше функций для выполнения.
3) Добавить возможность запуска своего скрипта/программы.
4) Добавить возможность написания своих инструкций (переместить мышь по x и y координатам, нажать на кнопку В«HВ» и т.д.)
5) Переместить все железки в меньший размер и использовать какую-нибудь Digispark плату с тинькой, чтобы это не занимало много места и было удобно использовать в повседневе дома.
И, опять же, это только то, что сейчас приходит на ум чисто навскидку. Поэтому улучшать можно до бесконечности.
Как показала практика, штука оказалась не такой уж и бесполезной как я предполагал. Я использую ее, когда вечером с семьей смотрим фильм, подключая к телевизору на кухне, за ужином. Удобно регулировать громкость и ставить на паузу.
На этом все. Надеюсь, что не мне одному хотелось поуправлять компом при помощи пульта, и этот пост окажется для кого-то полезным. Пока не знаю, стоит ли еще что-то делать, идей пока особо грандиозных нет. Но если было интересно, дайте знать в комментариях, а может у вас есть какая-то идея – предложите. У меня скромный набор железок, но кое-что собрать можно).
Библиотека AFMotor специально разработана для работы с драйвером моторов Arduino Motor Shield Скачать библиотеку AFMotor.
Тестовый скетч для мотор драйвера с Ардуино:
#include "AFMotor.h" // Подключаем библиотеку для работы с шилдом // библиотеку для работы с сервоприводами, можно не подключать // Подключаем моторы к винтовым зажимам M1, M2, M3, M4 AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); void setup() { // Задаем максимальную скорость вращения моторов motor1.setSpeed(255); motor1.run(RELEASE); motor2.setSpeed(255); motor2.run(RELEASE); motor3.setSpeed(255); motor3.run(RELEASE); motor4.setSpeed(255); motor4.run(RELEASE); } int i; void loop() { // Двигаемся условно вперед одну секунду motor1.run(FORWARD); // Задаем движение вперед motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); motor1.setSpeed(255); // Задаем скорость движения motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255); delay(1000); /* Очень не рекомендуем резко переключать направление вращения двигателей. Лучше дать небольшой промежуток времени.*/ motor1.run(RELEASE); // Останавливаем двигатели motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(100); // Двигаемся в обратном направлении motor1.run(BACKWARD); // Задаем движение назад motor2.run(BACKWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); motor1.setSpeed(255); // Задаем скорость движения motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255); delay(1000); // Останавливаем двигатели motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(100); // Разгоняем все двигатели в одном направлении motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); }
ли со статьей или есть что добавить?