Blog Detail

IMG_20160521_182618

Servo-motores y Resolución Angular

22 May , 2016,
Jose Nunez
No Comments

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);
  }
}

731 total views, 1 views today

Leave A Comment