Servo motor 9g Tower Pro

El Servo motor Tower Pro 9g, no gira 360 grados. Y como todo servomotor, no se utiliza para hacer girar cosas (ruedas, por ejemplo) sino para que se mueva a un ángulo determinado (como un brazo): 0, 90, 180, etc.

Tower Pro Micro Servo 9g

Este es el esquema de conexiones del Micro servo 9g Tower pro (Atención: si se conecta mal, se quema. Ya se me quemaron 2 dando clases…)

  • cable anaranjado: va a un pin de tipo PWD (los de la tilde de la eñe)
  • cable color marrón: GND (tierra)
  • cable color rojo: +5v

Con este código se lo puede hacer funcionar, conectando el cable naranja en el pin 9:

#include <Servo.h>

Servo servo1;

void setup() {
Serial.begin(9600);
servo1.attach(9);

}

void loop() {
servo1.write(0);
delay(1000);
servo1.write(90);
delay(1000);
servo1.write(180);
delay(1000);
}

Allí se utiliza la librería Servo.h, y se crea una instancia llamada “servo1”. Después se le indica que servo1 está conectado al pin 9. Luego se envía a la posición 0 (mediante la orden “servo1.write(0)“), a la posición 90, y a la posición 180. Entre uno y otro paso espera un segundo, con delay(1000)

Entre los ejemplos que vienen en el Arduino IDE hay uno interesante que muestra cómo mover lentamente el servomotor utilizando un bucle:

/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.

modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0; // variable to store the servo position

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

Al ejecutar este código, ocurre lo siguiente:

Un semáforo para invidentes en Arduino

El próximo sábado se realizará el primer encuentro(*) del taller de Arduino en el Centro Cultural Tierra Violeta.

Además de ver un marco teórico acerca de qué es la robótica, la idea es hacer un semáforo con sonido, similar a los semáforos para invidentes que se instalaron ya en algunas ciudades.

[Ver video 1 en youtube] [Ver video 2 en youtube]

Ejercicio de Arduino: semáforo para invidentes

Para ello vamos a usar tres leds, uno verde, otro amarillo y uno rojo. Los tres con sus respectivas resistencias y su conexión a un pin digital en el Arduino.

Comparto aquí el código:

//Les ponemos nombre a los numeros a traves de variables
int verde = 13;
int amarillo = 8;
int rojo=12;
int buzzer=9;
// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(verde, OUTPUT);
  pinMode(amarillo, OUTPUT);
  pinMode(rojo, OUTPUT);
  pinMode(buzzer, OUTPUT); // Set buzzer – pin 9 as an output
}
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(verde, HIGH);   // encender verde
  digitalWrite(amarillo, LOW); // apagar amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  for (int i = 0; i < 10; i++) {
       tone(buzzer, 500); // encencer sonido
       delay(200);               // esperar 200 milisegundos
       noTone(buzzer); // apagar sonido
       delay(100); // esperar 100 milisegundos
  }
  digitalWrite(verde, LOW);    // apagar verde
  digitalWrite(amarillo, HIGH); // encender amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  delay(500);               // esperar medio segundo
  digitalWrite(verde, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(amarillo, LOW);
  digitalWrite(rojo, HIGH);
  delay(2000);               // esperar dos segundos
  digitalWrite(verde, LOW);    // // apagar verde
  digitalWrite(amarillo, HIGH); // encender amarillo
  digitalWrite(rojo, LOW); // apagar rojo
  delay(500);               // esperar medio segundo
}

(*) El sábado pasado realizamos un primer encuentro pero como coincidió la fecha con otros eventos tuvimos pocas asistentes. Decidimos repetir el encuentro número 1, y hacer otro día el encuentro 2.