Підтеми
Made of Trash [2]
Декілька моделей з доступних матеріалів
ROBO [6]
Створи свій власний світ
Researches [5]
Форма входу-->

Каталог статей

Головна » Статті » DIY (Do IT Yourself) » ROBO

Роботизована платформа

 


Потрібна якась іграшка з 2 моторами.

У нашому випадку це гусенична модель танку т34 Вона має два мотори, які крутять гусениці платформи.

Живлення для мікроконтроллера та драйвера проходить через регулятор напруги з двома конденсаторами, які дають захист від перепадів напруги. Живлення моторів іде напряму. В нашому випадку потрібно 6 ААА батарейок чи акумуляторів. З 4 батарейками наші мотори працюють нестабільно. 

По моторах: було витрачено 1.5 роки мною особисто, перебрано декілька варіантів коду, придбано більш потужний драйвер моторів щоб зрозуміти що РАДЯНСЬКІ МОТОРИ ЦЬОГО ТИПУ - дуже неефективні. У них КПД десь 15% відсотків. Викиньте ці мотори і встановіть інші(у нашому випадку це мотори від CD приводу магнітофона, прийшлося переробляти кріплення)

Мотори були підключені до H bridge на основі l293d (якщо у вас потужність моторів ДО 5Вт!!!!). Сам драйвер моторів під'єднаний контактами INPUT до мікроконтроллера Atmega 328 із мінімальною обв'язкою. 

Мікроконтроллер програмується за допомогою плати Arduino. Як зробити з вашої Arduino програматор ISP ви можете прочитати тут.

 

КОД

/*головна ідея коду взята з YouTube "уроки Дмитрия Осипова " Для роботи коду потрібно завантажити IRremote бібліотеку. В ній є скеч IR demo, з його допомогою визначте коди потрібних вам кнопок*/

/*turns on and off each pole of a motor,
attach L293D driver to motors acorrding to
the datasheet*/

//Pins 2,4,7,8 are connected to L293D inputs
#include <IRremote.h> // 

int RECV_PIN = 9; //plug in your TSOP sensor here
IRrecv irrecv(RECV_PIN);//defining receive pin using IR library
decode_results results; 


unsigned long eventTime=0;//timer set up
int timer = 12;

int lf=2;//left engine foward
int lb=4;//left engine backward
int rf=7;//right engine foward
int rb=8;//right engine backward


void setup(){
  irrecv.enableIRIn();
  //setting outputs
  pinMode(lf, OUTPUT);
  pinMode(lb, OUTPUT);
  pinMode(rf, OUTPUT);
  pinMode(rb, OUTPUT);
  pinMode(timer,OUTPUT);
}
void loop(){ 
  if (digitalRead(RECV_PIN) == LOW) 
    //  Если обнаружен отрицательный сигнал запускаем таймер,и включаем таймерПИН //(timer, HIGH);
  
  {
    eventTime=millis();
   digitalWrite(timer, HIGH);
  }
  //  Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW)
  if(millis()-eventTime>100)
 { 
    digitalWrite(timer, LOW);
    //  и вЫключаем все
    digitalWrite(lf, LOW);
    digitalWrite(rf, LOW);
    digitalWrite(lb, LOW);
    digitalWrite(rb, LOW);
  }

  if (irrecv.decode(&results)) { //if the signal has been got
if (results.value == 2575714394&&(digitalRead(timer) == HIGH) )//замість цих цифр вставте свої значення, отримані з IR demo
{
digitalWrite(rf, HIGH);
digitalWrite(lf, HIGH);//forward

}
if (results.value == 1320813602&&(digitalRead(timer) == HIGH))//left
{
digitalWrite(rf, HIGH);
digitalWrite(lb, HIGH);
}
 
// 
if (results.value == 1587577092&&(digitalRead(timer) == HIGH))//right
{
digitalWrite(rb, HIGH);
digitalWrite(lf, HIGH);
}
//
if (results.value == 476746140&&(digitalRead(timer) == HIGH))//back
{
digitalWrite(rb, HIGH);
digitalWrite(lb, HIGH);
}
irrecv.resume(); 
  } 
 }

 

 

Категорія: ROBO | Додав: Insomniac (16.11.2014)
Переглядів: 178 | Коментарі: 2 | Теги: ардуино, Atmega, робот | Рейтинг: 0.0/0
Всього коментарів: 2
1 vergusheduard  
А якщо потужність мотора більше 5Вт, можна буде підключити?

0
2 Insomniac  
Можна, але тоді треба потужніший драйвер моторів (L296). А якщо необхідно управляти ще більш потужними моторами, тоді необхідні MOSFET транзистори.

Ім`я *:
Email *:
Код *: