Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
openatelier:projet:tete_animatronique [2023/06/14 15:53]
emoc [Montage]
openatelier:projet:tete_animatronique [2023/06/16 21:57] (Version actuelle)
emoc [Prototype 1]
Ligne 464: Ligne 464:
  
 Source du schĂ©ma : https://​learn.adafruit.com/​adafruit-16-channel-servo-driver-with-raspberry-pi/​hooking-it-up Source du schĂ©ma : https://​learn.adafruit.com/​adafruit-16-channel-servo-driver-with-raspberry-pi/​hooking-it-up
 +
 +Pour le brochage du Raspberry Pi 4, voir : https://​lesporteslogiques.net/​wiki/​materiel/​raspberry_pi/​start#​raspberry_pi_4_model_b
  
 === PrĂ©paration du Raspberry Pi pour I2C === === PrĂ©paration du Raspberry Pi pour I2C ===
  
 Installation de paquets Installation de paquets
-  sudo apt-get install -y python-smbus +  sudo apt-get install -y python-smbus ​ # support d'I2C dans python 
-  sudo apt-get install -y i2c-tools+  sudo apt-get install -y i2c-tools ​    # entre autre pour scanner le port I2C
 Configurer le support par le kernel Configurer le support par le kernel
   sudo raspi-config # choisir interface options/​I2C/​activer l'​interface   sudo raspi-config # choisir interface options/​I2C/​activer l'​interface
- +Puis redĂ©marrer 
 +  sudo reboot 
 + 
 +Ensuite on peut tester que le module PCA9685 est bien branché 
 +  sudo i2cdetect -y 1  # Le port I2C numĂ©ro 1 est utilisĂ© sur les rpi > 512 MB de RAM 
 +Ce qui devrait afficher (les adresses des ports utilisĂ©s sont indiquĂ©es) 
 + 
 +{{:​openatelier:​projet:​tete_animatronique:​i2cdetect_resultat.png|}}
  
 ==== Circuit complet ==== ==== Circuit complet ====
Ligne 498: Ligne 507:
 # Set channels to the number of servo channels on your kit. # Set channels to the number of servo channels on your kit.
 # 8 for FeatherWing,​ 16 for Shield/​HAT/​Bonnet. # 8 for FeatherWing,​ 16 for Shield/​HAT/​Bonnet.
-kit = ServoKit(channels=8)+kit = ServoKit(channels=16)
  
 kit.servo[0].angle = 180 kit.servo[0].angle = 180
Ligne 511: Ligne 520:
 </​accordion>​ </​accordion>​
  
 +==== Test des servomoteurs ====
 +
 +DĂ©finir sur quelles broches sont reliĂ©s les servomoteurs,​ fixer minimum et maximum pour chacun.
 +
 +<​accordion>​
 +<panel title="​test_python_pca9685_servomoteurs.py (cliquer pour afficher le code)">​
 +<code python test_python_pca9685_servomoteurs.py>​
 +import time
 +from adafruit_servokit import ServoKit
 +
 +# Set channels to the number of servo channels on your kit.
 +# 8 for FeatherWing,​ 16 for Shield/​HAT/​Bonnet.
 +kit = ServoKit(channels=16)
 +
 +# Correspondances (gauche/​droite pour la tĂŞte)
 +# commands du cĂ´tĂ© droit inversĂ©es
 +# 0 : sourcil gauche (50, 135)
 +# 1 : sourcil droit (inv) (135, 50)
 +# 2 : machoire basse            (?, ?)
 +# 3 : oeil gauche (50,​ 130)
 +# 4 : oeil droit   ​ (50,​ 130)
 +# 5 : paupière gauche () PROBLEME
 +# 6 : paupière droite () ​  ​ PROBLEME
 +# 7 : bouche gauche (50,​ 110)   PROB : refaire mĂ©canisme
 +# 8 : bouche droite (inv) (110,​ 50)   PROB : refaire mĂ©canisme
 +# 9 : yeux (50,​ 130)
 +
 +for boucle in range(0, 3) :
 + kit.servo[0].angle = 135
 + kit.servo[1].angle = 50
 + kit.servo[2].angle = 50
 + kit.servo[3].angle = 130
 + kit.servo[4].angle = 130
 + # ~ kit.servo[5].angle = 80
 + # ~ kit.servo[6].angle = 80
 + kit.servo[7].angle = 50
 + kit.servo[8].angle = 110
 + kit.servo[9].angle = 50
 + time.sleep(1)
 +
 + kit.servo[0].angle = 50
 + kit.servo[1].angle = 135
 + kit.servo[2].angle = 120
 + kit.servo[3].angle = 50
 + kit.servo[4].angle = 50
 + # ~ kit.servo[5].angle = 100
 + # ~ kit.servo[6].angle = 100
 + kit.servo[7].angle = 110
 + kit.servo[8].angle = 50
 + kit.servo[9].angle = 130
 + time.sleep(1)
 +
 + kit.servo[0].angle = 90
 + kit.servo[1].angle = 90
 + kit.servo[2].angle = 90
 + kit.servo[3].angle = 90
 + kit.servo[4].angle = 90
 + # ~ kit.servo[5].angle = 90
 + # ~ kit.servo[6].angle = 90
 + kit.servo[7].angle = 90
 + kit.servo[8].angle = 90
 + kit.servo[9].angle = 90
 + time.sleep(2)
 +</​code>​
 +</​panel>​
 +</​accordion>​
 +
 +==== Expressions ====
 +
 +Test de quelques expressions du visage animatronique
 +
 +<​accordion>​
 +<panel title="​expressions.py (cliquer pour afficher le code)">​
 +<code python expressions.py>​
 +import time
 +from adafruit_servokit import ServoKit
 +
 +# Set channels to the number of servo channels on your kit.
 +# 8 for FeatherWing,​ 16 for Shield/​HAT/​Bonnet.
 +kit = ServoKit(channels=16)
 +
 +# Correspondances (gauche/​droite pour la tĂŞte)
 +# commands du cĂ´tĂ© droit inversĂ©es
 +# 0 : sourcil gauche (50, 135)
 +# 1 : sourcil droit (inv) (135, 50)
 +# 2 : machoire basse            (?, ?)
 +# 3 : oeil gauche (50,​ 130)
 +# 4 : oeil droit   ​ (50,​ 130)
 +# 5 : paupière gauche () PROBLEME
 +# 6 : paupière droite () ​  ​ PROBLEME
 +# 7 : bouche gauche (50,​ 110)   PROB : refaire mĂ©canisme
 +# 8 : bouche droite (inv) (110,​ 50)   PROB : refaire mĂ©canisme
 +# 9 : yeux (50,​ 130)
 +
 +def moue():
 + kit.servo[0].angle = 50
 + kit.servo[1].angle = 135
 + kit.servo[2].angle = 120
 + kit.servo[3].angle = 70
 + kit.servo[4].angle = 110
 + # ~ kit.servo[5].angle = 100
 + # ~ kit.servo[6].angle = 100
 + kit.servo[7].angle = 110
 + kit.servo[8].angle = 50
 + kit.servo[9].angle = 130
 + time.sleep(2)
 +
 +def sleep():
 + kit.servo[0].angle = 90
 + kit.servo[1].angle = 90
 + kit.servo[2].angle = 90
 + kit.servo[3].angle = 90
 + kit.servo[4].angle = 90
 + # ~ kit.servo[5].angle = 90
 + # ~ kit.servo[6].angle = 90
 + kit.servo[7].angle = 90
 + kit.servo[8].angle = 90
 + kit.servo[9].angle = 90
 + time.sleep(2)
 +
 +def louche():
 + kit.servo[0].angle = 135
 + kit.servo[1].angle = 50
 + kit.servo[2].angle = 120
 + kit.servo[3].angle = 130
 + kit.servo[4].angle = 50
 + # ~ kit.servo[5].angle = 100
 + # ~ kit.servo[6].angle = 100
 + kit.servo[7].angle = 110
 + kit.servo[8].angle = 50
 + kit.servo[9].angle = 130
 + time.sleep(2)
 +
 +louche()
 +moue()
 +sleep()
 +louche()
 +sleep()
 +
 +</​code>​
 +</​panel>​
 +</​accordion>​
 +
 +==== RĂ©ception OSC ====
 +
 +Trouver l'​adresse IP du RPi
 +  hostname -I
 +Pour tester la rĂ©ception OSC : Ă©couter le traffic sur le port UDP 12345
 +  nc -l -u 12345
 +Version du système/​kernel installĂ©
 +  hostnamectl
 +  ​
 +Installer python OSC : pip3 install python-osc
 ==== Communication sĂ©rie avec le joystick arduino ==== ==== Communication sĂ©rie avec le joystick arduino ====
  
