Go Down

Topic: Mover servomotores (4 ó más) con Autoit (Read 3703 times) previous topic - next topic

Adolfito121

Jan 27, 2011, 06:37 pm Last Edit: Apr 30, 2012, 12:52 am by coleoptero Reason: 1
Buenas tardes chicos.

Acabo de entrar en el mundo de Arduino y la verdad es que es apasionante.
Lo que más me gustaría es poder mover servomotores a la posición que necesite en cada momento desde una aplicación hecha por mí en Autoit (viene a ser un derivado de visual basic, pero para novatos como yo).

Hasta ahora he conseguido mover 1 servo al ángulo que yo quiero pero cuando quiero mover más de uno choco con un muro (llamado ignorancia).

A la placa (una Arduino Uno) le subo este .pde:
#include <Servo.h>

Servo myServo;

const int servoPin = 9; // the pin the servo is connected to

int val = 0;    // a value accumulated from data on the serial port
int angle = 90; // the current angle of the servo



void setup()
{
 Serial.begin(9600);
 myServo.attach(servoPin);
 myServo.write(angle);  // center the servo
}


void loop()
{
 if ( Serial.available())
 {
   char ch = Serial.read();

   if(ch >= '0' && ch <= '9')        // is ch a number?
  val = val * 10 + ch - '0';        // yes, accumulate the value
   else if(ch == '-') // is this the minus sign?
   {
  angle = angle - val;
  if(angle < 0)
     angle = 0;
  myServo.write(angle);      // write the new angle
  val = 0;
   }
   else if(ch == '+') // is this the plus sign?
   {
  angle = angle + val;
  if(angle > 180)
     angle = 180;
  myServo.write(angle);      // write the new angle
  val = 0;
   }
 }
}


y desde mi programita hecho en Autoit le mando por el `puerto COM un par de comandos básicos que mueven el motor 90º a un lado o al otro

analogwrite(9, "+90")
analogwrite(9, "-90")


He probado a modificar mi programita para incluir botones que manden esta orden:
analogwrite(8, "+90")
analogwrite(8, "-90")


pero no me ha dado resultado  =(

También probé a tocar el .pde para crear un nuevo objeto servo:
#include <Servo.h>

Servo myServo;
Servo myServo2;

const int servoPin = 9; // the pin the servo is connected to
const int servoPin2 = 8; // the pin the servo is connected to

int val = 0;    // a value accumulated from data on the serial port
int angle = 90; // the current angle of the servo



void setup()
{
 Serial.begin(9600);
 myServo.attach(servoPin);
 myServo.write(angle);  // center the servo
 myServo2.attach(servoPin2);
 myServo2.write(angle);  // center the servo
}


void loop()
{
 if ( Serial.available())
 {
   char ch = Serial.read();

   if(ch >= '0' && ch <= '9')        // is ch a number?
  val = val * 10 + ch - '0';        // yes, accumulate the value
   else if(ch == '-') // is this the minus sign?
   {
  angle = angle - val;
  if(angle < 0)
     angle = 0;
  myServo.write(angle);      // write the new angle
    myServo2.write(angle);      // write the new angle
  val = 0;
   }
   else if(ch == '+') // is this the plus sign?
   {
  angle = angle + val;
  if(angle > 180)
     angle = 180;
  myServo.write(angle);      // write the new angle
  myServo2.write(angle);      // write the new angle
  val = 0;
     }
 }
}


pero como me temía esto hacía que los dos servos se movieran cada uno a la misma posición a la vez.

He estado buscando en foros pero no encuentro nada que me oriente, ya que la mayoría de los ejemplos que encuaentro son solo para un servo o para mover dos con potenciometros conectados también a la Arduino. Yo simplemente necesito poder decirle" Servo que estás en el pin 9 ves al ángulo 30, servo que estás en el pin 7 ves al ángulo 45, etc, etc...

Siempre voy a trabajar con la placa conectada a un PC, y no tengo problema en alimentar los servos ya que les doy 5V con cables usb cortados y conectados al PC  :~

¿Alguien me puede echar una mano please?

Muchas gracias por haber leído hasta aquí, saludos

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy