Control con potenciómetro

Descrición:

Imos mover un servo en función da posición do cursor dun potenciómetro conectado a unha entrada analóxica.

Montaxe:

Conectamos o servo ao pin 9 e un potenciómetro á entrada analóxica A0

servo_potenciometro_bb servo_potenciometro_esquema

Programas:

1. control con map

1. control con map: Imos transformar o valor lido na entrada analóxica (pot) nun valor de xiro para o servo utilizando a función map.

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

// Declaración de variables

int pot=0;       // variable que le o valor do potenciómetro, entre 0 e 1023
int xiro=0;      // variable que enviamos ao servo, entre 0 e 180
Servo meuservo;

// Configuración

void setup(){
  meuservo.attach(9);    // Servo conectado no pin 9
  meuservo.write(xiro);    // Inicialmente na posición de 0º
}
 
// Programa:

void loop() {

  pot = analogRead(A0);          // Asignamos a variable "pot" ao valor lido en A0
  xiro = map(pot,0,1023,0,180);  // Calculamos o valor correspondente para o xiro
  meuservo.write(xiro);          // facemos xirar o servo ata a posición xiro 
  delay(20);  
            
}

2. control con variación

2. control con variación: Imos controlar o xiro do servo establecendo unha variación no ángulo de xiro no canto de facer a conversión desde o valor analóxico ao xiro. Deste xeito non controlamos con precisión a posición do servo, pero podemos movelo de forma máis fluída.

#include <Servo.h>  // Importamos a librería servo
 
// Declaración de variables:
 
Servo servo1;   
int pot;         // variable que le o valor do potenciómetro do eixe X, entre 0 e 1023
int xiro=90;     // variable que enviamos ao servo1, entre 0 e 180
 
int variacion=3;  // O valor que sumamos ou restamos ao xiro cada vez que se move o potenciómetro.
 
// Configuración:
 
void setup() {
  servo1.attach(6);     // Servo1 conectado no pin 6
  Serial.begin(9600);
}
 
// Programa:
 
void loop() {
 
  // Control do servo1 co potenciómetro do eixe X
  // A valores do EixeX menores que 400 desconta graos e a maiores de 600 aumenta os graos de xiro.
  
  pot = analogRead(A0);      // Asignamos a variable "pot" ao valor lido en A0
  
  if (pot<400){
    xiro=xiro-variacion;
    if(xiro<0){                 // Evitamos que o xiro que envíe sexa menor que cero.
      xiro=0;
    }
  }
  else if(pot>600){
    xiro=xiro+variacion;
    if (xiro>180){              // Evitamos que o xiro que envíe sexa maior que 180
      xiro=180;
    }
  }
  Serial.println("Xiro="+String(xiro));
  servo1.write(xiro);
  delay(50);                    // Con este tempo establecemos a velocidade
 
}

Proposta:

  • Ventá automática: Supón que a apertura dunha ventá está controlada por un servo de xeito que cando hai moita luz no exterior a ventá se pecha e cando hai pouca se abre, mantendo sempre unha luminosidade constante no interior. Conecta unha LDR nunha entrada analóxica e fai que un servo de mova en función da luz incidente.

 


Deixa un comentario