роботы робототехника микроконтроллеры


 Страниц (13): « 1 2 3 [4] 5 6 7 8 9 ... » В конец    

> Описание: Фото, видео, описание.
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Я не пытался добиться максимальной дальности действия пульта. Поэтому ток протекающий через светодиод у меня небольшой. И никакой специфики нет. Когда пульт был мобильным, питался от трех последовательно соединенных батареек АА по 1.5 В. При управлении роботом с компьютера пульт, а через него и преобразователь, получают энергию от USB.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Еще одна интересная программка на python. Благодаря ей можно управлять роботом из любой точки земного шара через любой браузер. Пустячок, а приятно :)
#!/usr/bin/env python


import serial

def serial_port(string) :

ser = serial.Serial(0,
9600,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
timeout = 1)

# print string[6:7] # test

if string[6:7] == 'f' :
ser.write('f')
elif string[6:7] == 'l' :
ser.write('l')
elif string[6:7] == 's' :
ser.write('s')
elif string[6:7] == 'r' :
ser.write('r')
elif string[6:7] == 'b' :
ser.write('b')

# print ser.read() # test
ser.close()


import socket

page = """HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n<html>
<head>
<title>
control panel
</title>
</head>
<body>
<center>
<a href="forward">forward</a>
<a href="left">left</a>
<a href="stop">stop</a>
<a href="right">right</a>
<a href="backward">backward</a>
</center>
</body>
</html>\r\n"""

HOST = '127.0.0.1'
PORT = 7777

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

while 1 :
flag = 1
conn, addr = s.accept()
print 'client address', addr
while flag :
data = conn.recv(1024)
if data :
conn.send(page)
flag = 0
serial_port(`data`)
conn.close()

Прикреплено изображение
server_3.png

 
 Top
alex91 Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2010  



mihail молодец круто с браузером
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



nest пишет:
жду 4 причины.
огласите вначале ваши пять Улыбка
Дед, ну в том и дело что ног слишком много. Как твой ультрадешевый гексаход поживает? Теоретически- можно 18 серв подключить к контроллеру, а вот на практике- ткните меня носом- я ни одного уклюжего шестинога не видел. И не потому что герц не хватает, а потому что принципиально они одновременно работать на одном МК не смогут.

nest, я просто давно в инет не выходил поэтому не врубился и пофлудил немного, извиняюсь перед mihail, речь конечно не про уарт была. Смущение
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



mihail пишет:
. Благодаря ей можно управлять роботом из любой точки земного шара через любой браузер

А как следить за выполнением команды роботом находясь на другом конце земного шара?
Ведь дистанционное управление подразумевает и обратную связь. Подмигивающий
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Разместить на страничке управления роботом изображение с вебкамеры подключенной к ПК и смотреть, что он там делает Подмигивающий
(Добавление)
Еще хотел, чтобы ПК сам рулил роботом по картинке с вебкамеры. Но, изучение OpenCV потребует немного больше времени нежели я думал Улыбка
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



mihail пишет:
Еще хотел, чтобы ПК сам рулил роботом по картинке с вебкамеры

Да! Было бы здорово. Только боюсь качества ВЕБ-камеры не хватит для анализа картинки.
А так, проект очень интересный. Жду продолжения. Респект Одобряю
 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Роботов пишет:
Да! Было бы здорово. Только боюсь качества ВЕБ-камеры не хватит для анализа картинки.

Хватит, как раз сейчас тов. EDV в рамках своего AVM-навигатора разрабатывает такую систему с использованием именно вебкамер.
 
 Top
alex91 Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2010  



Добрый день нужна помощь тут тоже решил опробовать устройство управление роботом от mihail-а но только нет у меня второй tiny2313 для робота только мега8 и не получается переделать данный код под него
CODE:
/*******************************************

Program : receiver

Compiler : WinAVR

Chip type : ATtiny2313

System Clock : 2 MHz

*******************************************/





#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>





