Автор Тема: сервото ме базика  (Прочетена 3368 пъти)

svetoslav

  • Робо-Новак
  • *****
  • Публикации: 19
    • Профил
сервото ме базика
« -: Август 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);
 
}
име:Светослав
от:Ботевград
на 17 години

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
сервото ме базика
« Отговор #1 -: Август 16, 2012, 07:02:28 am »
Кода не съм го гледал обстойно, но искам да питам дали подаваш постоянно управляващи сигнали на сервотата, а не само когато трябва да се завъртят.

svetoslav

  • Робо-Новак
  • *****
  • Публикации: 19
    • Профил
сервото ме базика
« Отговор #2 -: Август 16, 2012, 02:24:08 pm »
еми само в началото задавам да седи на 90 градуса то е само 1 серво и после има 1 функция с която се завърта на 180 и 0 в тая функция влиза когато се доближи до стена
име:Светослав
от:Ботевград
на 17 години

svetoslav

  • Робо-Новак
  • *****
  • Публикации: 19
    • Профил
сервото ме базика
« Отговор #3 -: Септември 02, 2012, 10:00:00 pm »
Озадачен съм осетих че ми трябват още батерии и добавих към стандартната 9 волтова и още 4 по 1.5 обаче все още ако сервото има част в целата схема моторите не помръдват следвах тази схема :
http://imageshack.us/photo/my-images/193/circuitt.jpg/
моля някой да ме просветли.
име:Светослав
от:Ботевград
на 17 години

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
сервото ме базика
« Отговор #4 -: Септември 03, 2012, 06:52:39 am »
Защото аз като съм управлявал серво, като му задам даден ъгъл продължавам да му подавам импулсите за даденият ъгъл, докато не реша да го сменя и после всичко се повтаря. Тоест каквото и да прави контролера постоянно трябва да 'подхранва' сервото с импулси.

svetoslav

  • Робо-Новак
  • *****
  • Публикации: 19
    • Профил
сервото ме базика
« Отговор #5 -: Септември 03, 2012, 07:49:15 am »
добре това ясно мерси ама защо 2та ел мотора вобще ги няма когато имат общо с сервото
име:Светослав
от:Ботевград
на 17 години

svetoslav

  • Робо-Новак
  • *****
  • Публикации: 19
    • Профил
сервото ме базика
« Отговор #6 -: Септември 03, 2012, 06:21:53 pm »
мисля че е до кода защото дори да махна кабелите на сервото пак моторите не помръдват ето го кода моля някой да ми помогне
 #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);
}
име:Светослав
от:Ботевград
на 17 години