A posición dun servo

[tecnoloxia.org CC By-SA]

mini-servo-tower-pro-sg90Descrición:

Imos controlar a posición dun servo de rotación estándar mediante programación.

Utilizaremos un microservo SG90

Montaxe:

Conexión: Aínda que depende de cada fabricante, en xeral o cable vermello vai a 5V, o negro/marrón a terra (GND) e o branco/amarelo/laranxa é o que recibe o sinal do pin arduino. Imos conectalo ao pin 9.

  servo1_esquema

Se no canto dun microservo utilizas un servo máis potente non o conectes aos 5V da placa e utiliza alimentación externa.

Control da posición:

A posición do servo contrólase a través do envío de pulsos en anchura (PWM). Segundo a duración do pulso obtemos diferentes posicións do eixe do servo. Porén, dependendo do servo que se utilice e do ciclo útil do mesmo podemos necesitar realizar cálculos para axustar a posición.

servo_diagram-svg
[Stefantauner, wikimedia, CC By SA]

Programación:

#include <Servo.h> Inclúe a librería “servo” para poder utilizar as funcións que contén.
Sketch -> Importar Libraría -> Servo
Servo meuservo; Crea unha variable co nome do servo
meuservo.attach(Pin); Indica en que pin está conectado o servo.
meuservo.write(ángulo); Sitúa o eixe do servo na posición indicada.

Programas:

1. Xirar un ángulo

1. Xirar un ángulo determinado: Podemos controlar exactamente a posición (ángulo) que queremos que teña o servo en cada momento

// Importamos a librería servo
#include <Servo.h>

// Declaración de variables:
Servo meuservo;         // poñémoslle nome ao servo: "meuservo"

// Configuración:
void setup(){
  meuservo.attach(6);   // Indicamos que está conectado no pin 6
}

// Programa:
void loop(){
  meuservo.write(0);    // Móvese ata a posición de 0º
  delay (2000);
  meuservo.write(180);  // Móvese ata a posición de 180º
  delay (2000);
  meuservo.write(90);   // Móvese ata a posición de 90º
  delay (2000);  
}

2. Pouco a pouco

2. Pouco a pouco: Imos facer que un servo xire lentamente ata unha posición e despois cambie rapidamente á posición de partida.

#include <Servo.h>   // Importamos a librería servo

// Declaración de variables:

Servo meuservo;      // poñémoslle nome ao servo: "meuservo"

// Configuración:

void setup(){
  meuservo.attach(6);   // Indicamos que está conectado no pin 6
}

// Programa:

void loop(){

  meuservo.write(0);         // Parte da posición de 0º
  delay (2000);
  for(int i=1;i<=120;i++){   // Móvese pouco a pouco ata 120º
   meuservo.write(i);       
   delay (50);
  }
  delay (1000); 
 
}

3. Control con pulsadores

3. Control con pulsadores: imos facer que cada vez que prememos nun pulsador o servo se mova ata a posición correspondente a cada un deles.

#include <Servo.h>   // Importamos a librería servo

// Declaración de variables:

int pulsador0 = 2;       // Pin 2 asignado a un pulsador 
int pulsador180 = 3;     // Pin 3 asignado a outro pulsador
Servo meuservo;          // Poñémoslle nome ao servo

// Configuración:

 void setup() {
  meuservo.attach(6);  // Servo conectado no pin 6
}

// Programa:
 
void loop() {

  if (digitalRead(pulsador0) == 1){     // Se o pulsador0 esta premido
    meuservo.write(0);                  // O servo xira ata a posición 0º
    delay (500);
  }
  if (digitalRead(pulsador180) == 1){   // Se o pulsador180 esta premido
    meuservo.write(180);                // O servo xira ata a posición 180º
    delay (500);
  } 

}

Propostas:

  1. Ao chou: Fai un programa de xeito que o servo xire a distintas posicións elixidas ao chou. Utiliza a función random. Por exemplo:
     chou=random(0,180);  // dá un valor ao aleatorio entre 0 e 180.
  2. Cal é a súa posición?: Engade o necesario aos programas anteriores para visualizar na consola a posición na que se atopa o servo.
  3. Pouco a pouco: Fai un programa que funcione de xeito que cando prememos nun pulsador o servo xira 10º nun sentido e cando prememos noutro pulsador xira 10º en sentido contrario. Introduce os límites de 0 e 180º.

Extras:

  1. Orientación automática. Fai unha placa solar que se oriente automaticamente cara onde maior sexa a luminosidade. Utiliza dúas fotorresistencias para medir a luz nos laterais. Un servo fará xirar a placa no sentido axeitado ata que a luz incidente sexa a mesma nas dúas LDRs (ou nun rango próximo).

Deixa un comentario