volatile unsigned char count = 0;

volatile unsigned char var_1000 = 0b11111111;





// Timer 0 overflow interrupt service routine

ISR(TIMER0_OVF_vect)

{

if( count == 0 )

{

PORTD |= 0b00111100;

}



if( count == 7 )

{

PORTD &= var_1000;

}



if( count == 15 )

{

PORTD &= 0b11000011;

}



count += 1;



if( count == 156 )

{

count = 0;

}

}





volatile unsigned char flag = 0;





int main(void)

{

// System Clock Prescaler initialization



// Clock Prescale Register

// Bits: CLKPCE - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0

// CLKPR = 0b10000000;

// CLKPR = 0b00000010;





// Input/Output Ports initialization



// Port A initialization

// DDRA = 0b00000000;

// PORTA = 0b00000000;



// Port B initialization

DDRB = 0b00000000;

PORTB = 0b10000000;



// Port D initialization

DDRD = 0b00111100;

PORTD = 0b00000000;





// Timer/Counter 0 initialization



// Timer/Counter 0 Control Register A

// Bits: COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00

TCCR1A = 0b00000000;



// Timer/Counter 0 Control Register B

// Bits: FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00

TCCR1B = 0b00000000;



// Timer/Counter 0

TCNT1H = 0;





// Timer(s)/Counter(s) Interrupt(s) initialization



// Timer/Counter Interrapt Mask Register

// Bits: TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A

TIMSK = 0b00000010;





// Global enable interrupts

sei();





while(1)

{

flag = 0;

while( (PINB & (1<<7)) != 0 );

_delay_us(2000);

if( (PINB & (1<<7)) == 0 ) flag = 1;

_delay_us(2000);

if( (PINB & (1<<7)) == 0 ) flag = 2;

_delay_us(2000);

if( (PINB & (1<<7)) == 0 ) flag = 3;

_delay_us(2000);

if( (PINB & (1<<7)) == 0 ) flag = 4;



if( flag == 1 )

{

/* едем прямо */

var_1000 = 0b11001111;

TCCR1B = 0b00000001;

}



if( flag == 2 )

{

/* поворачиваем */

var_1000 = 0b11000011;

TCCR1B = 0b00000001;

}



if( flag == 3 )

{

/* поворачиваем */

var_1000 = 0b11111111;

TCCR1B = 0b00000001;

}



if( flag == 4 )

{

/* едем назад */

var_1000 = 0b11110011;

TCCR1B = 0b00000001;

}



_delay_ms(50);

while( (PINB & (1<<7)) != 0 );



/* стоим на месте */

while( count < 150 );

TCCR1B = 0b00000000;

_delay_ms(50);

}



return 0;

}


Я тут поменял регистры таймера-счетчика под мегу8 все компилиться но не работает
Помогите разобраться
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



У вас похоже прерывание по таймеру0 не включено.
Похоже надо в регистре TIMSK бит TOIE0 в "1" поставить;
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Программа для робота с ATmega8. Эту программу я не проверял, но должна работать Улыбка Чтобы она работала правильно необходимо изменить Fuse bits. Точнее, настроить тактирование МК на 2 MHz.
/*******************************************
Program : receiver
Compiler : WinAVR
Chip type : ATmega8
System Clock : 2 MHz
*******************************************/


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


volatile unsigned char count = 0;
volatile unsigned char var_1000 = 0b11111111;


// Timer 0 overflow interrupt service routine
ISR(TIMER0_OVF_vect)
{
if( count == 0 )
{
PORTD |= 0b00111100;
}

if( count == 7 )
{
PORTD &= var_1000;
}

if( count == 15 )
{
PORTD &= 0b11000011;
}

count += 1;

if( count == 156 )
{
count = 0;
}
}


volatile unsigned char flag = 0;


