====== Универсальный ИК-контроллер с клавиатурой ====== **[[arduino-projects:start|Проекты на Arduino Uno и Slot Shield]]** {{ :arduino-projects:ir-remote-with-noise-sensor:smarthomefin3.png |}} Устройство построено на оригинальной [[amp>product/arduino-uno?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Arduino Uno]]. Плата управляет бытовой техникой с помощью [[amp>product/troyka-ir-transmitter-5mm-led-module?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|ИК-передатчика]]. Коды команд управления заранее считаем [[amp>product/troyka-ir-receiver?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|ИК-приёмником]] с родного пульта и сохраним на microSD. Сохранённую команду можно запустить из консоли или вручную с [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|четырёхкнопочной клавиатуры]]. * Платформы: [[amp>product/arduino-uno?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Arduino Uno]], [[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Arduino Leonardo]], [[amp>product/iskra-neo?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Iskra Neo]] * Язык программирования: Arduino (C++) ===== Видеоинструкция ===== {{youtube>vK16efpSEi8?large}} ===== Что потребуется ===== [[amp>collection/ir-remote?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят: * [[amp>product/arduino-uno?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Arduino Uno]] * [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Troyka Slot Shield]] * [[amp>product/troyka-ir-transmitter-5mm-led-module?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|ИК-передатчик]] * [[amp>product/troyka-ir-receiver?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|ИК-приёмник]] * [[amp>product/troyka-sd?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|SD-картридер]] * [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|четырёхкнопочная клавиатура]] ===== Как собрать ===== Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/arduino-uno?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Arduino Uno]] {{ :arduino-projects:ir-remoute-with-temperature-sensor:smarthome0.png |}} Вставьте [[amp>product/troyka-ir-receiver?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|ИК-приёмник]] в разъём ''С''. Ножка ''S'' должна подключится к пину ''4''. Аналогично подключите [[amp>product/troyka-ir-transmitter-5mm-led-module?utm_source=proj&utm_campaign=arduino-slot-proj-19&utm_medium=wiki|ИК-передатчик]] к пину ''9'' слота ''E''. {{ :arduino-projects:ir-remoute-with-temperature-sensor:smarthome1.png |}} Подключите [[amp>product/troyka-sd?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|SD-картридер]] к пинам ''SPI'' слота ''D''. {{ :arduino-projects:ir-remoute-with-temperature-sensor:smarthome2.png |}} Установите [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|четырёхкнопочную клавиатуру]] в пины разъёма ''B''. Сигнальный пин ''S1'' модуля должен подключится к пину ''A2'' платы. {{ :arduino-projects:ir-remoute-with-temperature-sensor:smarthome3.png |}} ===== Скетч ===== Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]]. // Библиотека для работы с SPI #include // Библиотека для работы с SD-картами #include // Библиотека для работы с ИК-приёмником и передатчиком #include // Имя пина, которому подключен приёмник #define RECV_PIN 4 // Имя пина, к которому подключен передатчик #define SEND_PIN 9 // Имя для CS пина microSD-карты #define SD_CS_PIN 8 // Имена пинов для кнопок #define BUTTON_S1 A2 #define BUTTON_S2 A3 #define BUTTON_S3 3 #define BUTTON_S4 6 // Строка с хранением данных введенных в последовательный порт #define command_S1 "C_S1.txt" #define command_S2 "C_S2.txt" #define command_S3 "C_S3.txt" #define command_S4 "C_S4.txt" // Создаём объект для ИК-передатчика IRsend irsend; // Флаги для однократного срабатывания кнопок bool fS1 = false; bool fS2 = false; bool fS3 = false; bool fS4 = false; // Частота (КГц) с которой будут передаваться сигналы int khz = 38; void setup() { // определяем пины кнопок, как входы с подтяжкой pinMode(BUTTON_S1, INPUT_PULLUP); pinMode(BUTTON_S2, INPUT_PULLUP); pinMode(BUTTON_S3, INPUT_PULLUP); pinMode(BUTTON_S4, INPUT_PULLUP); // открываем последовательный порт Serial.begin(9600); // выводим сообщение в Serial-порт о поиске карты памяти Serial.println("Initializing SD card..."); // если microSD-карта не была обнаружена if (!SD.begin(SD_CS_PIN)) { // выводим сообщение об ошибке Serial.println("Card failed, or not present"); // завершаем процесс return; } else { Serial.println("Card initialized."); } } void loop() { // считываем сигналы с кнопок bool bS1 = !digitalRead(BUTTON_S1); bool bS2 = !digitalRead(BUTTON_S2); bool bS3 = !digitalRead(BUTTON_S3); bool bS4 = !digitalRead(BUTTON_S4); // проверяем, какая из кнопок нажата, кнопка S1?... if (bS1 == true && fS1 == true) { fS1 = false; // если пришла команда C_S1, выполняем отправку соответствующей команды sending (command_S1); // выводим сообщение об отправке Serial.println("Signal \"C_S1\" sent."); } if (bS1 == false) fS1 = true; // ... кнопка S2?... if (bS2 == true && fS2 == true) { fS2 = false; // если пришла команда C_S2, выполняем отправку соответствующей команды sending (command_S2); // выводим сообщение об отправке Serial.println("Signal \"C_S2\" sent."); } if (bS2 == false) fS2 = true; // ... кнопка S3?... if (bS3 == true && fS3 == true) { fS3 = false; // если пришла команда C_S3, выполняем отправку соответствующей команды sending (command_S3); // выводим сообщение об отправке Serial.println("Signal \"C_S3\" sent."); } if (bS3 == false) fS3 = true; // ... кнопка S4?... if (bS4 == true && fS4 == true) { fS4 = false; // если пришла команда C_S4, выполняем отправку соответствующей команды sending (command_S4); // выводим сообщение об отправке Serial.println("Signal \"C_S4\" sent."); } if (bS4 == false) fS4 = true; } // функция отправки ИК-команд void sending (String command) { // создаём файл для отправки File dataRead = SD.open(command, FILE_READ); // если файл доступен для чтения if (dataRead) { // промежуточный массив для декодирования символов int num [6]; // счетчик степеней декодированного сигнала int count = 0; // счетчик массива сигналов int j = 0; // пока считываются данные из файла while (dataRead.available()) { // записываем из файла посимвольно данные в промежуточный массив for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++) { // переменная для хранения полученного символа char point = dataRead.read(); if (point == ' ') { break; } else { // преобразуем полученные символы в числа num[i] = point - '0'; count++; } } // преобразуем массив с отдельными числами в единый сигнал и записываем его в массив for (int i = 0; i < count; i++) { irparams.rawbuf[j] += num[i] * ceil (pow(10, count - i - 1)); } // переходим к следующему элементу массива j++; count = 0; } // отправляем массив сигналов irsend.sendRaw(irparams.rawbuf, sizeof(irparams.rawbuf) / sizeof(irparams.rawbuf[0]), khz); // после отправки очищаем массив for (int i = 0; i < sizeof(irparams.rawbuf) / sizeof(irparams.rawbuf[0]); i++) { irparams.rawbuf[i] = 0; } // закрываем файл dataRead.close(); } else { // если файл не доступен Serial.println("Error opening in \"sending\""); } } ====== Часто задаваемые вопросы ====== > Где скачать необходимые библиотеки и как их установить? * Библиотека эмуляции ИК-пультов: {{ :arduino-projects:ir-remote-with-temperature-sensor:arduino-irremote.7z |}} * [[программирование:библиотеки|Как устанавливать библиотеки]] ===== Что дальше ===== * Добавьте [[amp>product/arduino-power-shield-li-ion?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Power Shield]] — контроллер можно будет переносить по разным помещениям. * Вставьте устройство в корпус из #cтруктора. [[amp>product/structor-slot-box?utm_source=proj&utm_campaign=arduino-slot-proj-18&utm_medium=wiki|Slot Box]] придаст игре законченный вид.