servo-cloud.ino
El servo gira con una simple llamada a la nube (Particle.function "tourner") y su posición queda legible como variable. La rutina de volver al centro tras dos minutos muestra cómo dar autonomía razonable a un actuador conectado.
Hardware
Un módulo Particle Boron (nRF52840, Wi-Fi + Bluetooth LE, variante celular si procede) con antena integrada. 1 servo de ángulo (SG90) + alimentación externa de 5 V aconsejada.
Cableado
Señal del servo a A1, + a 5 V externo, - a GND común con la placa.
Funcionamiento
La librería Servo genera el impulso de 50 Hz; tourner() valida la consigna 0-180, la envía al servo y la devuelve a la nube. La variable position sigue siendo consultable en cualquier momento.
Ejecución
Instala el CLI de Particle (particle setup), graba con particle flash --serial u OTA (particle flash <nombre> firmware.bin). La app Device Cloud o la API REST completan el despliegue.
Variantes
Añadir posiciones memorizadas ("home", "scan"), o encadenar una serie de posiciones para un gesto repetido.
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".