Intro Animatronics Boris Cofré Alvarado [email protected] 1. Control de servomotor con arduino Esquema de conexión Código #include <Servo.h> Servo servo1; // Crea un objeto servo para controlar el servomotor void setup() { servo1.attach(3); // asocia el servo conectado al pin 3 al objeto servo } void loop() { servo1.write(0); // fija la posición del servo de acuerdo al valor (ángulo) delay(800); // espera a que el servo se posicione servo1.write(180); delay(800); } En caso de que nuestro motor sea de giro 360º Modificamos la ultima parte de nuestro código void loop() { servo1.write(0); // fija la posición del servo de acuerdo al valor (angulo) delay(1300); // espera a que el servo se posicione servo1.write(360); delay(1300); } *Recuerda que debes incluir la librería SERVO. cuando la importes te saldrá en la primera línea (destacada en amarillo en el ejemplo) como #include <Servo.h> EJEMPLO: Código para controlar 2 o más motores servo //#include <Servo.h> recuerda insertar esta librería Servo servo1; // Crea un objeto servo para controlar el servomotor Servo servo2; // Servo servo3; // Servo servo4; … /* recuerda que vía usb puedes alimentar máx. 3 servomotores, lo ideal es subir el código y luego conectar el cargador de Arduino */ void setup() { servo1.attach(3); // asocia el servo conectado al pin 3 al objeto servo servo2.attach(4); //servo3.attach(5); //servo4.attach(6); … } void loop() { servo1.write(0); // fija la posición del servo de acuerdo al valor (ángulo) servo2.write(0); //servo3.write(0); //servo4.write(0); … delay(800); // espera a que los servomotores se posicionen servo1.write(180); servo2.write(180); //servo3.write(180); //servo4.write(180); … delay(800); } 2. Servomotor controlado por un potenciómetro (resistencia variable) Para esto necesitamos : - Un potenciómetro lineal de 10k (B10k) - Protoboard Esquema de conexión: Código: #include <Servo.h> Servo servo; // Crea un objeto servo para controlar el servomotor void setup() { servo.attach(9); // asocia el pin 9 digital al objeto servo } void loop() { int val = analogRead(3); // lee el valor del potenciómetro (analog in pin 3) val = map(val, 0, 1023, 0, 179); /* escala el valor para usarlo con el servo (valor entre 0 y 180) */ servo.write(val); // fija la posición del servo de acuerdo al valor escalado delay(15); // espera a que el servo se posicione } Código para controlar servo motores con un potenciómetro (2 o más motores) // #include <Servo.h> Servo servo1; // Crea un objeto servo para controlar el servomotor Servo servo2; int val; void setup() { servo1.attach(9); // asocia el pin 9 digital al objeto servo servo2.attach(10); } void loop() { val = analogRead(3); // lee el valor del potenciómetro (analog in pin 3) val = map(val, 0, 1023, 0, 179); /* escala el valor para usarlo con el servo (valor entre 0 y 180) */ servo1.write(val); // fija la posición del servo de acuerdo al valor escalado delay(15); // espera a que el servo se posicione val = analogRead(0); // lee el valor del potenciómetro (analog in pin 0) val = map(val, 0, 1023, 0, 179); /* escala el valor para usarlo con el servo (valor entre 0 y 180) */ servo2.write(val); /* fija la posición del servo2 de acuerdo al valor escalado */ delay(15); } Motor de corriente continua El motor de corriente continua (DC direct current) es una máquina que convierte la energía eléctrica continua en mecánica, provocando un movimiento rotatorio. Algunos ejemplos de motores DC a) Todo tipo de juguetes móviles simples. b) Principalmente en radios con casetera. c) Ventiladores y piezas móviles que requieran mayor fuerza ejem: impresoras. EJERCICIO 1 Aceleramos y desaceleramos el motor usando Arduino Los motores DC posen dos cables de conexión. Uno positivo (+) y otro negativo (-) Para el siguiente ejercicio es necesario un motor que utilice como máximo 9v. Uno de los cables debe ir conectado al pin digital 9 y el otro a GROUND (GND) *El orden en que se coloquen los cables en la placa Arduino (incluso directo en una batería o pila) afecta el sentido en que gira nuestro motor. Esquema de conexión Código int motorPin = 9; // PIN DIGITAL 9 (MOTOR DC) void setup() { pinMode(motorPin, OUTPUT); } void loop() { int delayTime = 50; for(int i = 0; i < 256; i++){ //aceleramos analogWrite(motorPin, i); delay(delayTime); } for(int i = 255; i >= 0; i--){ //frenamos analogWrite(motorPin, i); delay(delayTime); } } EJERCICIO 2 Usamos ahora un potenciómetro para variar la velocidad del motor. El potenciómetro se conecta de la siguiente forma, extremos a 5v y Gnd y el pin de control (Señal) al pin 0 de las entradas analógicas de Arduino. Esquema de conexión Código int motorPin = 9; //CONECTAMOS EL MOTOR al PIN DIGITAL 9 int potPin=0; //CONECTAMOS LA SEÑAL DEL POTENCIOMETRO al PIN //ANALOGO 0 int potValue; void setup() { pinMode(motorPin, OUTPUT); } void loop() { potValue = analogRead(potPin) / 4; analogWrite(motorPin, potValue); } ----------Estos ejercicios están disponibles en la web http://www.tecnosalva.com/pr%C3%A1cticas-3-y-4-arduino-control-motor-yservomotor - http://www.hispavila.com/3ds/atmega/introduino.html +info. sobre servomotores - http://robots-argentina.com.ar/MotorServo_basico.htm -