====== Telerobot ====== (projet démarré le 18 mai 2021) Humanisons la visioconférence grâce à un avatar élégant. Avec un photon, des servomoteurs, des leds, du wifi. Juste quelques bases pour le moment... Interface web : http://lesporteslogiques.net/telerobot/ ===== Étape 1 ===== Code photon tout moche (adapté depuis https://github.com/lesporteslogiques/atelier_ioc_2017/tree/master/mouvement_photon%2Bservo ) #define broche_bouton1 D4 #define broche_bouton2 D5 //servo1 sur D0 //servo2 sur D1 Servo servo1; Servo servo2; int position = 0; void setup() { servo1.attach(D0); servo1.write(90); // test servo2.attach(D1); servo2.write(90); // test pinMode(D7, OUTPUT); pinMode(broche_bouton1, INPUT); pinMode(broche_bouton2, INPUT); Particle.function("alarme", declencherAlarme); } int declencherAlarme(String commande) { if (commande == "m1gauche") { servo1.write(0); digitalWrite(D7, HIGH); delay(1000); servo1.write(90); digitalWrite(D7, LOW); } else if (commande == "m1droite") { servo1.write(180); digitalWrite(D7, HIGH); delay(1000); servo1.write(90); digitalWrite(D7, LOW); } else if (commande == "m2gauche") { servo2.write(0); digitalWrite(D7, HIGH); delay(1000); servo2.write(25); digitalWrite(D7, LOW); } else if (commande == "m2droite") { servo2.write(180); digitalWrite(D7, HIGH); delay(1000); servo2.write(90); digitalWrite(D7, LOW); } } void loop() { if (digitalRead(broche_bouton1) == HIGH) { servo1.write(25); digitalWrite(D7, HIGH); delay(100); servo1.write(90); digitalWrite(D7, LOW); delay(500); } if (digitalRead(broche_bouton2) == HIGH) { servo2.write(25); digitalWrite(D7, HIGH); delay(100); servo2.write(90); digitalWrite(D7, LOW); delay(1000); } } Peut-être remplacer par ce servo : https://www.dfrobot.com/product-1970.html \\ Et puis ça ne marche pas, il reçoit une instruction par le web et plante avec D7 allumée fixe, peut-être que 2 moteurs c'est trop de courant pour la broche ViN, solution élégante : en enlever un, ou ajouter une alim externe ===== Étape 2 ===== À peine mieux, avec un seul servo, ça plante et se bloque aussi, alors trop de courant demandé ou autre raison ? Problème de servomoteur ? #include // This #include statement was automatically added by the Particle IDE. #define BROCHE_BOUTON1 D4 #define BROCHE_BOUTON2 D5 #define BROCHE_LED D2 #define BROCHE_SERVO D0 #define PIXEL_COUNT 4 #define PIXEL_TYPE WS2812B Adafruit_NeoPixel strip(PIXEL_COUNT, BROCHE_LED, PIXEL_TYPE); Servo servo1; Servo servo2; int position = 0; long compteur = 0; long last_show = 0; void setup() { //servo1.attach(BROCHE_SERVO); //servo1.write(90); // test pinMode(D7, OUTPUT); pinMode(BROCHE_BOUTON1, INPUT); pinMode(BROCHE_BOUTON2, INPUT); strip.begin(); strip.show(); //Particle.function("alarme", declencherAlarme); } void loop() { /* if (digitalRead(BROCHE_BOUTON1) == HIGH) { servo1.write(25); digitalWrite(D7, HIGH); delay(300); servo1.write(90); digitalWrite(D7, LOW); delay(300); }*/ /* if (digitalRead(BROCHE_BOUTON2) == HIGH) { servo2.write(25); digitalWrite(D7, HIGH); delay(100); servo2.write(90); digitalWrite(D7, LOW); delay(1000); } */ if (millis() - last_show > 1000) { strip.setPixelColor(0, strip.Color(random(255), random(255), random(255))); strip.setPixelColor(3, strip.Color(random(255), random(255), random(255))); strip.setBrightness(200); strip.show(); last_show = millis(); } } /* int declencherAlarme(String commande) { if (commande == "m1gauche") { servo1.write(40); digitalWrite(D7, HIGH); delay(600); servo1.write(90); delay(600); digitalWrite(D7, LOW); } else if (commande == "m1droite") { servo1.write(140); digitalWrite(D7, HIGH); delay(600); servo1.write(90); delay(600); digitalWrite(D7, LOW); } }*/ Petite amélioration quand même, il prend corps : avec des leds pour éclairer les yeux, et un système pour les faire bouger mais foutraque et en plus qui s'autodétruit assez vite. {{:openatelier:projet:telerobot:protobot.jpg?direct&600|}} Mais c'est quand même beaucoup plus joli que https://www.youtube.com/watch?v=XEDgSblMb_4 ===== Étape 3 ===== La prochaine, pour l'instant une todolist * résoudre le problème principal * des sourcils mobiles le rendraient beaucoup plus expressif * cette bouche ne peut pas rester immobile ===== Ressources ===== photon datasheet : https://docs.particle.io/datasheets/wi-fi/photon-datasheet/ \\ Intro générale au circuit Photon : https://github.com/emoc/photon_introduction \\