servo-angle.ino

Teensy 4.0 · Fichier : servo-angle.ino · Langage : Arduino · Usage : Piloter un servo avec la bibliothèque Servo sur Teensy

Combo typique Teensy : une touche capacitive pilote la vitesse d'un servo d'angle. La bibliothèque Servo du core fonctionne à l'identique des Arduino, et touchRead() fournit une valeur proportionnelle au contact pour une variation organique.

Matériel requis

Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V) alimenté par USB. 1 servo d'angle (SG90/MG90S) + fil nu pour la touche capacitive.

Câblage

Servo : signal sur 9, + sur 5 V (alimentation externe conseillée), - sur GND commun. Touche : fil nu sur la broche 0.

Fonctionnement

touchRead() augmente avec la surface de contact ; map() convertit en vitesse de rotation, constrain() borne l'angle à 0-180°. Le servo reçoit la position courante toutes les 20 ms.

Exécution

Avec Teensyduino dans l'Arduino IDE, choisir « Teensy 4.0 », Téléverser puis valider dans le Teensy Loader. Les broches sont en 3,3 V ; le 4.0 est pin-compatible avec le 3.2.

Variantes

Remplacer la touche par un potentiomètre, ou ajouter un mode « retour au centre » après 5 s sans contact.

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);
  }
}

← Retour à la fiche