Управление 2я сервоприводами
- Войдите на сайт для отправки комментариев
Сб, 15/11/2014 - 23:32
Добрый вечер всем .Прошу помоши так как я только начинаю осваивать Arduino.
Есть задумка написать программу для машинки с HC-SR04 и двумя сервами.написал программу для одной сервы,работает отлично.Когда решил переделать программу для двух серв то я попал в тупик.в программе сервы крутяться по очереди,а я из них хочу сделать эхо локаторы.так вот проблема не могу понять где я написал не правильно код программы и как сделать чтобы они одновременно врашались? подскажите пожалуйста чем сможите.очень большое желание написать программу самому.
#include <Servo.h>
Servo myservo1; // назначаем вывод 1 сервы
Servo myservo2; // назначаем вывод 2 сервы
int pos = 0;
void setup()
{
// устанавливаем пин как вывод управления сервой
myservo1.attach(6); // назначаем порты для первой сервы
myservo2.attach(5); // назначаем порты для второй сервы
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов
{ // с шагом в 1 градус
myservo1.write(pos); //
delay(15); // ждём 15ms пока серва займёт новое положение
}
for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов
myservo1.write(pos);
for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов
{ // с шагом в 1 градус
myservo2.write(pos); //
delay(20);
}
for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов
{
myservo2.write(pos);
}
}
Упрощаем :
int pos = 0;
int incdec = 1; // шаг увеличения/уменьшения pos
void loop()
{
pos+=incdec;
if (pos < 0) { incdec = 1; pos=1; }
if (pos > 180) { incdec = -1; pos=179; }
myservo1.write(pos);
myservo2.write(pos);
delay(20);
}
Спасибо вам огромное за помошь! все действительно работает именно как я хотел! меня интересует откуда вы взяли ( =incdec ) я посмотрел в Справочник языка Ардуино там такого не нашел. я просто сейчас думаю как теперь добавить код для измерения расстояния! если вам не трудно можно я напишу программу дальше с ультрозвуковым и сервами а вы просто проверите правильно я направляюсь или нет!?
дописал полностью скетч и при подключении двигатели не крутяться а сервоприводы стали врашаться быстрее когда я приблежаюсь к ультрозвуковому датчику
вот сама программа
1. "Справочник языка Ардуино" смотрели не тот, посмотрите http://arduino.ru/Reference/IncrementCompound
2. "Сервоприводы стали врашаться быстрее когда я приблежаюсь к ультрозвуковому датчику " - это из-за строки impulseTime=pulseIn(Echo,HIGH); //замеряем длину имульса
Почитайте про pulseIn(), будет понятно.
Спасибо за то что помогаете советами. конечно я все просмотрю и постараюсь написать правильно алгоритм который я задумал.просто очень много слов попадаються которые не понятно откуда беруться и для чего они.
Гляньте сюда и решите: а стоит ли ждать ответа от датчика целую секунду ( туда-обратно около 160 метров)
http://arduino.ru/Reference/PulseIn
pulseIn(pin, value, timeout)1. "Справочник языка Ардуино" смотрели не тот, посмотрите http://arduino.ru/Reference/IncrementCompound
2. "Сервоприводы стали врашаться быстрее когда я приблежаюсь к ультрозвуковому датчику " - это из-за строки impulseTime=pulseIn(Echo,HIGH); //замеряем длину имульса
Почитайте про pulseIn(), будет понятно.
в скетче enableA и enableB объявлены для управление скоростью.я просто по тихоньку по кусочку собираю программу.я нашел алгоритм готовый для управление этим шилдом,вот из него по кусочкам вытаскиваю и просматриваю что и для чего служит. так каждую деталь я сначала нахожу для него алгоритм ,а потом уже выписываю то что мне нужно.
Гляньте сюда и решите: а стоит ли ждать ответа от датчика целую секунду ( туда-обратно около 160 метров)
http://arduino.ru/Reference/PulseIn
pulseIn(pin, value, timeout)я если честно не знаю надо ли ждать или нет. я просто только начал изучать поэтому я обратился сюда за советами.вы как видите я стараюсь написать алгоритм и целыми днями собираю по кусочкам. я рад что есть люди которые подсказывают и помогают. заранее спасибо
Добрый день!
Спасибо большое!Ваш скетч очень полезен!
На данный момент делаю серво-манипулят ор, который состоит из 3 сервоприводов. Можно Вас попросить выложить пример скетча, который позволит управлять тремя сервами одновременно.
Например:
1.включение Ардуино Уно
2.Через две секунды, после включения - начинает двигаться СЕРВО1 с 0 до 180 градусов(отложе нный старт, после включения)
3.Через 0,5 секунды после начала движения СЕРВО1 - включается СЕРВО2 и начинает двигаться с 0 до 60 градусов
4.Через 0,5 секунды после начала движения СЕРВО2 - включается СЕРВО и начинает двигаться с 45 до 78 градусов