Ну иначе его назвать нельзя так как с виду похож именно на монстра хоть и безобидного Не удержался и решил показать свой шедевр. Только ещё не доделал не хватает переднего бампера и нескольких датчиков. Но уже ездит снял на видео как через порожек переезжает . Вообщем меня он порадовал.
Толщина у оргстекла 5 мм. Так что не отломится даже если нажать. Да и тем более зачем на него нажимать то ? А на лепестках так удобней. Место больше остаётся на платформе
Когда я платформу делал в 3д, то думал что, если без лепестков, то разворачиваться он будет хуже. Ведь прямоугольную платформу повернуть сложней, а из-за лепестков получается квадрат, который и развернуть легче. Можно конечно было сделать сразу квадратную платформу, но у меня тогда оргстекла нехватило бы.
По всеё видимости расстояние большое между сервами и в добавок, если сверху смотреть, то получается всё же прямоугольник, а не квадрат, который разворачивать куда проще. А то, что переделал там точно квадрат получился и разворачивается даже с тремя сервами хорошо.
// Программа следования по линии для Проекта мобильного робота "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){
//------------------------------------------------------------------------------ // "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();
}
Хочу поставить ещё третий датчик по центру. Чтоб робот видел линию, а не только следовал по краям линии