roboforum.ru

Технический форум по робототехнике.

Монстр R1-B1

Монстр R1-B1

space » 03 май 2008, 18:10

Ну иначе его назвать нельзя так как с виду похож именно на монстра хоть и безобидного :D
Не удержался и решил показать свой шедевр. Только ещё не доделал не хватает переднего бампера и нескольких датчиков. Но уже ездит снял на видео как через порожек переезжает :D . Вообщем меня он порадовал.
Вложения
video.rar
видео
(1.23 МиБ) Скачиваний: 167
1.jpg
Так он выглядит в 3D
5.JPG
4.JPG
3.JPG

Re: Монстр R1-B1

RoboTok » 03 май 2008, 21:30

А не круто ли сервы на колеса ставить ?

Re: Монстр R1-B1

space » 03 май 2008, 21:53

А это посмотрим в дальнейшем 8)

Re: Монстр R1-B1

Myp » 04 май 2008, 14:21

а зачем сервы на таких тонких лепестках? они же отломятся еси на него нажать посильнее...

Re: Монстр R1-B1

space » 04 май 2008, 15:09

Толщина у оргстекла 5 мм. Так что не отломится даже если нажать. Да и тем более зачем на него нажимать то ? :crazy:
А на лепестках так удобней. Место больше остаётся на платформе

Re: Монстр R1-B1

RoboTok » 04 май 2008, 16:12

А зачем лепестки для серв, если сервы под платформой ? :crazy:

Re: Монстр R1-B1

space » 04 май 2008, 17:04

Когда я платформу делал в 3д, то думал что, если без лепестков, то разворачиваться он будет хуже. Ведь прямоугольную платформу повернуть сложней, а из-за лепестков получается квадрат, который и развернуть легче. Можно конечно было сделать сразу квадратную платформу, но у меня тогда оргстекла нехватило бы.

Re: Монстр R1-B1

space » 05 июн 2008, 15:05

