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
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.