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


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

> Описание: нужна помощь
cjA Post Id



Генерал


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



Петр Киселев, так у ремботеха спрашивают- какая задача. Если камеру позиционировать- это, да, серво, а если как у меня (банку пива) 1 кг держать и нести- это совсем не сервы. У меня вот есть четыре моторчика из принтеров, и датчик положения- резюк. Шестиренки как самому сделать? Не покупатьже, да?
(Добавление)
(про шестиренки это я зря, доказано, дома их не сделать) Так а мотор, шестиренки, резюк (датчик положения) и МК - это разве не серво, только самодельный и , ты правильно подметил, нужной тебе мощности? Только не нужно заморачиваться с его модуляцией 50Гц кажется?
(Добавление)
Шаговики не слишком мощные к своему весу, для позиционирования (станок ЧПУ) - идеально, а для удержания позиции (манипулятор) - не очень.
 
 Top
rembytex Post Id


Рядовой


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



Петр Киселев, вся суть вопроса в том, что мне нужно повернуть Тащусь коллекторный двигатель c редуктором !!!(не степпер, не серву) на определенный угол (в моём случае 90`), но сделать это программно, т.е.:

CODE:
if (val <= 300) // - некоторое значение на делителе (светло), повернулся в одну сторону
if (val >= 300) // -.....................//........................... (темно), повернулся в другую


В ещё выше приведённом коде всё работает, но либо постоянно вращается в одну сторону (свет), либо в другую (тьма). Так вот , нужно сделать временные задержки - при условии if (val <= 300) ->>> что бы двигатель повернулся на 90`, т.е. за какое то время.
Ниже приведен код для кнопки, нажал кнопку и через 3 сек нагрузка отключается т.е. с задержкой, осталось как-то прикошатить к фоторезистору Замешательство

CODE:
int SW1=12;
int value_1, value_2=0;
int LED=13;
byte Flag=0;
int i=3000;

void setup()
{
pinMode(SW1,INPUT);
digitalWrite(SW1,HIGH);
pinMode(LED,OUTPUT);
digitalWrite(LED,HIGH);
}

void loop()
{

value_1=digitalRead(SW1);
if(!value_1)
{
delay(50);
value_2=digitalRead(SW1);
if(!value_2)
{
Flag=1;
do{
}while(!digitalRead(SW1));
}
}

if(Flag==1)i--;
if(i==0)
{
digitalWrite(LED,LOW);
while(1);
}

delay(1);

}

на данном этапе мощность значения не имеет.

(Отредактировано автором: 24 Января, 2014 - 11:08:54)

 
 Top
morokoriss Post Id



Генералиссимус


Сообщений всего: 697
Дата рег-ции: Нояб. 2011  



не помогут тупо задержки. У движков есть инерционность и он не сотановится каждый раз сторого в одном месте. Надо остледить то самое положение и тормознуть его. Но если такая точность не нужна то сойдёт. Можно тупо механически ограничить поворот его. Ну грубо говоря если движок поворачивает стрелку, поставить ограничитель. Вот тогда...
 
 Top
rembytex Post Id


Рядовой


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



morokoriss это всё понятно, вопрос как реализовать программно?

Хорошо, выбросим движок подальше, вообщем нужно получить на выходах контроллера либо 1 и 0, либо 0 и 1, в зависимости от напряжения на входе делителя, как-то так, но с задержкой.

(Отредактировано автором: 24 Января, 2014 - 11:50:46)

 
 Top
morokoriss Post Id



Генералиссимус


Сообщений всего: 697
Дата рег-ции: Нояб. 2011  



Надо сделать так. Когда начинает работать контроллер, опросить датчик, запомнить состояние и ничего не делать. Совершить действие только тогда, когда состояние датчика изменится на противоположное. Повернуть мотор пока значение, считываемое с потенциометра не станет допустим X и остановить мотор. Дальше выдержка и вернуть в исходное состояние или ждать в этом состоянии и снова следить за изменением состояния фотодатчика. Я не совсем понимаю задачу. Если доходчиво объясните, попробую составить алгоритм более чётко.
(Добавление)
иначе, моторы и будут крутиться постоянно. среди темноты и света нет среднего состояния с точки зрения фотодатчика. Поэтому не будет такого состояния покоя, при котором ни свет ни тьма. Какое-то состояние изначально есть и куда-то мотор повернётся при включении сразу. Если контролировать уровень освещенности, то тут можно лавировать. Включил например устройство, оно определило, что сейчас 0. И при малейшем изменении освещенности в большую или меньшую сторону совершать различные повороты двигателя. Но опять же, опрашивать датчик надо с какой-то переодичностью. Непонятно, объясните пожалуйста суть устройства.
 
 Top
Петр Киселев Post Id



Гуру


Сообщений всего: 2397
Дата рег-ции: Окт. 2012  



cjA пишет:
(про шестиренки это я зря, доказано, дома их не сделать) Так а мотор, шестиренки, резюк (датчик положения) и МК - это разве не серво, только самодельный и , ты правильно подметил, нужной тебе мощности? Только не нужно заморачиваться с его модуляцией 50Гц кажется?
(Добавление)
Шаговики не слишком мощные к своему весу, для позиционирования (станок ЧПУ) - идеально, а для удержания позиции (манипулятор) - не очень.


Попробую написать про себя. Хотел написать "ответить", но подумал что cjA напишет, "а я и не спрашивал, это были мысли вслух!"

Итак, про себя. Года три назад сделал два робота, которые таскали нетбук и ноутбук, у которых был LPТ-порт. Два мотора были шаговые с небольшими редукторами (выдрал из каких-то принтеров. Нормальная получилась тележка, правда, довольно тихоходная.
До этого делал однодвижительный, на довольно мощном ШД (жаль, что достал только один). Роботы по проходимости были так себе! Еле через провод перебирались. Но ползали и заданный маршрут проходили.
Сейчас все проще! В продаже появилось большое количество разных по цене (от 85 р) мотор-редукторов. Из Китая вообще с бесплатной доставкой! Конечно, надо какие-то деньги вкладывать! Увы!
(Добавление)
rembytex пишет:
Петр Киселев, вся суть вопроса в том, что мне нужно повернуть коллекторный двигатель c редуктором !!!(не степпер, не серву) на определенный угол (в моём случае 90`), но сделать это программно, т.е.:


Как бы сделал я.
Энкодер выдает импульсы. В Ардуине стоит счетчик, который их считает и, по достижению нужного значения выдает сигнал на останов. И все. То, что тебе надо!

Это можно реализовать на простой логике. Две-три схемы типа 155, и вперед! Ну сейчас такую городушку городить - это абсурд!

(Отредактировано автором: 24 Января, 2014 - 21:15:24)

 
 Top
Alder71 Post Id



Рядовой


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



rembytex пишет:
Имеем (хотя пока оно меня имеет Улыбка ): Есть всё вышеуказанное + мотор. Как сделать в программе чтобы при определённой освещенности - темно - двигатель повернулся на определенный градус в одну сторону - светло - в другую. Всё остальное время стоит. Меня интересует именно как по времени рассчитать угол поворота, т.е. программно по времени методом подбора некоторого числа (условно). Мотор с редуктором. Не лезет в мою голову мысль - хоть убей! Прошу помощи у уважаемых гуру роботостроения. Зарание спасибо.


Приблизительный алгоритм
Условие, если светло то
начала цикла от 0 до 1000 (1000 время работы двигателя)
тело цикла: движение в одну сторону
по окончанию цикла двигатель стоп.
иначе
начала цикла от 0 до 1000 (1000 время работы двигателя)
тело цикла: движение в другую сторону
по окончанию цикла двигатель стоп.

Удачи
 
 Top
Страниц (2): « 1 [2]
« Делаем роботов »


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





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