Эх.. :( Накололся я с этой платформой плохо разварачивается.

Поэтому решил сделать расстояние поменьше между сервами.
Переделал и вот результат:
Только с 3 сервами. Так как на одной сломалась шестерёнка :(


Re: Монстр R1-B1

RoboTok » 05 июн 2008, 19:08

А изза чего плохо разворачивается ?

Re: Монстр R1-B1

space » 05 июн 2008, 19:23

По всеё видимости расстояние большое между сервами и в добавок, если сверху смотреть, то получается всё же прямоугольник, а не квадрат, который разворачивать куда проще. А то, что переделал там точно квадрат получился и разворачивается даже с тремя сервами хорошо.

Re: Монстр R1-B1

Master » 06 июн 2008, 08:48

Ну вообще-то для разворота танкового типа нужно колеса боковые ставить как можно ближе.

Re: Монстр R1-B1

space » 06 июн 2008, 10:28

Master писал(а):Ну вообще-то для разворота танкового типа нужно колеса боковые ставить как можно ближе.

вот и поставил и как видишь даже с тремя всё разворачивается :)

Re: Монстр R1-B1

Master » 06 июн 2008, 10:35

Поставь гироскоп и он будет разворачиваться с двумя.

Re: Монстр R1-B1

space » 09 июн 2008, 07:51

Написал программу для следования по линии. За датчики взял модуль датчика линии на основе компаратора LM311 FireFly
Вот

Код: Выделить всёРазвернуть
// Программа следования по линии для Проекта мобильного робота "R1-B1"     
// Автор Space:
//       -мк ATmega16
//       -используется кварц на 8мГц
//       -компилятор WinAVR V2.0.5
// Программа 2008 для робота R1-B1 - www.robptsspace.ucoz.ru
//------------------------------------------------------------------------
#include <avr/io.h>     
#define bit_is_clear(sfr, bit) \
                     (!(sfr & _BV(bit)))
#define bit_is_set(sfr, bit) (sfr & _BV(bit))
// назначение определений для танкового привода
#define OUT PORTA
#define MOTOR_FR  PA0  // вперед-вправо
#define MOTOR_BR  PA1  // назад-вправо
#define MOTOR_BL  PA2  // назад-влево
#define MOTOR_FL  PA3  // вперед-влево

#define IN PIND
#define LIGHT_R  PD0 // правый фотодиод
#define LIGHT_L  PD1 // левый фотодиод
#define LED PD4 // светодиод

// Возможные режимы движения для танкового привода

enum {STOP, F, FR, FL};

//------------------------------------------------------------------------------
// Задержка t х 10ms
//------------------------------------------------------------------------------
//#define F_CPU 8000000
#define K_DELAY_10ms    F_CPU/600
void Delay_10ms(unsigned char t) {
      if (t==0) return;
      unsigned int i;
      while (t--) for(i=0;i<K_DELAY_10ms; i++);
}

//------------------------------------------------------------------------------
// Включение комбинации моторов для движения в заданном направлении
//------------------------------------------------------------------------------
void go(unsigned char direction){

      switch (direction) {
      case STOP:
        cbi(OUT, MOTOR_FR);
        cbi(OUT, MOTOR_BR);
        cbi(OUT, MOTOR_BL);
        cbi(OUT, MOTOR_FL);
        break;

      case F:
        sbi(OUT, MOTOR_FR);
        cbi(OUT, MOTOR_BR);
        cbi(OUT, MOTOR_BL);
        sbi(OUT, MOTOR_FL);
        break;

      case FR:
        cbi(OUT, MOTOR_FR);
        cbi(OUT, MOTOR_BR);
        cbi(OUT, MOTOR_BL);
        sbi(OUT, MOTOR_FL);
        break;

      case FL:
        sbi(OUT, MOTOR_FR);
        cbi(OUT, MOTOR_BR);
        cbi(OUT, MOTOR_BL);
        cbi(OUT, MOTOR_FL);
        break;

         
      }
}

//------------------------------------------------------------------------------
// "STOP", ЕСЛИ НЕТ СИГНАЛА
//------------------------------------------------------------------------------
unsigned char walk(void){
       // этот цикл организует STOP пока
       // нет сигнала ни от одного из датчиков освещенности
       while((bit_is_clear(IN, LIGHT_R)) && (bit_is_clear(IN, LIGHT_L))){
           go(STOP);     

           cbi(PORTD, LED); // зажигаем светодиод на PD4
           Delay_10ms(125);   // движемся в этом направлении 2.5 сек
           sbi(PORTD, LED); // гасим светодиод на PD4
           Delay_10ms(125);   // движемся в этом направлении 2.5 сек
       }
       // этот цикл организует движение на свет, пока
       // есть сигнал хотя бы от одного из датчиков освещенности
       while((bit_is_set(IN, LIGHT_R)) || (bit_is_set(IN, LIGHT_L))){
           if((bit_is_set(IN, LIGHT_R)) && (bit_is_set(IN, LIGHT_L))) go(F);
           else if(bit_is_set(IN, LIGHT_R)) go(FR);
           else if(bit_is_set(IN, LIGHT_L)) go(FL);

       }

       return(0);
}

//------------------------------------------------------------------------------
// Главная программа
//------------------------------------------------------------------------------
int main(void)
{

      DDRA  = 0xff;  // назначаем все линии порта A на выход
      PORTA = 0x00;  // и устанавливаем на них низкий уровень

      DDRD  = 0x10;  // назначаем все линии порта D на вход, кроме PD4
      PORTD = 0xef;  // подключаем внутренние нагрузочные резисторы, кроме PD4             

      // для подсчета числа миганий в цикле
      unsigned char i;

      for (i=0;i<5;i++){   // Подмигиваем пять раз
        cbi(PORTD, LED); // Зажигаем LED
        Delay_10ms(250);  // пауза
        sbi(PORTD, LED); // гасим LED
        Delay_10ms(250);  // пауза
        }

      // запускаем главный цикл
      while(1) walk();

}

Хочу поставить ещё третий датчик по центру. Чтоб робот видел линию, а не только следовал по краям линии

Re: Монстр R1-B1

dima » 11 июл 2008, 18:46

Что то мне это напоминает... 8) В смысле платформа...


Rambler\'s Top100 Mail.ru counter