int main(void)
{
// Input/Output Ports initialization

// Port B initialization
DDRB = 0b00000000; // PB0 TSOP
PORTB = 0b00000001;

// Port C initialization
DDRC = 0b00000000;
PORTC = 0b00000000;

// Port D initialization
DDRD = 0b00111100; // PD5, PD4, PD3, PD2 servo
PORTD = 0b00000000;


// Timer/Counter 0 initialization

// Timer/Counter 0 Control Register
// Bits: - - - - - CS02 CS01 CS00
TCCR0 = 0b00000000;

// Timer/Counter 0
TCNT0 = 0;


// Timer(s)/Counter(s) Interrupt(s) initialization

// Timer/Counter Interrapt Mask Register
// Bits: OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 – TOIE0
TIMSK = 0b00000001;


// Global enable interrupts
sei();


while(1)
{
flag = 0;
while( (PINB & (1<<0)) != 0 );
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 1;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 2;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 3;
_delay_us(2000);
if( (PINB & (1<<0)) == 0 ) flag = 4;

if( flag == 1 )
{
/* едем прямо */
var_1000 = 0b11001111;
TCCR0 = 0b00000001;
}

if( flag == 2 )
{
/* поворачиваем */
var_1000 = 0b11000011;
TCCR0 = 0b00000001;
}

if( flag == 3 )
{
/* поворачиваем */
var_1000 = 0b11111111;
TCCR0 = 0b00000001;
}

if( flag == 4 )
{
/* едем назад */
var_1000 = 0b11110011;
TCCR0 = 0b00000001;
}

_delay_ms(50);
while( (PINB & (1<<0)) != 0 );

/* стоим на месте */
while( count < 150 );
TCCR0 = 0b00000000;
_delay_ms(50);
}

return 0;
}

(Отредактировано автором: 21 Июня, 2011 - 14:31:22)

 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



Ну и фарш Улыбка если делать красиво - надо все специфичные для платформы

Цитата:
var_1000 = 0b11110011;
TCCR0 = 0b00000001;


и

Цитата:
(PINB & (1<<0))


вынести в функции а-ля

int bumperPressed() //return 0/1
void driveLR(int left, int right) // left,right - speed in percents -100..0..+100

тогда программа будет на порядок более читаемой

И при переносе кода на другую платформу или изменении используемых ног придется переписать пару-тройку функций всего

(Отредактировано автором: 20 Июня, 2011 - 21:29:54)

 
 Top
alex91 Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2010  



mihail спасибо опробую отпишусь
И еще почему тактирование МК именно 2MHz нельзя ли на 8MHz переделать
(Добавление)
Что то не хочет работать последняя прога
Пульт работает, светится ик-светодиод при нажатии на кнопки а, мега8 не реагирует
Пульт тактируеться на частоте 8мгц от кварца на PD1 ик-светодиод PB0-PB4 кнопки
У платформы с мегой8 2мгц от внутреннего тактирования
На PB0 TSOP весит а нв PD2-PD5 сервы
Помогите
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



-dead-
Спасибо за конструктивную критику и рекомендации.
alex91
Прикрепите полностью папки с программами робота и пульта. Посмотрю. ATmega8 после изменения Fuse bits тестировали? TSOP подключили по даташиту? Сервоприводы подключили правильно? Проверяли их?
alex91 пишет:
И еще почему тактирование МК именно 2MHz нельзя ли на 8MHz переделать

Переделать можно, но выполнив расчеты я остановился на этих параметрах.

(Отредактировано автором: 21 Июня, 2011 - 00:37:36)

 
 Top
alex91 Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2010  



mihail вот весь проект в AvrStudio
фьюзы менял на 2мгц но безрезультатно
Вместо сервоприводов у меня пока светодиоды стоят
Тсоп подключал как полагается первые твои две пробные программы на пульт и робота работает нормально но иногда ТСОП самопроизвольно срабатывает
Скачать файл: Пульт.rar
Скачан раз: 354
 
 Top
Страниц (13): « 1 2 3 [4] 5 6 7 8 9 ... » В конец
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru