Снова ИК пульт
- Войдите на сайт для отправки комментариев
Доброго времени суток.
Вполне возможно, что я не там и не так ищу. И тут и вокруг полно информации чуть ли не с 10-го года народ обсуждает и делится знаниями о том, как заменить существующий пульт к существующему устройству.
Я уже собирал робота на IR управлении из стандартного набора. Я применял другие пульты и т.п. Но не устраивает. Хочу использовать джойстик. Хочу регулировать скорость движения в соответствии с положением жджойстика. Хочу поворачивать серву на угол в соответствии с положением джойстика.
Не нашел как отправить свои данные, не какое-то значение, а, так сказать, в динамике, изменяющиеся.
Наверняка как-то закодировать на передатчике и раскодировать в приемнике. Может кто-то встречал статейку для чайников с примерами? Поделитесь ссылкой.
Вот мой код, куда планирую пристроить ИК передатчик.
/* Подключены устройства - Arduino NANO - LCD 128x64 i2c Устройства ввода - Джойстик 2 шт - Кнопка */ //подключаем библиотеки //////////////////////////// #include <Wire.h> #include <SPI.h> //Библиотека (Serial Peripheral Interface), или последовательный периферийный интерфейс #include <Adafruit_GFX.h> //Библиотека экрана #include <Adafruit_SSD1306.h> //Библиотека экрана #include <IRremote.h> IRsend irsend; //Определение Экрана #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif // Пины и переменные #define Joy_1_Pin_X A0 // Джойстик 1 Ось Х #define Joy_1_Pin_Y A1 // Джойстик 1 Ось Y #define Joy_1_Pin_Sw 7 // Джойстик 1 SW #define Joy_2_Pin_X A2 // Джойстик 2 Ось Х #define Joy_2_Pin_Y A3 // Джойстик 2 Ось Y #define Joy_2_Pin_Sw 8 // Джойстик 2 SW int Joy_1_Val_X = 0; int Joy_1_Val_Y = 0; int Joy_1_Val_Sw = 0; int Joy_2_Val_X = 0; int Joy_2_Val_Y = 0; int Joy_2_Val_Sw = 0; #define Sw_1_Pin 10 // Кнопка 1 int Sw_1_Val = 0; ////******убираем к чертям DELAY****Спасибо г-н Клапауций 322 http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-... long previousMillis = 0; // храним время последнего действия чтением датчиков long interval = 200; // интервал между чтением датчиков void setup() { Serial.begin(9600); pinMode (Joy_1_Pin_Sw, INPUT); pinMode (Joy_2_Pin_Sw, INPUT); digitalWrite(Joy_1_Pin_Sw, HIGH); // включаем встроенный подтягивающий резистор digitalWrite(Joy_2_Pin_Sw, HIGH); // включаем встроенный подтягивающий резистор pinMode (Sw_1_Pin, INPUT); digitalWrite(Sw_1_Pin, HIGH); // включаем встроенный подтягивающий резистор display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3С (for the 128x64) display.display(); delay(200); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.clearDisplay(); } /* --(end setup )-- */ void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { READ_DATA(); previousMillis = currentMillis; // сохраняем время последнего переключения } LCD_PRINT (); //Вот тут и надо что-то послать, но как послать значения датчиков- джойстиков // int khz = 38; // 38kHz carrier frequency for the NEC protocol // unsigned int irSignal[] = {9000, 4500, 560, 560, 560, 560, 560, 1690, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1690, 560, 1690, 560, 560, 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560, 560, 560, 560, 560, 560, 560, 1690, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1690, 560, 1690, 560, 1690, 560, 560, 560, 1690, 560, 1690, 560, 1690, 560, 1690, 560, 39416, 9000, 2210, 560}; //AnalysIR Batch Export (IRremote) - RAW // irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. } /* --(end main loop )-- */ ////////////////////////////////////////////////////////////////////////////////////////////////// /*-----( Declare User-written Functions )-----*/ void READ_DATA () { Joy_1_Val_X = analogRead(Joy_1_Pin_X); //// Джойстик 1 Ось Х Joy_1_Val_Y = analogRead(Joy_1_Pin_Y); //// Джойстик 1 Ось Х Joy_1_Val_Sw = digitalRead (Joy_1_Pin_Sw); //Джойстик 1 SW Joy_2_Val_X = analogRead(Joy_2_Pin_X); //// Джойстик 2 Ось Х Joy_2_Val_Y = analogRead(Joy_2_Pin_Y); //// Джойстик 2 Ось Х Joy_2_Val_Sw = digitalRead (Joy_2_Pin_Sw); //Джойстик 2 SW Sw_1_Val = digitalRead (Sw_1_Pin); //Кнопка 1 } void LCD_PRINT () { display.setCursor(0,0); display.print("Joy_1_X: "); display.print(Joy_1_Val_X); display.setCursor(0,15); display.print("Joy_1_Y: "); display.print(Joy_1_Val_Y); display.setCursor(80,15); display.print("SW_1: "); display.print(Joy_1_Val_Sw); display.setCursor(0,30); display.print("Joy_2_X: "); display.print(Joy_2_Val_X); display.setCursor(0,45); display.print("Joy_2_Y: "); display.print(Joy_2_Val_Y); display.setCursor(80,45); display.print("SW_2: "); display.print(Joy_2_Val_Sw); display.setCursor(0,55); display.print("Swich_1: "); display.print(Sw_1_Val); display.display(); display.clearDisplay(); }
TV-пульты не отправляют данные
TV-пульты отправляют зашитые в них команды, соответсвующие нажатой кнопке.
Спасибо. Это я понял. А как отправить свои данные? Через самодельный пульт. Как зашифровать и расшифровать?
никак - прекращай тупить.
Та не может быть!
Есть вертолетики на ИК. Там тоже джойстик. Или там тупо повторяющиеся значение одной кнопки?
нет - там девственницы на единорогах шифруют данные.
Жаль.
Тогда еще вопрос . А с радио. 433. Я смогу реализовать такой пульт?
не знаю - читай спецификацию на своё радио.
Чисто логически:
1. Дальность ИК пульта не очень большая, хватит разве что для управления комнатными моделями.
2. Протокол есть протокол, можно сделать что угодно. Взять, к примеру, Сплит системы, там передается много данных.
3. Про радио не скажу, не использовал.
1. Если у Вас не стандартный пульт от телевизора, а нормальный передатчик - Вы запрсото можете реализовать передачу нужных Вам данных. Вообще без проблем
2. согласен с kisoft - радио намного лучше. Если у Вас есть копеечная пара приёмник-передатчик на 433 - проблем никаких. Другое дело, Вы должны быть внимательны при выборе пары, а именно,
А) Вы долждны ответить себе на вопрос нужна ли Вам односторонняя связи или двусторонняя. от этого зависит что выбирать. В первом случае подойдёт просто примник и передатчик, а во втором - нужно два "приёмомпередатчика".
Б) смотрите на параметры пары. например, популярная и недорогая пара для односторонней связи, которую я, например, часто использую, имеет такую особенность - питание передатчика до 12В и чем больше, тем дальше дистанця работы. Т.е. Вам на пульте нужно иметь 10-12 вольт для хорошей дистанции. Если их негде взять, то лучше поискать другую пару.
Успехов!
Ай спасибо!
ЕвгенийП , у меня есть указаная Вами " популярная и недорогая пара для односторонней связи" , и с утра, после облома от Клапауций 232, я с ней экспериментирую.
И вот в ходе экспериментов обратил внимание, что можно отправлять пакеты, в том числе для ленивых есть EasyTransferVirtualWire.h, которая собирает пакет. еще не знаю, как часто может отсылаться пакет, будет ли тормозить управление от джойстиков, но разве никак нельзя прикрутить пакеты для ИК?
Просто читал про 433 Mhz и часто мнение: "И робот не поехал. или поехал , но очень не хорошо , если речь идет о платах заявленых выше." превалирует. http://arduino.ru/forum/apparatnye-voprosy/besprovodnaya-svyaz-na-chasto...
А мне управление в пределах до 10 м. освою это устройство, буду пробовать что-то новое. Вот заказал https://ru.aliexpress.com/item/Wireless-Module-NRF24L01-PA-LNA-with-Antenna-1000-Meters-Long-Distance-Free-Shipping-via-China-post/1660900248.html?spm=2114.13010308.0.92.N4XVNd . Но, пока придет, буду пробовать 433 Mhz
На этой паре можно отправлять данные (любые) на скорости 2000 бит/сек. Вроде, можно и больше, но сам я больше не делал. На такой скорости, вполне можно работать с джойстиком, по мне, так достаточно. Мой внук передаёт структуру в которой зашиты показания двух джойстиков и управляет танкеткой. Расстояние - больше 40 метров не пробовали, на 40 метров при питании передатчика 3х3,37В и 17,5см. штыревых антеннах на обоих устройствах - всё отлично. Он использует библиотеку VirtualWire, правда мне пришлось переделать её на другой таймер, т.к. тот таймер, что в ней зашит у него уже занят был.
Разумеется к этой паре Вы ИК никак не прекрутите.
Что до ИК, там есть свои пары. Передавать любые данные проблемы тоже никакой, но вот насчёт скорости и дальности не знаю, не пробовал. На 3-5 метров работает хорошо. А скорость - я передавал только одиночные команды, так что скорость меня не волновала ни разу и потому, я даже не вникал.
используйте nrf24l
по ним куча информации
работают нормально
проверено))))
Спасибо
ESP8266 и управлять с телефона. Конечно уже из квартиры далеко не выйдешь. WiFi он такой, WiFi
Пользовался именно такими нрф-ками с антенной и усилителем, два джойстика и несколько кнопок. Отличные модули! Нужно сразу обязательно добавить конденсаторы по питанию, без них работать не будет. Ну и конечно отдельное питание 3, 3 В. На 1000м не проверял, проверял только до 300 метров. Как работает на большем расстоянии не знаю.
Радиомодули на 433 МГц тоже позволяют реализовать управление с джойстика. Но дальность действия(связи) небольшая и много жалоб на эти модули. Модули доставляются в пакете, где-то его немного придавили, помялись витки у катушки и в итоге получаем радиомодули с рассогласованной настройкой. Настроить их сложно.
Модули доставляются в пакете, где-то его немного придавили, помялись витки у катушки и в итоге получаем радиомодули с рассогласованной настройкой. Настроить их сложно.
Бывало даже, что китайцы путали и присылали комплект из приёмника и передатчика на разные частоты (315/433)
Всем спасибо :) указанные модули заказл. буду ждать.
Но, пока вот пробовал то, что есть - И случились проблемы с кодом :)
Подключил Джойстики , кнопку и экранчик 128*64. Все работает, данные на экране отображаются, меняются. Ок
Подключил передатчик - отрубился экран и вообще ничего не работает
Вот в таком виде данные отображаются но не передаются.
Если снять комменты с 76 и 97 - и закомментировать 98, то данные передаются, но не отображаются. Если снять все комменты - то ... вообще ничего
Еще попробовал подключить серво. Ошибки еще при компиляции появились. Какой-нибудь то вектор где- то уже объявлен.
Ответ тут
http://electronics.stackexchange.com/questions/67967/problems-using-serv...
но я где-то тут видел, что меняли библиотеку VW? но не могу опять найти кто и как)