это аналог i-робота, с несколько урезаной функциональностью...
мне понравился.
Зеля
Отправлено: 05 Октября, 2013 - 10:32:57
Рядовой
Сообщений всего: 8
Дата рег-ции: Сент. 2013
на видео продемонстрировано: http://www.fayloobmennik.net/3242819, я делал и вакуум на центробежном вентиляторе, но к сожалению аккумулятор слишком слаб
Зеля
Отправлено: 08 Октября, 2013 - 17:47:04
Рядовой
Сообщений всего: 8
Дата рег-ции: Сент. 2013
код на Си
#define F_CPU 1000000UL // указываем частоту в герцах
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;
}
}
Vladimir72
Отправлено: 08 Октября, 2013 - 22:47:22
Великий стратег
Сообщений всего: 193
Дата рег-ции: Май 2012
#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
}
здесь не понятно куда он едет прямо или направо ??
Зеля
Отправлено: 09 Октября, 2013 - 09:37:14
Рядовой
Сообщений всего: 8
Дата рег-ции: Сент. 2013
for (i = 1; i <= 30; i++) // обнуление проверок на углы? - после повторения цикла 30раз (3сек так как задержка 100мс) переменная А приобретает значения 0 ф вот тут a = a + 1; //проверка углов она приобретает еденицу тоесть если в течении 3х сек зажимаются бампера больше 3х раз то отъезд назад и разворот (это сделано чтоб не долбилась в углах)
void right() //реверсивный разворот вправо - правое колесо вперёд а левое назад (разворачивается на месте) использован L293D под радиатором
void forward() //движение прямо - едет вперёд
позапутывал функциями чтобы в дальнейшем добавлять другие функции уборки и как приобрету кнопочки сделаю менюшку выбора программ
Зеля
Отправлено: 09 Октября, 2013 - 09:59:08
Рядовой
Сообщений всего: 8
Дата рег-ции: Сент. 2013
изначально были ик бамперы но у меня много чёрных поверхностей и они не нашли применения это моё первое изделие включая код до сих пор не могу разобраться как работают датчики загрязнения и где вообще их найти(( (Добавление)
прошу прощения коментарии у функций движения я забыл поменять местами Прикреплено изображение
так же заметил что перфорированная монтажная лента из которой сделан каркас является очень хорошим и крепким вариантом для построения различных форм и крепежа всяких модулей (так и называется ПЕРФОРИРОВАННАЯ МОНТАЖНАЯ ЛЕНТА обычно продавцы слышат это названия и тычут скотч махая гривой и плечами) стоимость таковой у нас 50гривен за 20метров в рублях это где то 170
не штукатурные маячки они для жестких прямых "балок", монтажная лента она гибкая из нее гнуть можно и уголки и кольца...
специфический холивар образуется: штукатурка (с маячками) VS гипсокартон (с монтажной лентой).
Петр Киселев
Отправлено: 12 Октября, 2013 - 21:53:09
Гуру
Сообщений всего: 2397
Дата рег-ции: Окт. 2012
Согласен! Просто материала для построения роботов сейчас стало немеряно! Это хорошо.
Только строй!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.