Монстр :) R1-B1.
|
|
Doniak | Дата: Среда, 21.05.2008, 10:08 | Сообщение # 16 |
Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
| ну чо там, получяется? интересует так как у ниво с поворотами?
|
|
| |
Xsenus | Дата: Среда, 21.05.2008, 16:35 | Сообщение # 17 |
Язык программированя: CVAVR язык С
Зарегистрирован 05.05.2008
Группа: Новички
Сообщений: 11
Город: Moscow
Статус: Offline
| Вопро: Где оргстёклышко берёшь????? Тож очень надо
|
|
| |
Space | Дата: Воскресенье, 25.05.2008, 19:45 | Сообщение # 18 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Quote (Doniak) ну чо там, получяется? yes3 интересует так как у ниво с поворотами? У меня сейчас экзаменны так что не когда. Но видео будет это я тебе обещаю. Quote (Xsenus) Вопро: Где оргстёклышко берёшь????? Тож очень надо В любом магазине где продают и вырезают на заказ стекло.
|
|
| |
Space | Дата: Четверг, 29.05.2008, 23:52 | Сообщение # 19 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Ну вот собственно эти повороты. Если честно, то делает он их с трудом. Короче так и шестирёнки полететь могут. Буду делать расстояние между сервами меньше как на фотках.
|
|
| |
Doniak | Дата: Пятница, 30.05.2008, 21:56 | Сообщение # 20 |
Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
| я думал онавообще небудит поворачивать:) ужасный скрежит, наверно сервы так долго непротянут боюсь сближение серв сильно непоможет зато если гусеницы натянуть думаю будит он шустрее.
|
|
| |
Space | Дата: Пятница, 30.05.2008, 22:32 | Сообщение # 21 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Вот именно. Долго не протянут. А сближение как раз помогло. Потом покажу. А танк у меня есть, но он зараза маленький довольно таки и шума слишком много
|
|
| |
Space | Дата: Воскресенье, 01.06.2008, 22:35 | Сообщение # 22 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Ну наконец-то у меня готова нормальная ходовая часть для робота. Всё нормально разворачивается. Программа работает как надо(движение по таблице вероятностей). Вообщем пока проблем нет.
|
|
| |
Doniak | Дата: Понедельник, 02.06.2008, 00:22 | Сообщение # 23 |
Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
| необичний трёхкалёсний даже с кулером неужели 7805 так сильно греитса
|
|
| |
Space | Дата: Понедельник, 02.06.2008, 11:31 | Сообщение # 24 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Ну 3-ый потому что на одной серве сломана шестерёнка. А кулер для микросхемы, но я уже снял его. Решил поставить радиатор. А стабилизатор на моё удивление тёплый ели-ели.
|
|
| |
Space | Дата: Вторник, 03.06.2008, 19:58 | Сообщение # 25 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Пока нет 4 сервы решил снять одну. Оставил 2 сервы и поставил калёсико свободно вращающееся. Поставил передний и задний бампер. Видео выложу потом. А пока сама прога и пара фоток. Добавлено (03.06.2008, 19:58) ---------------------------------------------
|
|
| |
Space | Дата: Воскресенье, 08.06.2008, 21:40 | Сообщение # 26 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Написал программу для следования по линии. За датчики взял модуль датчика линии на основе компаратора LM311 FireFly Вот Code // Программа следования по линии для Проекта мобильного робота "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();
}
Добавлено (08.06.2008, 21:40) --------------------------------------------- Хочу поставить ещё третий датчик по центру. Чтоб робот видел линию, а не только следовал по краям линии
|
|
| |
DZHohn | Дата: Пятница, 13.06.2008, 20:39 | Сообщение # 27 |
Зарегистрирован 12.06.2008
Группа: Новички
Сообщений: 88
Город: Серноводск
Статус: Offline
| Quote (Space) Через недели 2 пойду и куплю ещё 2 сервы и переделаю их зачем сервы???? просто моторчики нельзя чтоли?
Я верю в пацифизм, добро должно победить Но как мне жить!? Как мне сейчас жить!? Так надоело ждать, так надоел страх Спасайся сам, а это значит Возьми кирпич и дай им сдачи! Бери кирпич и дай им! деньги нужны всем
|
|
| |
Space | Дата: Понедельник, 16.06.2008, 13:52 | Сообщение # 28 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Потому что с моторчиками просто не потянет всё. Слишком вес для них большой. Нужны либо сервы, либо готовая платформа типо радиуправляемых игрушек, либо самодельные редукторы. Добавлено (15.06.2008, 10:13) --------------------------------------------- Написал прогу под три датчика. Пока опробовал с помощью кнопок. Плату использовал новую Добавлено (16.06.2008, 13:52) --------------------------------------------- - вот это ане напомнило старые машинки у которых пульт управление на проводе был. Настольгия едим по прямой. программа написанна для трёх датчиков - едим по часовой и против Сама программа под эту плату: Code // Программа следования по линии для Проекта мобильного робота "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 PD4 // правый фотодиод #define LIGHT_Center PD5 // центральный фотодиод #define LIGHT_L PD6 // левый фотодиод #define LED PD2 // светодиод
// Возможные режимы движения для танкового привода
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){ // этот цикл организует остановку while((bit_is_clear(IN, LIGHT_R)) && (bit_is_clear(IN, LIGHT_Center)) && (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_L)) || (bit_is_clear(IN, LIGHT_Center)) || (bit_is_set(IN, LIGHT_R))){ if((bit_is_set(IN, LIGHT_L)) && (bit_is_set(IN, LIGHT_Center)) && (bit_is_set(IN, LIGHT_R))) go(STOP); // останавливается else if((bit_is_clear(IN, LIGHT_R)) && (bit_is_clear(IN, LIGHT_Center)) && (bit_is_clear(IN, LIGHT_L))) go(F); else if((bit_is_set(IN, LIGHT_L)) && (bit_is_clear(IN, LIGHT_Center)) && (bit_is_set(IN, LIGHT_R))) go(F); // вперёд по чёрной линии else if((bit_is_set(IN, LIGHT_L)) && (bit_is_set(IN, LIGHT_Center)) && (bit_is_clear(IN, LIGHT_R))) go(FR); // направо по чёрной линии else if((bit_is_clear(IN, LIGHT_L)) && (bit_is_set(IN, LIGHT_Center)) && (bit_is_set(IN, LIGHT_R))) go(FL); // налево по чёрной линии else if((bit_is_set(IN, LIGHT_L))) go(FR); // направо по чёрной линии else if((bit_is_set(IN, LIGHT_R))) go(FL); // налево по чёрной линии } return(0); }
//------------------------------------------------------------------------------ // Главная программа //------------------------------------------------------------------------------ int main(void) {
DDRA = 0xff; // назначаем все линии порта A на выход PORTA = 0x00; // и устанавливаем на них низкий уровень
DDRD = 0x04; // назначаем все линии порта D на вход, кроме PD2 PORTD = 0xfb; // подключаем внутренние нагрузочные резисторы, кроме PD2
// Задержка на старте 5 сек // чтобы успеть отбежать в сторону :)
// для подсчета числа миганий в цикле 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();
}
|
|
| |
Les | Дата: Четверг, 19.06.2008, 15:38 | Сообщение # 29 |
| Quote (Space) вот это ане напомнило старые машинки у которых пульт управление на проводе был. smile3 Настольгия senile А что прикольно. Вот вам и игрушка детская. Только надо платформу меньше и провод длиньше
|
|
| |
DZHohn | Дата: Воскресенье, 22.06.2008, 19:28 | Сообщение # 30 |
Зарегистрирован 12.06.2008
Группа: Новички
Сообщений: 88
Город: Серноводск
Статус: Offline
| Quote (Space) Потому что с моторчиками просто не потянет всё. Слишком вес для них большой. Нужны либо сервы, либо готовая платформа типо радиуправляемых игрушек, либо самодельные редукторы. понял пробую сделать редуктор, ничего не получается
Я верю в пацифизм, добро должно победить Но как мне жить!? Как мне сейчас жить!? Так надоело ждать, так надоел страх Спасайся сам, а это значит Возьми кирпич и дай им сдачи! Бери кирпич и дай им! деньги нужны всем
|
|
| |
|