Arduino + Tamiya+TSOP, Робот - пока начало. Часть 1

Робот в начале разработки
Задумка (?)
— работа в режиме робота по транспортировке деталей
из одного места в другое по линии(очень толстой магистрали)

На данный пока только управляемая по ИК машинка
на основе
-Craftduino+
-tamiya
-TSOP31236
На данный момент реализовано
управление движением по ИК
— скорость регулируется ±
— повороты влево-вправо плавно регулируютcя уменьшением скорости вращения одного из двигателей
— есть вращение на месте в обе стороны
Выглядит на данный момент так






Для работы с ИК использовал библиотеку IRremote. Поддерживаемые протоколы: NEC, Sony SIRC, Philips RC5, Philips RC6.
Пульт использовал Marmitek для Умного дома X10


Назначение клавиш:
↑ – движение вперед;
↓ – движение назад;
← – поворот влево;
→ – поворот вправо;
— CH – увеличение скорости при движении вперед-назад;
CH+ – уменьшение скорости при движении вперед-назад;
-VOL – круговое движение на месте влево;
VOL+ – круговое движение на месте вправо;
0 – остановка робота.
Прием кодов — по прерыванию 0
Для начала определяем коды клавиш, а затем им приписываем действия
Скетч для приема и обработки кодов + проверка выбора кодов

// подключение библиотеки
#include <IRremote.h> 
//вход ИК приемника
int RECV_PIN = 2;  
IRrecv irrecv(RECV_PIN); 
decode_results results; 
unsigned long ir_dt, old_ir;
long ir_kod;
unsigned long ir_time1, ir_time2;
// коды клавиш ИК пульта (marmitek)
#define FORWARD 1936
#define BACK  3984
#define SPEED_UP 144       //ch+
#define SPEED_DOWN 2192    //ch-
#define LEFT 3472
#define RIGHT 1424
#define CIRCLE_LEFT 3216   //vol+
#define CIRCLE_RIGHT 1168  //vol-
#define STOP 2320          //0


void setup() 
 { 
  // последовательный порт 
  Serial.begin(9600); 
  // включить приемник 
  irrecv.enableIRIn(); 
  // прерывания для ИК
  ir_time1=0;ir_time2=0;
  attachInterrupt(0, get_ir_kod, FALLING); 
 } 
  
void loop() 
 { 
 // обработка кода нажатия
 if(ir_kod>0)
   {
   Serial.println(ir_kod);
   ir_go(ir_kod);  
   ir_kod=0;  
   } 
      
 }

// получить код переданный с ИК пульта
void get_ir_kod()
 {
 detachInterrupt(0);    // отключить прерывание 0
 if (irrecv.decode(&results))  
  { 
  if (results.value > 0 && results.value < 0xFFFFFFFF) 
    { 
    ir_dt = results.value; 
    ir_time2=millis();
    if (ir_time2-ir_time1>1000)
      {ir_kod = ir_dt;ir_time1=ir_time2;}
    else
      ir_kod = 0;
    } 
    irrecv.resume(); 
  } 
  attachInterrupt(0, get_ir_kod, CHANGE); 
 }
void ir_go(long kod)
 {
   switch(kod)
     {
     case FORWARD : // направление вперед
        Serial.println("forward");
        break;
     case BACK :    // направление назад
        Serial.println("back");
        break;
      case SPEED_UP : // скорость++
        Serial.print("speed++");
        break;
      case SPEED_DOWN :  // скорость--
        Serial.println("speed--");
        break;
      case LEFT : // влево
        Serial.println("left");     
        break;
     case RIGHT : // вправо
        Serial.println("right");
       break;
     case CIRCLE_RIGHT : // кружение вправо
        Serial.println("circle_right");
        break;
     case CIRCLE_LEFT : // кружение влево
        Serial.println("circle_left");
        break;
     case STOP : // стоп
        Serial.println("stop");
        break;
     default:
        break;
     }
   
 }


Продолжение — Часть 2. Шасси на основе гусениц и редуктора Tamiya

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.