Servo controlat amb entrada

Intentem utilitzar una entrada per tal de controlar el servo. En aquest exemple, utilitzarem un potenciòmetre.

Connecta el Pin central del potenciòmetre a l’entrada analògica A0. Connecta un dels altres Pins a 5V i l’últim Pin a terra (GND). Connecta un servo estàndard al Pin D9.

Puja el codi següent a la teva placa Arduino:

#include <Servo.h>

Servo myservo;

int potPin = A0;
int val;

void setup() {
myservo.attach(9);
}

void loop() {
val = analogRead(potPin);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}

A aquest exemple li hem afegit:

  • Dues variables: potpin és el número del Pin usat per al potenciòmetre i val per al valor de lectura des del potenciòmetre.
  • loop() comencem llegint el valor del potenciòmetre.
  • Els valors del potenciòmetre que llegim són de 0 a 1023, però necessitem valors de 0 a 180 per tal de controlar el servo. Per aconseguir-ho, utilitzem la funció
    map(value, fromLow, fromHigh, toLow, toHigh), que serveix per ajustar els valors al rang que podem utilitzar amb el servo. Això significa que si llegim 1023 al potenciòmetre n’obtindrem 180, si en llegim 511 n’obtindrem 90, etc.
  • Utilitzem una variable (val) per establir la posició del servo.
  • Utilitzem un petit delay per donar temps per girar al servo.

Continua experimentant!

  • Canvia el servo estàndard per un de gir continu. Usa el mateix codi, però suprimeix la funció delay. Puja’l i torna-ho a intentar. Com actuen els diferents servos i per què? Pensa per què la funció de delay és necessària quan es controla el servo estàndard però no ho és amb el continu.
  • Què més pots utilitzar per controlar els servos i què els pots afegir per tal que siguin més útils?