16
Робо-сумо / Моят сумо робот
« -: Февруари 02, 2011, 06:00:13 pm »
Привет съфорумници! 
Ето че пак се връщам към този проект и този път смятам да го завърша.
Има подобрения по системата:
- ползвам Atmega88
- кодът е писан в MikroC (много по-лесно е)
- алгоритъмът е по-добър (така мисля...)
- електронната схема е усъвършенствана
- шасито на робота е от 30-годишен метален конструктор (голяма надеждност)
Нека да започна с електронната схема:

Пояснение за пиновете на Atmega88:
C5 - Вход ляв IR приемник
C4 - Вход десен IR приемник
C3 - Вход десен сензор за линия
C2 - Вход ляв сензор за линия
D0 - Изход ляв мотор напред
D1 - Изход ляв мотор назад
D2 - Изход десен мотор напред
D3 - Изход десен мотор назад
D5 - Изход 38KHz за IR светодиодите
Сложил съм два регулатора, като този за микроконтролера е в корпус TO92, а другия TO220.
Сензорите за линия са свързани към главната платка по следния начин:

Крачетата на конектора съответстват: квадратно (1-во) към квадратно.
Захранването ще е от две 9-волтови батерии свързани паралелно.
Ето го и кодът:
Коментарите съм писал на английски защото на кирилица не излизат.
Най-вероятно тази вечер ще наредя елементите на бредборда и ще тествам.
Очаквайте резултати!
П.П. Ако някой се затруднява с четенето на коментарите, да каже, ще ги напиша в notepad на български.

Ето че пак се връщам към този проект и този път смятам да го завърша.
Има подобрения по системата:
- ползвам Atmega88
- кодът е писан в MikroC (много по-лесно е)
- алгоритъмът е по-добър (така мисля...)
- електронната схема е усъвършенствана
- шасито на робота е от 30-годишен метален конструктор (голяма надеждност)
Нека да започна с електронната схема:

Пояснение за пиновете на Atmega88:
C5 - Вход ляв IR приемник
C4 - Вход десен IR приемник
C3 - Вход десен сензор за линия
C2 - Вход ляв сензор за линия
D0 - Изход ляв мотор напред
D1 - Изход ляв мотор назад
D2 - Изход десен мотор напред
D3 - Изход десен мотор назад
D5 - Изход 38KHz за IR светодиодите
Сложил съм два регулатора, като този за микроконтролера е в корпус TO92, а другия TO220.
Сензорите за линия са свързани към главната платка по следния начин:

Крачетата на конектора съответстват: квадратно (1-во) към квадратно.
Захранването ще е от две 9-волтови батерии свързани паралелно.
Ето го и кодът:
Код: [Маркирай кода]
void str() // Function for turning both motors forward
{
PORTD=0b00000101;
}
void left() // Function for turning the left motor back and the right one forward
{
PORTD=0b00000110;
}
void right() // Function for turning the left motor forward and the right one back
{
PORTD=0b00001001;
}
void back() // Function for turning both motors backward
{
PORTD=0b00001010;
}
void clear() // Function for making all PORT C pins go low (actually I dont use it...)
{
PORTD=0x00;
}
void main() // Main function
{
DDRC=0x00; // Defining all PORT C pins as Inputs
DDRD=0xFF; // Defining all PORT D pins as Outputs
PORTC=0b0111100; // Activating Pull-up resistors on pins C2, C3, C4 and C5
TCCR0A=(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); // Timer 0 settings
TCNT0=0; // Enabling Timer 0 (I think...)
OCR0A=210; //Tuning to 38kHz
OCR0B=105; //50% duty
TCCR0B=(1<<WGM02)|(1<<CS00); // More Timer 0 settings
delay_ms(5000); // Initial 5sec delay
str(); // Go straight!
while(1) // Primary endless cycle
{
while(PINC3_bit&&PINC2_bit) // While the robot is not on the line
{
if(PINC5_bit&&PINC4_bit) str(); // If both IR are inactive go straight
else if(PINC5_bit&&(!PINC4_bit)) right(); // If the left IR is inactive and the right one is active, go right
else if((!PINC5_bit)&&PINC4_bit) left(); // If the left IR is active and the right one is inactive, go left
else str(); // If all fails...just go straight :D
}
if(!PINC3_bit) // If right line sensor is active
{
while(!PINC3_bit) // Go back while its active
{
back();
}
PORTD=0b00000010; // Turn only left motor back
delay_ms(300); // for 300ms
}
else // Else if the left line sensor is active
{
while(!PINC2_bit) // Go back while its active
{
back();
}
PORTD=0b00001000; // Turn only left motor back
delay_ms(300); // for 300ms
}
}
}
Коментарите съм писал на английски защото на кирилица не излизат.
Най-вероятно тази вечер ще наредя елементите на бредборда и ще тествам.
Очаквайте резултати!

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