View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Pyduino : Reconnaissance vocale : Allumer/éteindre des sorties numériques à l'aide de la reconnaissance vocale (mode connecté).

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Dans ce code, je montre comment contrôler les broches E/S du miniPC grâce à la reconnaissance vocale en mode connecté en utilisant ma librairie PyduinoMultimedia.
  • La chaîne reconnue est analysée pour mettre les broches dans l'état voulu :
    • une chaine contenant "allum" et un nombre entre 1 et 7 allumera la broche correspondante (mise au niveau HIGH)
    • une chaine contenant "éteindre" et un nombre compris entre 1 et 7 allumera la broche correspondante (mise au niveau LOW)
    • une chaîne contenant "allum" ou "éteindre" et "tout" mettre toutes les broches dans l'état voulu.
  • Il sera facile d'adapter à loisir ce code à ses propres besoins... notamment en utilisant un mot-clé au lieu du numéro de la broche.
  • Pour plus de détails sur la reconnaissance vocale avec PyduinoMultimedia, voir la fonction analyzeVoice

Pré-requis

Schéma fonctionnel

  • La reconnaissance vocale contrôle les broches E/S :

Matériel nécessaire

Système

  • Le pcDuino
  • Une entrée audio opérationnelle :
    • le micro intégré d'une webcam (le plus simple)
    • une carte audio USB avec entrée audio et un micro

E/S

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • 8 x LED rouge 5mm,
  • 8 x résistance 1/4w de 270 Ohms environ,

Instructions de montage

  • Connecter sur les broches 0 à 7 (configurée en sortie) une LED et sa résistance (270 Ohms) en série connectée au 0V
  • Note technique : chaque broche va fournir (3.3-1.5)/270 = 6,66 mA soit au total 8 x 6,66mA... soit 53mA au plus, ce qui semble tout à fait acceptable pour ne pas risquer d'endommager le mini-PC.

Le montage à réaliser

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany :


#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juillet 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# broches E/S controlees par la voix

from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
#noLoop=True

ledTemoin=0  # LED témoin ok pour parler

#--- setup ---
def setup():

        # broche de led temoin
        pinMode(ledTemoin, OUTPUT) # broche en sortie
        digitalWrite(ledTemoin, LOW) # eteint LED

        # broches ES utilisees
        for pin in range (1,8): # defile broche 1-7
                pinMode(pin, OUTPUT) # broche sortie
                digitalWrite(pin, LOW) # eteint LED
# -- fin setup --

# -- loop --
def loop():

        # fichier d'enregistrement a utiliser
        filepathAudio=homePath()+dataPath(AUDIO)
        filename="test.wav"
        print (filepathAudio+filename)

        #speak("Test de reconnaissance vocale. Dites quelque chose")

        digitalWrite(ledTemoin,HIGH) # LED pour OK parler

        recordSound(filepathAudio+filename,3) # enregistre son fichier voulu et duree voulue en secondes

        digitalWrite(ledTemoin,LOW) # LED Stop parler

        #playSound(filepathAudio+filename)

        chaine=analyzeVoice(filepathAudio+filename) # reconnaissance vocale

        if chaine=="": # si rien dit
                #speak("Vous n'avez rien dit.")
                pass
        else: # si dit quelque chose
                speak("Vous avez dit " + chaine)

                # analyse de la chaine recue
                chaine=chaine.lower() # met en minuscule

                print chaine # affiche chaine reconnue

                # analyse chaine reconnue et met LED dans etat voulu
                if "allum" in chaine:
                        if "1" in chaine or "un" in chaine : digitalWrite(1,HIGH)
                        if "2" in chaine or "deux" in chaine : digitalWrite(2,HIGH)
                        if "3" in chaine or "trois" in chaine : digitalWrite(3,HIGH)
                        if "4" in chaine or "quatre" in chaine : digitalWrite(4,HIGH)
                        if "5" in chaine or "cinq" in chaine : digitalWrite(5,HIGH)
                        if "6" in chaine or "six" in chaine : digitalWrite(6,HIGH)
                        if "7" in chaine or "sept" in chaine : digitalWrite(7,HIGH)
                        if "tou" in chaine :
                                for i in range(1,8):digitalWrite(i,HIGH)

                elif "éteindre" in chaine:
                        if "1" in chaine or "un" in chaine : digitalWrite(1,LOW)
                        if "2" in chaine or "deux" in chaine : digitalWrite(2,LOW)
                        if "3" in chaine or "trois" in chaine : digitalWrite(3,LOW)
                        if "4" in chaine or "quatre" in chaine : digitalWrite(4,LOW)
                        if "5" in chaine or "cinq" in chaine : digitalWrite(5,LOW)
                        if "6" in chaine or "six" in chaine : digitalWrite(6,LOW)
                        if "7" in chaine or "sept" in chaine : digitalWrite(7,LOW)
                        if "tou" in chaine :
                                for i in range(1,8):digitalWrite(i,LOW)

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin

 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/Voice/AnalyzeVoiceLedControleES.py

Utilisation

  • Réaliser le montage et connecter le micro (le plus simple = une webcam avec micro-intégré)
  • Vérifier les niveaux de son au préalable avec Audacity
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal doit apparaître :
    • lorsque la LED connectée sur la broche 0 s'allume, parler !
    • la reconnaissance vocale se fait automatiquement et une annonce vocale se fait selon message reconnu
    • les LEDs sont mises dans l'état voulu !
  • Simple et efficace.

Discussion technique

  • Ce code peut encore être amélioré en évitant une analyse du fichier son si celui-ci est vide... Ceci évitera une connexion intempestive inutile au serveur Google Voice.