Ceci est une ancienne révision du document !


🆕 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/

Code photon tout moche (adapté depuis https://github.com/lesporteslogiques/atelier_ioc_2017/tree/master/mouvement_photon%2Bservo )

telerobot_001.phot (cliquer pour afficher le code)

telerobot_001.phot
#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

À peine mieux, avec un seul servo, ça plante et se bloque aussi, alors trop de courant demandé ou autre raison ? Problème de servomoteur ?

telerobot_002.phot (cliquer pour afficher le code)

telerobot_002.phot
#include <neopixel.h>  // 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.

La prochaine, pour l'instant une todolist

  • résoudre le problème principal
  • des sourcils mobiles le rendraient beaucoup plus expressifs
  • cette bouche ne peut pas rester immobile
  • openatelier/projet/telerobot.1622579834.txt.gz
  • Dernière modification: 2021/06/01 22:37
  • par emoc