Go Down

Topic: Mover servomotores (4 ó más) con Autoit (Read 3 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