В те недалекие времена, когда компьютеры умели только складывать и умножать и были вот таких размеров :
P.S. если кто найдет на него документацию, просьба поделиться )
купил мне папа обычную машинку на пульте управления. Она была крайне не интересной, потому что только каталась. Ну поигрался я ей с недели две и она мне надоела. Именно в тот момент я захотел нормальную машинку с пищалками ,мигалками и » пукалками » Спустя 15 лет я вспомнил про мою тамошнюю мечту и решил сделать себе такую. но идей не было, т.к. я не представлял даже как они устроены.
Спустя несколько месяцев я познакомился с ARDUINO, мечта моего детства. И тут понеслооось. Сделал я свою первую машинку за неделю. Обычная робоплатформа которую можно купить ЗДЕСЬ Именно такая у меня и была. В добавок к ней имелся комплект радио модулей 433МГц ну и все это было на Arduino и каталось. Тоже скучно.
И решил я тогда сделать нормальную машину с фарами и сигналами. Под руку как раз попался пульт от музыкального центра. Такой простой, который можно купить за 5$ в Китае.
Сначала было решено сделать управление, а потом разбираться с платформами и всем остальным.
Немного погуглив было понятно, что при считывании в пульте нужно считать миллисекунды , мне считать не хотелось, во мне проснулись зачатки инженера. Я стал еще гуглить, и нашел замечательную статью P.S. «Да поможет тебе Robocraft». В статье есть хорошая библиотека и весь материал. С библиотекой у меня не сложилось, потому что возвращается разное значение , а вот код пошел хорошо)
Собрав несложную схему :
а так это все выглядит на макетке :
и загрузив не хитрый код в ARDUINO получаем полноценное управление.
/* Данный скетч предназначен для управления Ардуиной практически любим пультом ИК, вне зависимости от протоколов, и прочих заморочек. Принцип его работы заключается в том, что он сравнивает сигналы разных команд с одного ДУ. Для работы программы надо сначала прижать 10й пин к 1, и нажать каку-ть кнопку на ДУ, чтобы подружить нашу ардуину с ДУ. Далее 10-й пин кладем на 0, и при нажатии различных кнопок на пульте получаем разные коды на выходе. Буду рад, если мой скечт кому-нибудь пригодится =) Peter. */ #include <EEPROM.h> int DIR_1 = 8; //задаем пины для моторов int PWM_1 = 11; int DIR_2 = 7; int PWM_2 = 3; enum { Intervals = 70 }; //Здесь мы указываем, сколько битов бы будем слушать. //Разные ДУ выдают разное количество битов. int starttime, endtime, time,n, code, sp=200; char arrayfix[Intervals],array[Intervals]; // Массивы времени импульсов byte distinction; void setup() { pinMode(DIR_1, OUTPUT); // задаем как выходы pinMode(PWM_1, OUTPUT); pinMode(9, INPUT); // К ноге приемника pinMode(5, INPUT); // К кнопки для запоминания опорного кода pinMode(13, INPUT); pinMode(DIR_1, OUTPUT); // задаем как выходы для моторов pinMode(PWM_1, OUTPUT); pinMode(DIR_2, OUTPUT); pinMode(PWM_2, OUTPUT); Serial.begin(9600); Serial.println ( "start..."); for (byte x=0; x1000) //если это не шум, а скорее стартовый бит, начинаем слушать. { while (n 10000) // ...ага, отсановка. Тогда заполняем //остаток масива 0-ми, и выходим из цикла. { while (n 5 && array[x]!=0 && arrayfix[x]!=0) // Здесь мы отслеживаем, // где есть отличия на логическом уровне. //Если отличие больше 500 мкс, то это однозначно разные логичесике уровни. { distinction++; code=code+(x+1)*distinction; //генерируем код } } Serial.println("========Result=========="); // Выводим, что имеем на выходе Serial.print("Otlichiya "); Serial.println(distinction); Serial.print("Code "); Serial.println(code); management(code); distinction=0; code=0; } } } void management ( int code){ Serial.println(" manadment"); switch(code) { case 161: forward(sp); break; case 1099: back(sp); break; case 526: right(sp); break; case 1085: left(sp); break; case 1025: // уменьшение скорости if (sp != 50) { sp -= 5;} else {digitalWrite(13, HIGH);} Serial.println(sp); break; case 1089: // увеличение скорости if (sp != 255) { sp += 5;} else {digitalWrite(13, HIGH);} Serial.println(sp); break; } } void forward (int a) { Serial.println(" forward"); digitalWrite(DIR_1, HIGH); analogWrite(PWM_1, a); digitalWrite(DIR_2, HIGH); analogWrite(PWM_2, a); delay(50); } void back (int a) { Serial.println(" back"); digitalWrite(DIR_1, LOW); analogWrite(PWM_1, a); digitalWrite(DIR_2, LOW); analogWrite(PWM_2, a); delay(50); } void left (int a) { Serial.println(" left "); digitalWrite(DIR_1, HIGH); analogWrite(PWM_1, a); digitalWrite(DIR_2, LOW); analogWrite(PWM_2, a); delay(50); } void right (int a) { Serial.println(" right "); digitalWrite(DIR_1, LOW); analogWrite(PWM_1, a); digitalWrite(DIR_2, HIGH); analogWrite(PWM_2, a); delay(50); }
Чем мне нравится этот код, так это его простотой. с легкостью можно добавлять всякие действия, будь то пищалка, моргалка или » перделка «. Просто находите код кнопки, добавляете функцию и вуаля, ваша машинка стала моргать или подмигивать мимо проходящим девушкам.
и так, с управление разобрались и это уже хорошо. Дело осталось за малым, собрать корпус и сделать электронику, собрать все это чудо и воплотить мечту детства.
корпус буду делать завтра, а статья появится в понедельник. Да прибудет с тобой сила.