Ligne 654: Ligne 816:
 {{:​openatelier:​projet:​tete_animatronique:​20230302_barbichette.jpg?​direct&​1200|}} {{:​openatelier:​projet:​tete_animatronique:​20230302_barbichette.jpg?​direct&​1200|}}
  
 +**14 juin 2023** : Ă©lectronique ok, prototype construit et actionnĂ© par script python depuis le raspberry, une vidĂ©o des premiers essais d'​expression
 +
 +{{:​openatelier:​projet:​tete_animatronique:​barbichette_20230614_175450.jpg?​direct&​800|}}{{:​openatelier:​projet:​tete_animatronique:​20230614_barbichette_prototype.mp4|}}
 +
 +**15 juin 2023** scripts (Ă  renommer en .gz) {{ :​openatelier:​projet:​tete_animatronique:​20230615_scripts_barbichette.gz.txt |}}
 +
 +==== Prototype 1 ====
 +
 +**16 juin 2023** scripts : {{ :​openatelier:​projet:​tete_animatronique:​20230616_scripts.gz.txt |}} (Ă  renommer en .gz)
 +
 +Quelques dĂ©tails :
 +
 +**ui_servo_expressions.py** contrĂ´le par interface graphique (sliders, etc.) des servomoteurs de la tĂŞte animatronique
 +
 +**osc_envoi_simulation.py** simulation d'​envoi OSC (utile si l'ordi de dĂ©tection n'est pas reliĂ©)
 +
 +**osc_reception_test.py** vĂ©rification que les messages OSC sont bien reçus (pas d'​action sur les servos)
 +
 +**osc_reception_tracking_visage.py** script principal, reçoit les messages envoyĂ©s par l'ordi de dĂ©tection et agit sur les servos en consĂ©quence
 +
 +**serie_read_test.py** rĂ©ception des messages sĂ©rie d'​arduino
 +
 +**servo_expressions.py** (obsolète) quelques tests d'​expressions
 +
 +**servo_paupieres_test.py** (test seulement)
 +
 +**servo_pca9685_test.py** (test seulement, I2C)
 +
 +Parfois une erreur 121 dans I2C / Rpi / Python
 +  * bus overloadĂ©
 +  * fils trop longs (30cm max pour I2C, capacitance maximum de 400 pF dĂ©passĂ©e)
 +  * pull ups trop forts (il y a dĂ©jĂ  des pull-ups dans les broches GPIO du Pi) -> supprimer ceux de la carte
 +  * cf. https://​raspberrypi.stackexchange.com/​questions/​124453/​error-121-remote-i-o-error-in-smbus-py-call
 +
 +Et quelques notes
 +  * TODO / code : ajouter la bouche dans le script ui_servo_expressions.py
 +  * TODO / code : contrĂ´le des mouvements par pure data (pratique pour sĂ©quencer)
 +  * TODO / install : solidariser camĂ©ra et robot /!\ captation audio et moteurs
 +  * TODO / install : enceinte derrière le robot
 +  * TODO / tĂŞte : refixer paupière, limer quelques pièces
 +  * TODO / install : mode veille ?
 +
 +**NĂ©cessite un rĂ©seau local dans cette version!**
 ===== Ressources ===== ===== Ressources =====
  
  • openatelier/projet/tete_animatronique.1686750825.txt.gz
  • Dernière modification: 2023/06/14 15:53
  • par emoc