Форум myROBOT.ru » Роботы и робототехника » Делимся опытом » мой первый "проект"

Страниц (1): [1]
 

1. Зеля - 04 Октября, 2013 - 23:48:41 - перейти к сообщению
тестовая модель только каркас и правый бампер иногда заедает плюс щётка на быструю руку


http://www.fayloobmennik.net/3242819
2. Зеля - 05 Октября, 2013 - 09:08:48 - перейти к сообщению
фото
3. Роботов - 05 Октября, 2013 - 09:30:16 - перейти к сообщению
А что это такое?
4. Predator - 05 Октября, 2013 - 10:11:50 - перейти к сообщению
это аналог i-робота, с несколько урезаной функциональностью...
мне понравился.
5. Зеля - 05 Октября, 2013 - 10:32:57 - перейти к сообщению
на видео продемонстрировано: http://www.fayloobmennik.net/3242819, я делал и вакуум на центробежном вентиляторе, но к сожалению аккумулятор слишком слаб Грустный
6. Зеля - 08 Октября, 2013 - 17:47:04 - перейти к сообщению
код на Си





#define F_CPU 1000000UL // указываем частоту в герцах

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> //Библиотека прерываний

int i, a;
a = 0;


void left() //реверсивный разворот влево
{
PORTC &= ~_BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}

void right() //реверсивный разворот вправо
{
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "1" на линии 3 порта C
PORTC |= _BV(PC4); // установить "0" на линии 4 порта C
}

void back() //назад
{
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
}

void forward() //движение прямо
{
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}

void conor() // //разворот при застревании в углу
{
if (a > 3)
{
back();
_delay_ms(2000);
right();
_delay_ms(1000);
a = 0;
}
}

void randomclean() //хаотичный режим уборки
{
forward();

if (!(PIND & (1<<PIND1))) // проверка левый бампер
{
a = a + 1; //проверка углов
back();
_delay_ms(500);
right();
_delay_ms(600);
}

conor();

if (!(PIND & (1<<PIND2))) // проверка правый бампер
{
a = a + 1; //проверка углов
back();
_delay_ms(500);
left();
_delay_ms(600);
}

_delay_ms(100);
}



int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы

PORTD = 0xff; // установить "1" на всех выводах порта D,

while (1)
{
for (i = 1; i <= 30; i++) // обнуление проверок на углы
{
randomclean();
}
a = 0;
}
}
7. Vladimir72 - 08 Октября, 2013 - 22:47:22 - перейти к сообщению
#include <avr/interrupt.h> //Библиотека прерываний она не используется,
это что на будущее?
for (i = 1; i <= 30; i++) // обнуление проверок на углы?
(Добавление)
void right() //реверсивный разворот вправо
{
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "1" на линии 3 порта C
PORTC |= _BV(PC4); // установить "0" на линии 4 порта C
}

void forward() //движение прямо
{
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
}
здесь не понятно куда он едет прямо или направо ??
8. Зеля - 09 Октября, 2013 - 09:37:14 - перейти к сообщению
for (i = 1; i <= 30; i++) // обнуление проверок на углы? - после повторения цикла 30раз (3сек так как задержка 100мс) переменная А приобретает значения 0 ф вот тут a = a + 1; //проверка углов она приобретает еденицу тоесть если в течении 3х сек зажимаются бампера больше 3х раз то отъезд назад и разворот (это сделано чтоб не долбилась в углах)


void right() //реверсивный разворот вправо - правое колесо вперёд а левое назад (разворачивается на месте) использован L293D под радиатором


void forward() //движение прямо - едет вперёд


позапутывал функциями чтобы в дальнейшем добавлять другие функции уборки и как приобрету кнопочки сделаю менюшку выбора программ
9. Зеля - 09 Октября, 2013 - 09:59:08 - перейти к сообщению
изначально были ик бамперы но у меня много чёрных поверхностей и они не нашли применения это моё первое изделие включая код до сих пор не могу разобраться как работают датчики загрязнения и где вообще их найти((
(Добавление)
прошу прощения коментарии у функций движения я забыл поменять местами
10. Vladimir72 - 09 Октября, 2013 - 12:50:36 - перейти к сообщению
a=a+1; можно записать так a=a++;
a=a-1; a=a--;
11. Зеля - 12 Октября, 2013 - 19:20:28 - перейти к сообщению
так же заметил что перфорированная монтажная лента из которой сделан каркас является очень хорошим и крепким вариантом для построения различных форм и крепежа всяких модулей (так и называется ПЕРФОРИРОВАННАЯ МОНТАЖНАЯ ЛЕНТА обычно продавцы слышат это названия и тычут скотч махая гривой и плечами) стоимость таковой у нас 50гривен за 20метров в рублях это где то 170
12. Петр Киселев - 12 Октября, 2013 - 20:00:10 - перейти к сообщению
Зеля, посмотри по этой ссылке:

http://myrobot.ru/forum/topic.ph...opic=452&p=7

Типа твоей монтажной ленты только попрочнее.
13. Predator - 12 Октября, 2013 - 20:10:17 - перейти к сообщению
не штукатурные маячки они для жестких прямых "балок", монтажная лента она гибкая из нее гнуть можно и уголки и кольца...
специфический холивар образуется: штукатурка (с маячками) VS гипсокартон (с монтажной лентой).
14. Петр Киселев - 12 Октября, 2013 - 21:53:09 - перейти к сообщению
Согласен! Просто материала для построения роботов сейчас стало немеряно! Это хорошо.
Только строй!
15. Зеля - 12 Октября, 2013 - 21:53:54 - перейти к сообщению
.