Poppy Ergo Jr

import random
import time
from pypot.dynamixel.conversion import XL320LEDColors

#------------------------------------------------------
# CREATION DU ROBOT
#------------------------------------------------------

from pypot.creatures import PoppyErgoJr
poppy = PoppyErgoJr()

#------------------------------------------------------
# INITIALISATION DU ROBOT
#------------------------------------------------------

for m in poppy.motors :  # Boucle sur les six moteurs
    m.compliant = False
    m.led = 'green'
position_1 = {'m1': 0, 'm2': -110, 'm3': 66, 'm4': 0, 'm5': 34, 'm6': 20}  # safe_power_up
poppy.goto_position(position_1, 2, wait=True)  # 2 secondes pour prendre la position

#------------------------------------------------------
# FONCTION animation
#------------------------------------------------------

def animation(moteur, angleMin, angleMax, forceMax) :
    moteur.goal_position = random.randint(angleMin,angleMax)
    if abs(moteur.present_load) > forceMax :
        print (moteur.present_load)
        for m in poppy.motors :
            m.compliant = True
            m.led = 'off'
        for i in range(5) :
            moteur.led = 'red'
            time.sleep(0.5)
            moteur.led = 'off'
            time.sleep(0.5)
        time.sleep(1)

#------------------------------------------------------
# BOUCLE
#------------------------------------------------------

while 1 :
    for m in poppy.motors :
        m.moving_speed = random.randint(5,20)  # 5,20 à 5,30
        m.compliant = False
        m.led = XL320LEDColors(random.randint(2,8)).name
    animation(poppy.m1,-90,90,50)
    animation(poppy.m2,-110,0,30)
    animation(poppy.m3,0,60,30)
    animation(poppy.m4,-90,90,30)
    animation(poppy.m5,-40,40,20)
    animation(poppy.m6,-60,60,10)
    if random.randrange(4) == 1 :
        time.sleep(random.randrange(5))

Les circuits imprimés sont arrivés

Les circuits imprimés du shield 3615 pour Minitel et Arduino sont arrivés aujourd’hui. J’ai soudé les différents composants du shield : tout est fonctionnel. Pour ceux que ça intéresse, j’ai deux circuits imprimés de cette série en stock (sans les composants donc). Tarif unitaire : 16 € avec les frais de port.

Tweeter avec un Minitel

Le matériel à mettre en oeuvre : Le minitel, le câble DIN-USB, une Arduino Uno, le shield 3615, un Raspberry Pi.

On crée un compte Twitter puis une application Twitter depuis cette adresse : https://apps.twitter.com.

On règle les permissions.

On récupère les clés qui sont dans les 4 zones rouges. Elles seront utilisées ultérieurement dans le fichier Python minitel.py.

Le programme minitel.py utilise Twython.
Il faut donc installer (sudo apt-get install) :
pour Python 2.7 : python-twython / python-oauth / python-oauth2client / python-oauthlib / python-requests-oauthlib
pour Python 3 : python3-twython / python3-oauth / python3-oauth2client / python3-oauthlib / python3-requests-oauthlib

Pour que le programme minitel.py se lance dès qu’on allume le Raspberry Pi, on ajoute la ligne suivante dans le fichier /etc/rc.local :
su -l pi -c "python /home/pi/3615/minitel.py &"

Dans le fichier /boot/cmdline.txt , il faut enlever « console=ttyAMA0,115200 ».

Enfin, pour pouvoir tweeter, le Raspberry Pi doit être à l’heure sinon on a en retour le message « Twitter API returned a 401 (Unauthorized), Timestamp out of bounds. ». J’ai donc ajouté une horloge temps réel sur le Raspberry Pi : http://www.nagashur.com/wiki/doku.php?id=raspberry_pi:ds3231_rtc_horloge

Pour consulter l’heure et la date contenue dans le module :

sudo hwclock

Pour mettre à l’heure le Raspberry Pi manuellement :

sudo date -s "2017-06-18 17:10"
sudo hwclock -w

Pour ce qui concerne l’interface Minitel gérée par l’Arduino, le programme qui utilise Minitel1B_Soft est ici.

Enfin, il reste à relier le shield 3615 au Raspberry Pi :
TX0′ du shield > RXD du Raspberry Pi (broche 10)
RX0′ du shield > TXD du Raspberry Pi (broche 8)
GND du shield > GND du Raspberry Pi (broche 6)

Fabrication du câble Minitel-Shield

Se procurer le matériel suivant :

  • Minitel 1B avec une prise péri-informatique disposant d’une sortie alimentation sur la broche 5 (type Cu5 / Cu; / Cu< / Bu0 et suivants).
  • Cordon USB A mâle – USB B mâle.
  • Fiche Din mâle 5 contacts à 45° avec collier serre-câble.
  • Gaine thermorétractable transparente 1,2 mm avant retreint.

Le principe : On coupe le connecteur USB B du cordon et on le remplace par la fiche Din.

Pour tout comprendre, partons de la documentation du Minitel :

Les numéros de broches sont positionnés de la même manière pour la fiche DIN mâle vue côté soudures.

Concernant le connecteur USB A, nous avons :

Etant donnés les choix faits au niveau du shield 3615 :
D- vers broche 8 de l’Arduino
D+ vers broche 9 de l’Arduino

Etant donnée la ligne de code suivante dans les exemples de la bibliothèque Minitel1B_Soft :
Minitel minitel(8, 9); // RX, TX

Il faudra souder, pour avoir un câble croisé :

  • Le fil vert à la broche 1 de la fiche DIN
  • Le fil noir à la broche 2 de la fiche DIN
  • Le fil rouge à la broche 5 de la fiche DIN
  • Le fil blanc à la broche 3 de la fiche DIN

Résolution du problème lié à la bibliothèque SD (Arduino 1.0.5) sur l’ATmega1284P

Pour utiliser la bibliothèque SD standard avec l’ATmega1284P, il faut modifier le fichier Sd2PinMap.h que l’on trouve dans le répertoire du logiciel Arduino à cette adresse (sur ma Debian 8) :
/usr/share/arduino/libraries/SD/utility/Sd2PinMap.h :
On tapera dans la console : sudo geany sd2PinMap.h (pour éditer le fichier en mode administrateur)