Форум по Роботика
Проекти за роботи => Други роботи => Темата е започната от: svetoslav в Август 15, 2012, 04:00:48 pm
-
:D Здравейте имам си аз 1 машинка която е разчепатена количка с ардуино и ИЧ детектор за разстояние реших да стане по интересно и купих серво правих пробни кодове само с него и си бачка когато обаче направих главния код за робота сервото пулсира на ляво и дясно без причина обаче при сигнал от детектора си върши работата ама 2та мотора не мърдат ако махна от целия код частите с сервото всичко си работи ето го кода може просто да съм доста глупав и да имам грешка
#include <Servo.h>
Servo miniServo;
int speed1Pin = 10;
int speed2Pin = 9;
int speed2APin = 4;
int speed2BPin = 5;
int speed1APin = 6;
int speed1BPin = 7;
int sensePin = 0;
int sensevalue = 0;
int distance = 400;
int servoPin = 11;
int read0 = 0;
int read180 = 0;
void setup ()
{
miniServo.attach(servoPin);
pinMode(speed1Pin,OUTPUT);
pinMode(speed2Pin,OUTPUT);
pinMode(speed1APin,OUTPUT);
pinMode(speed1BPin,OUTPUT);
pinMode(speed2APin,OUTPUT);
pinMode(speed2BPin,OUTPUT);
delay(5000);
runitslowly ();
}
void loop ()
{
miniServo.write(90);
sensevalue = analogRead(sensePin);
if (sensevalue < distance)
{
runitfast ();
}
miniServo.write(90);
if (sensevalue > distance)
{
stopit ();
delay(1000);
findroad ();
if (read0 > read180)
{
avoiditright ();
}
else
{
avoiditleft ();
}
}
}
void avoiditleft ()
{
analogWrite(speed2Pin,250);
digitalWrite(speed2APin,HIGH);
digitalWrite(speed2BPin,LOW);
analogWrite(speed1Pin,250);
digitalWrite(speed1APin,LOW);
digitalWrite(speed1BPin,HIGH);
delay(1500);
analogWrite(speed1Pin,0);
digitalWrite(speed1APin,LOW);
digitalWrite(speed1BPin,LOW);
analogWrite(speed2Pin,250);
digitalWrite(speed2APin,LOW);
digitalWrite(speed2BPin,HIGH);
}
void avoiditright ()
{
analogWrite(speed2Pin,250);
digitalWrite(speed2APin,HIGH);
digitalWrite(speed2BPin,LOW);
analogWrite(speed1Pin,250);
digitalWrite(speed1APin,HIGH);
digitalWrite(speed1BPin,LOW);
delay(1500);
analogWrite(speed1Pin,0);
digitalWrite(speed1APin,LOW);
digitalWrite(speed1BPin,LOW);
analogWrite(speed2Pin,250);
digitalWrite(speed2APin,LOW);
digitalWrite(speed2BPin,HIGH);
}
void runitslowly ()
{
for (int i = 100;i<250;i++)
{
analogWrite(speed2Pin,i);
digitalWrite(speed2APin,LOW);
digitalWrite(speed2BPin,HIGH);
delay(15);
}
}
void stopit ()
{
analogWrite(speed2Pin,0);
digitalWrite(speed2APin,LOW);
digitalWrite(speed2BPin,LOW);
//pausebreak
analogWrite(speed1Pin,0);
digitalWrite(speed1APin,LOW);
digitalWrite(speed1BPin,LOW);
}
void runitfast ()
{
analogWrite(speed2Pin,250);
digitalWrite(speed2APin,LOW);
digitalWrite(speed2BPin,HIGH);
}
void findroad ()
{
delay(500);
miniServo.write(0);
read0 = analogRead(sensePin);
delay(1000);
miniServo.write(180);
read180 = analogRead(sensePin);
delay(1000);
miniServo.write(90);
}
-
Кода не съм го гледал обстойно, но искам да питам дали подаваш постоянно управляващи сигнали на сервотата, а не само когато трябва да се завъртят.
-
еми само в началото задавам да седи на 90 градуса то е само 1 серво и после има 1 функция с която се завърта на 180 и 0 в тая функция влиза когато се доближи до стена
-
Озадачен съм осетих че ми трябват още батерии и добавих към стандартната 9 волтова и още 4 по 1.5 обаче все още ако сервото има част в целата схема моторите не помръдват следвах тази схема :
http://imageshack.us/photo/my-images/193/circuitt.jpg/
моля някой да ме просветли.
-
Защото аз като съм управлявал серво, като му задам даден ъгъл продължавам да му подавам импулсите за даденият ъгъл, докато не реша да го сменя и после всичко се повтаря. Тоест каквото и да прави контролера постоянно трябва да 'подхранва' сервото с импулси.
-
добре това ясно мерси ама защо 2та ел мотора вобще ги няма когато имат общо с сервото
-
мисля че е до кода защото дори да махна кабелите на сервото пак моторите не помръдват ето го кода моля някой да ми помогне
#include <Servo.h>
Servo microServo;
int motor1APin = 4; //izbor na pin za 1A (v sluchaq Arduino pin 4)
int motor2APin = 5; //izbor na pin za 2A
int motor1ENPin = 9; //izbor na pin za 1,2EN
int motor3APin = 6; //izbor na pin za 3A
int motor4APin = 7; //izbor na pin za 4A
int motor2ENPin = 10; //izbor na pin za 3,4EN
int servoPin=11;
void setup() {
pinMode(motor1APin, OUTPUT); //zadawa che shte izpolzvame EN i A pinovete kato izhodi
pinMode(motor2APin, OUTPUT);
pinMode(motor1ENPin, OUTPUT);
pinMode(motor3APin, OUTPUT);
pinMode(motor4APin, OUTPUT);
pinMode(motor2ENPin, OUTPUT);
microServo.attach(servoPin);
}
void loop() {
/* tazi chast ot koda
vyrti motorite po-byrzo v ednata posoka
*/
microServo.write(0);
analogWrite(motor1ENPin, 250); //kontrolira skorostta na vyrtene (priema stojnosti ot 0 do 255)
digitalWrite(motor1APin, HIGH); //zaedno s dolniyq red kontrolira na posokata na vyrtene
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 250);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, HIGH);
delay(3000); //zadyrja motorite vklyucheni za 3 sekundi
/*tazi chast spira vyrteneto
na motorite
*/
analogWrite(motor1ENPin, 0);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 0);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, LOW);
delay(2000); //zadyrja motorite izklyucheni za 2 sekundi
/* tazi chast ot koda
namalya skorostta na motorite i obrushta posokata im na vyrtene
*/
microServo.write(90);
analogWrite(motor1ENPin, 250);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, HIGH);
analogWrite(motor2ENPin, 250);
digitalWrite(motor3APin, HIGH);
digitalWrite(motor4APin, LOW);
delay(3000); //zadyrja motorite vklyucheni za 3 sekundi
/*tazi chast spira vyrteneto
na motorite
*/
analogWrite(motor1ENPin, 0);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 0);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, LOW);
delay(2000); //zadyrja motorite izklyucheni za 2 sekundi
microServo.write(180);
}