servo-cloud.ino

Particle Photon · Fichier : servo-cloud.ino · Langage : Arduino · Usage : Tourner un servo à distance avec une commande cloud

Le servo se tourne par simple appel cloud (Particle.function "tourner") et sa position reste lisible en variable. La routine de retour au centre après deux minutes montre comment donner une autonomie raisonnable à un actionneur connecté.

Matériel requis

Un module Particle Photon (Wi-Fi 2,4 GHz, microcontrôleur STM32, blindage métallique) alimenté par USB ou VIN. 1 servo d'angle (SG90) + alimentation externe 5 V conseillée.

Câblage

Signal du servo sur A1, + sur 5 V externe, - sur GND commun avec la carte.

Fonctionnement

La bibliothèque Servo génère l'impulsion 50 Hz ; tourner() valide la consigne 0-180, la pousse au servo et la renvoie au cloud. La variable position reste interrogable à tout moment.

Exécution

Avec le CLI Particle : particle flash --serial (mode DFU, double reset) ou flash OTA une fois la carte en ligne. Le mode Safe Mode (reset + WiFi) sert au dépannage.

Variantes

Ajouter des positions mémorisées ("home", "scan"), ou enchaîner une série de positions pour un geste répété.

servo-cloud.ino

// Servo d'angle sur A1, position commandee par Particle.function.
#include "Servo.h"

Servo myservo;
int position = 90;

int tourner(String args) {
  int v = args.toInt();
  if (v < 0 || v > 180) return -1;
  position = v;
  myservo.write(position);
  return position;
}

void setup() {
  myservo.attach(A1);   // signal du servo sur A1
  myservo.write(position);
  Particle.function("tourner", tourner);
  Particle.variable("position", position);
  Serial.begin(9600);
}

void loop() {
  // Petite routine : revenir au centre apres 2 min sans commande.
  static unsigned long dernierOrdre = 0;
  if (position != 90 && millis() - dernierOrdre > 120000) {
    dernierOrdre = millis();
    tourner("90");
  }
  // Met a jour la reference du temps a chaque commande recue.
  static int dernierePos = 90;
  if (position != dernierePos) {
    dernierePos = position;
    dernierOrdre = millis();
  }
}

// Commande : Particle.function "tourner" avec "45", "90", "135".

← Retour à la fiche