servo-cloud.ino
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".