В те недалекие времена, когда компьютеры умели только складывать и умножать и были вот таких размеров :

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 (n10000) // ...ага, отсановка. Тогда заполняем
//остаток масива 0-ми, и выходим из цикла.
{
while (n5 && 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);
}
Чем мне нравится этот код, так это его простотой. с легкостью можно добавлять всякие действия, будь то пищалка, моргалка или » перделка «. Просто находите код кнопки, добавляете функцию и вуаля, ваша машинка стала моргать или подмигивать мимо проходящим девушкам.
и так, с управление разобрались и это уже хорошо. Дело осталось за малым, собрать корпус и сделать электронику, собрать все это чудо и воплотить мечту детства.
корпус буду делать завтра, а статья появится в понедельник. Да прибудет с тобой сила.
