Para esto necesitamos lo siguiente:
- Tarjeta Arduino
- 3 Cables de protoboard, yo utilizo uno rojo para el positivo +5v, uno café para el GND y uno azul para la conexión de datos.
- 1 servo motor
Primero debemos hacer las conexiones adecuadas para hacer que el ejemplo funcione.
Basándonos en los colores de cables de la foto:
El cable rojo lo conectas al rojo del motor,
El cable café lo conectas al café del motor,
El cable azul lo conectas al naranjo,
Después conectas estos cables así:
El cable rojo a los +5v de la tarjeta
El cable café al GND de la tarjeta
El cable azul al pin 9
Ahora, conecta la tarjeta al conector USB y abre el IDE de desarrollo de Arduino.
En el menú anda a Archivo->Ejemplos->Servo y abre Sweep
Por último Carga el programa y listo!
El programa:
En si lo que hace este ejemplo es hacer girar el servo motor 180º hacia un lado y después 180º hace el lado contrario.
Para eso hace uso del pin 9 como salida y así enviar los datos al servomotor.
El programa viene convenientemente comentado para entender el funcionamiento de las lineas programadas.
Muy buen trabajo!! ayuda a los que aprendemos. Gracias por compartirlo.Un abrazo
ResponderEliminarHola, tengo un arduino uno y un servomotor Tower Pro SG92R y cuando conecto se para lentamente, suena como si se moviera pero no lo hace.
ResponderEliminarMuchas gracias!
como es la programacion?
ResponderEliminarcomo es la programacion?
ResponderEliminar#include
Eliminar//Creamos una variable servo para poder usar las funciones con ella.
Servo servoma ;
void setup()
{
//Definimos el pin al que ira conectado el servo.
servoma.attach(9);
servoma.write(90);
}
void loop() {
//Lo llevamos a un extremo
servo.write(80); //Le damos tiempo a llegar a esa posicion
delay(500); //Lo volvemos a centrar
servo.write(90); //Le damos tiempo a llegar a esa posicion
delay(500); //Lo llevamos al otro extremo
servo.write(180);
}
mucho depende de la programacion o el uso que le vallas a dar pero esta es una muy general espero que te sirva ... :D
hola! soy novato y trasteando con el proyecto evilgenius 25 (laser servocontrolado) he intentado que repita el skech un numero determinado de veces sin exito.
ResponderEliminarpodríais decirme como modificarlo para que repita la secuencia que le introduzco en el monitor serial?
aqui esta el skech
#include
int laserPin = 4;
Servo servoV;
Servo servoH;
int x = 90;
int y = 90;
int minX = 10;
int maxX = 170;
int minY = 50;
int maxY = 130;
void setup()
{
servoH.attach(3);
servoV.attach(2);
pinMode(laserPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
char ch;
if (Serial.available())
{
ch = Serial.read();
if (ch == '0')
{
digitalWrite(laserPin, LOW);
}
else if (ch == '1')
{
digitalWrite(laserPin, HIGH);
}
else if (ch == '-')
{
delay(100);
}
else if (ch == 'c')
{
x = 90;
y = 90;
}
else if (ch == 'l' || ch == 'r' || ch == 'u' || ch == 'd')
{
moveLaser(ch, 1);
}
else if (ch == 'L' || ch == 'R' || ch == 'U' || ch == 'D')
{
moveLaser(ch, 5);
}
}
servoH.write(x);
servoV.write(y);
}
void moveLaser(char dir, int amount)
{
if ((dir == 'r' || dir == 'R') && x > minX)
{
x = x - amount;
}
else if ((dir == 'l' || dir == 'L') && x < maxX)
{
x = x + amount;
}
else if ((dir == 'u' || dir == 'U') && y < maxY)
{
y = y + amount;
}
else if ((dir == 'd' || dir == 'D') && x > minY)
{
y = y - amount;
}
}
Gracias de antemano y saludos!
quisiera saber que significa AMOUNT
ResponderEliminar#include
ResponderEliminar#include
Servo myServo;
void setup()
{
pinMode(13,OUTPUT);//Seleccionamos el pin 13 como salida
Serial.begin(9600);//Inicializamos el valor de transmisión.
}
void loop()
{
while (Serial.available())//Declaramos un sentencia, Mientras el puerto Serial este disponible se empieza el ciclo
{
char dato= Serial.read(); //Declaramos una variable de tipo carácter y Seo lee la variale enviada desde el Bluetooth.
digitalWrite(13,LOW); //Indicamos que en el puerto 13 la señal será baja por lo que el LED estará apagado.
switch(dato)
{
case 'A': //Si en el caso de ser A la varible enviada, entonces:
{
digitalWrite(13,HIGH);//La señal será alta, encenderá el LED.
Serial.println("servo90");//Se mostrará un mensaje.
myServo.write(90)
break;//El caso se detiene.
}
case 'B': //Si en el caso de ser A la variable enviada, entonceS:
{
digitalWrite(13,LOW);//la señal será baja por lo que el LED estará apagado.
Serial.println("servo0");//Se mostrará un mensaje.
myServo.write(90)
break;
}
}
}
}
sale un error de expected ';' before '}' token ayudaaaaaa
Prueba con esto
ResponderEliminar#include
Servo myServo;
void setup()
{
pinMode(13,OUTPUT);//Seleccionamos el pin 13 como salida
Serial.begin(9600);//Inicializamos el valor de transmisión.
}
void loop()
{
while (Serial.available())//Declaramos un sentencia, Mientras el puerto Serial este disponible se empieza el ciclo
{
char dato= Serial.read(); //Declaramos una variable de tipo carácter y Seo lee la variale enviada desde el Bluetooth.
digitalWrite(13,LOW); //Indicamos que en el puerto 13 la señal será baja por lo que el LED estará apagado.
switch(dato)
{
case 'A': //Si en el caso de ser A la varible enviada, entonces:
{
digitalWrite(13,HIGH);//La señal será alta, encenderá el LED.
Serial.println("servo90");//Se mostrará un mensaje.
myServo.write(90);
break;//El caso se detiene.
}
case 'B': //Si en el caso de ser A la variable enviada, entonceS:
{
digitalWrite(13,LOW);//la señal será baja por lo que el LED estará apagado.
Serial.println("servo0");//Se mostrará un mensaje.
myServo.write(90);
break;
}
}
}
}
Julio solicito tu apoyo. tengo un carro robot que he llegado a desarrollar haciendo modificaciones a un proyecto que encontré en protoboard con 2 ruedas, lo pude acoplar a 4 con control remoto via bluetooh y sensor ultrasonido, el detalle es que quiero agregarle un servo SG90 y cuando le he agregado el código solo funciona el servo y el carro se inmoviliza y no me lo deja controlar por bluetooh, podrías aportarme tus ayuda. Gracias.
ResponderEliminarAquí mi código (Tengo disponibles las salidas digitales 4,7,8,11,12 y13)
PD. Nose mucho de programación solo lo básico y arduino es un proyecto que hice para la universidad. El código modificado que adjunto me tomó varios días adaptarlo para que el carro funcione
Este comentario ha sido eliminado por el autor.
ResponderEliminar1ra Parte del código
ResponderEliminar#include // Incluye la libreria Servo
Servo servo1; // Crea el objeto servo1 con las caracteristicas de Servo
int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 250; // Velocidad de los motores (0-250)
int veldis = 150; // Velocidad de los motores (0-150), bajar velocidad
int estado = 'g'; // inicia detenido
int pecho = 2; // define el pin 2 como (pecho) para el Ultrasonido
int ptrig = 3; // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia; // para Calcular distancia
void setup() {
servo1.attach(11,600,1500); // Asocia el servo1 al pin 3, define el min y max del ancho del pulso
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
pinMode(pecho, INPUT); // define el pin 2 como entrada (pecho)
pinMode(ptrig,OUTPUT); // define el pin 3 como salida (ptrig)
pinMode(13,OUTPUT);
}
2da parte del código
ResponderEliminarvoid loop() {
servo1.write(0); // Gira el servo a 0 grados
delay(700); // Espera 700 mili segundos a que el servo llegue a la posicion
servo1.write(90); // Gira el servo a 90 grados
delay(700);
servo1.write(180); //Gira el servo a 180 grados
delay(700);
if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
//Giro de llantas derechas
analogWrite(izqB, 0);
analogWrite(derB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
delay(10);
// Giro de llantas izquierdas
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(izqB, 0);
analogWrite(derB, vel);
delay(10);
}
3ra parte del código
ResponderEliminarif(estado=='b'){ // Boton desplazar Izquierda
analogWrite(izqB, 0);
analogWrite(derB, 0);
analogWrite(derA, 0);
analogWrite(izqA, veldis); //Giro de llantas derechas
delay(20);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton desplazar Derecha
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(izqB, 0);
analogWrite(derB, veldis); // Giro de llantas izquierdas
delay(20);
}
if(estado=='e'){ // Boton modo Reversa
//Giro de llantas derechas
analogWrite(izqB, vel);
analogWrite(derB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay(0.02);
// Giro de llantas izquierdas
analogWrite(derA, vel);
analogWrite(izqA, 0);
analogWrite(izqB, 0);
analogWrite(derB, 0);
delay(0.02);
}
if (estado =='f'){ // Boton ON, se mueve sensando distancia
digitalWrite(ptrig, HIGH); // genera el pulso de trigger por 10us
delay(0.01);
digitalWrite(ptrig, LOW);
duracion = pulseIn(pecho, HIGH); // Lee el tiempo del Echo
distancia = (duracion/2) / 29; // calcula la distancia en centimetros
delay(10);
if (distancia <= 30 && distancia >=2){ // si la distancia es menor de 30cm
digitalWrite(13,LOW); // Enciende LED
analogWrite(derB, 0); // Parar los motores por 200 mili segundos
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay (200);
analogWrite(izqB, vel); // Reversa durante 500 mili segundos
analogWrite(derB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay(0.10);
analogWrite(derA, vel);
analogWrite(izqA, 0);
analogWrite(izqB, 0);
analogWrite(derB, 0);
delay(0.10);
analogWrite(derA, 0); // Girar durante 1100 milisegundos
analogWrite(izqA, 0);
analogWrite(izqB, vel);
analogWrite(derB, vel);
delay(150);
digitalWrite(13,LOW);
}
else{ // Si no hay obstaculos se desplaza al frente
analogWrite(izqB, 0);
analogWrite(derB, 0);
analogWrite(derA, 0);
analogWrite(izqA, veldis);
delay(25);
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(izqB, 0);
analogWrite(derB, veldis);
delay(25);
}
}
if(estado=='g'){ // Boton OFF, detiene los motores no hace nada
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
}