Мечта детства на колесах ЧАСТЬ 1


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


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);
}

Чем мне нравится этот код, так это его простотой. с легкостью можно добавлять всякие действия, будь то пищалка, моргалка или » перделка «. Просто находите код кнопки, добавляете функцию и вуаля, ваша машинка стала моргать или подмигивать мимо проходящим девушкам.

и так, с управление разобрались и это уже хорошо. Дело осталось за малым, собрать корпус и сделать электронику, собрать все это чудо и воплотить мечту детства.

корпус буду делать завтра, а статья появится в понедельник. Да прибудет с тобой сила.

Часть 2 : делаем корпус.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение