servo-angle.ino

Teensy 3.2 · Archivo : servo-angle.ino · Lenguaje : Arduino · Uso : Piloter un servo avec la bibliothèque Servo sur Teensy

Combo típico de Teensy: un toque capacitivo controla la velocidad de un servo de ángulo. La librería Servo del core funciona igual que en los Arduino, y touchRead() da un valor proporcional al contacto para una variación orgánica.

Hardware

Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, lógica de 3,3 V) alimentado por USB. 1 servo de ángulo (SG90/MG90S) + cable pelado para el toque capacitivo.

Cableado

Servo: señal al pin 9, + a 5 V (alimentación externa aconsejada), - a GND común. Toque: cable pelado en el pin 0.

Funcionamiento

touchRead() crece con la superficie de contacto; map() lo convierte en velocidad de giro y constrain() limita el ángulo a 0-180°. El servo recibe la posición cada 20 ms.

Ejecución

Instala el plugin Teensyduino en el Arduino IDE, elige la placa « Teensy 3.2 », pulsa Subir y luego el botón del Teensy Loader. Atención: pines de 3,3 V.

Variantes

Sustituye el toque por un potenciómetro, o añade un modo «volver al centro» tras 5 s sin contacto.

servo-angle.ino

// Servo d'angle commande par une touche capacitive (combo Teensy).
#include <Servo.h>

Servo myservo;
const int TOUCHE = 0;
const int SEUIL = 500;

int angle = 90;
unsigned long derniereEtape = 0;

void setup() {
  myservo.attach(9); // signal servo sur la broche 9
  myservo.write(angle);
  Serial.begin(9600);
  Serial.println(F("Touche capacitive = vitesse angulaire"));
}

void loop() {
  if (millis() - derniereEtape < 20) return;
  derniereEtape = millis();

  int t = touchRead(TOUCHE);
  if (t > SEUIL) {
    // Plus le contact est grand, plus l'angle tourne vite.
    int vitesse = map(t, SEUIL, 1024, 1, 6);
    angle = constrain(angle + vitesse, 0, 180);
    if (angle == 180) angle = 0; // rebouclage en douceur
    myservo.write(angle);
    Serial.print(F("touche=")); Serial.print(t);
    Serial.print(F(" angle=")); Serial.println(angle);
  }
}

← Volver a la ficha