Recientemente estuve jugando con unos servos para un proyecto que requiere hacer que el servo se mueva «grado por grado» desde cero hasta 180 grados.
Descubrí que de los 0º a los 10° no parece ocurrir movimiento alguno, así que por accidente descubrí que los servos comerciales que compré no tienen una resolución menor a 10 grados.
El siguiente sketch de Arduino hace ese barrido desde los 0º a los 180° en cámara lenta, de forma que nos permite ver de manera experimental cual es la resolución de un servo determinado.
En mi caso, al parecer el servo que tengo tiene una resolución de aproximadamente 7°, lo que quiere decir que si le pido una posición que no dista más de 7 grados de la posición actual, el servo no se moverá.
#include
#include "rgb_lcd.h"
#define trigger 2
#define echo 7
#define led 13
rgb_lcd lcd;
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
void setup()
{
Serial.begin(9600);
Serial.println("SETUP");
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.setRGB(50,50,50);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(13,OUTPUT);
myservo.attach(3); // attaches the servo on pin 9 to the servo object
myservo.write(0);
Serial.println("SETUP COMPLETE!");
}
void loop()
{
Serial.println("BEGINING SCAN...");
blinkEffect(3,500);
Serial.println("SCANNING...");
for(int i=0; i<=180; i++){
Serial.print("ANGLE: ");
Serial.println(i);
lcd.setCursor(0,0);
lcd.print("ANGLE: ");
lcd.print(i);
lcd.print(" ");
myservo.write(i);
delay(1000);
}
}
void blinkEffect(int times, int duration){
for(int i=0; i<3; i++){
digitalWrite(led,HIGH);
delay(duration);
digitalWrite(led,LOW);
delay(duration);
}
}
7,217 total views, 1 views today
Comentarios