Étape 5: codage
Arduino :
Lancer l’Arduino et ouvrir une nouvelle esquisse. Malheureusement, je n’ai pas suffisamment de temps pour vous enseigner les rudiments de l’Arduino. Vous pouvez chercher des tutoriels si vous avez envie. Donc, c’est ce que nous allons faire, une fois que vous avez ouvert une nouvelle esquisse : fichier >> New ou Ctrl + N.
Copier coller le code suivant (ou il suffit de télécharger le fichier joint). Je dois encore Oddbot pour m’aider avec la partie requête de la code looooong looong retour.
Le code :
/* Title: Speech Controlled Quadropod Author: Adith Jagadish Boloor Comments: This code is free for you to use, modify or simply stare at when you are really bored. */ #include <Servo.h> // Servo Library // Starting positions of the servos #define FLHcenter 1500 #define FRHcenter 1500 #define RLHcenter 1520 #define RRHcenter 1450 #define FLKcenter 1150 #define FRKcenter 1220 #define RLKcenter 1220 #define RRKcenter 1210 // Here you can change servo pin numbers corresponding // to your specific connections #define FLHpin 46 // Front Left Hip servo pin #define FRHpin 52 // Front Right Hip servo pin #define RLHpin 28 // Rear Left Hip servo pin #define RRHpin 13 // Rear Right Hip servo pin #define FLKpin 47 // Front Left Knee servo pin #define FRKpin 53 // Front Right Knee servo pin #define RLKpin 29 // Rear Left Knee servo pin #define RRKpin 12 // Rear Right Knee servo pin // Buffer for the speech message char INBYTE; // LEDs!!!!! If you choose to use 'em int led1 = 27; int led2 = 11; int led3 = 45; int led4 = 26; // Some constants for the bot's motions, yes you may // play with them to get the best performance int Time = 90; int LShift = 280; int RShift = 280; int Raise = 550; // Define servos Servo FLHservo; Servo FRHservo; Servo RLHservo; Servo RRHservo; Servo FLKservo; Servo FRKservo; Servo RLKservo; Servo RRKservo; void setup() { // Attach servos (digitally) FLHservo.attach(FLHpin); FRHservo.attach(FRHpin); RLHservo.attach(RLHpin); RRHservo.attach(RRHpin); FLKservo.attach(FLKpin); FRKservo.attach(FRKpin); RLKservo.attach(RLKpin); RRKservo.attach(RRKpin); // Attach LEDs (digitally) pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); Serial.begin(9600); // Center servos FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(500); // Prints out the controls mapped to different letters Serial.println("wasd - movement"); Serial.println("z - sleep"); Serial.println("x - play dead"); Serial.println("i - sit"); Serial.println("u - stand"); Serial.println("q - wake up"); } void loop() { Serial.println("Ready to accept command"); while (!Serial.available()); // stay here so long as COM port is empty INBYTE = Serial.read(); // read next available byte delay(50); if (INBYTE == 'q') // wake up - flashes LEDs if you used them { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); } else if (INBYTE == 'z') //Sleeps { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); } else if (INBYTE == 'u') // stand Up { // Center servos FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter); RRKservo.writeMicroseconds(RRKcenter); delay(1000); } else if (INBYTE == 'x') // plays dead X { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); } else if (INBYTE == 'i') //sits { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter-600); RRHservo.writeMicroseconds(RRHcenter+600); FLKservo.writeMicroseconds(FLKcenter); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); } else if (INBYTE == 'h') //shake Hands { FLHservo.writeMicroseconds(FLHcenter-600); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter-600); RRHservo.writeMicroseconds(RRHcenter+600); FLKservo.writeMicroseconds(FLKcenter+600); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter-700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); FLKservo.writeMicroseconds(FLKcenter+300); delay(200); FLKservo.writeMicroseconds(FLKcenter+600); delay(200); FLKservo.writeMicroseconds(FLKcenter+300); delay(200); FLKservo.writeMicroseconds(FLKcenter+600); delay(200); } else if(INBYTE == 'w') // run forward { LShift=300; RShift=300; for(int i=0;i<5;i++) { Run(); } } else if(INBYTE == 'a') // turn left { LShift=-300; RShift=300; for(int i=0;i<3;i++) { Run(); } } else if(INBYTE == 'd') // turn right { LShift=300; RShift=-300; for(int i=0;i<3;i++) { Run(); } } else if(INBYTE == 's') // run back { LShift=-300; RShift=-300; for(int i=0;i<5;i++) { Run(); } } } void Run() { FRKservo.writeMicroseconds(FRKcenter+Raise); // raise front right leg RLKservo.writeMicroseconds(RLKcenter+Raise-10); // raise rear left leg FLHservo.writeMicroseconds(FLHcenter+LShift); // move front left leg backward RRHservo.writeMicroseconds(RRHcenter-RShift); // move rear right leg backward delay(Time/2); FRHservo.writeMicroseconds(FRHcenter+RShift); // move front right leg forward RLHservo.writeMicroseconds(RLHcenter-LShift); // move rear left leg forward delay(Time); FRKservo.writeMicroseconds(FRKcenter); // lower front right leg RLKservo.writeMicroseconds(RLKcenter); // lower rear left leg delay(Time); FLKservo.writeMicroseconds(FLKcenter+Raise); // raise front left leg RRKservo.writeMicroseconds(RRKcenter+Raise); // raise rear right leg FRHservo.writeMicroseconds(FRHcenter-RShift); // move front right leg backward RLHservo.writeMicroseconds(RLHcenter+LShift); // move rear left leg backward delay(Time/2); FLHservo.writeMicroseconds(FLHcenter-LShift); // move front left leg forward RRHservo.writeMicroseconds(RRHcenter+RShift); // move rear right leg forward delay(Time); FLKservo.writeMicroseconds(FLKcenter); // lower front left leg RRKservo.writeMicroseconds(RRKcenter); // lower rear right leg delay(Time); }
Juste avant que vous pouvez télécharger le code, procédez comme suit :
Ouvrez le gestionnaire de périphériques et Rechercher des Ports (COM & LPT).
Outils >> Conseil >> Arduino Mega ou Mega 2560 (image 2)
Outils >> processeur >> ATMega 1280 (image 3)
Outils >> Port >> COM3 (3 pour mon cas seulement!!) (image 4)
Maintenant, vous pouvez appuyer sur le bouton upload et si tout se déroule sans heurt, avec succès, il faut télécharger et le robot devrait être sur le ventre avec quatre jambes allongées symétriquement avec une constante voyant clignotant du HC 06.
Si vous obtenez cette erreur pendant le téléchargement :
avrdude : stk500_getsync() : pas synchronisés : resp = 0xe0
Il suffit de débrancher le module HC06, Télécharger le code et accrochez-la sur.
OK, j’ai réalisé quelque chose alors que j’ai tester et écris ce tutoriel. Vous n’avez pas besoin des BitVoicer et Python, il suffit qu’un d’eux. BitVoicer fait tout pour vous et son moteur de reconnaissance vocale est assez puissant, mais il en coûte 5 $ tandis que la reconnaissance vocale de python utilise Google Speech API, donc elle peut parfois donner des résultats vraiment bizarres et a quelques plus de codage, alors le choix est vôtre.
Bluetooth
OK juste avant de passer sur la mèche de la reconnaissance vocale via BitVoicer ou Python, permet de relier le bluetooth de votre PC au 06 HC de votre bot. Assurez-vous que le bluetooth sur votre PC fonctionne avant de procéder car il m’a fallu 5 heures pour se rendre compte que mon portable n’est pas venu avec un bluetooth intégré et j’ai dû commander un module.
Maintenant allumez votre bot via USB ou le bloc-piles. OMG quelle est cette fin tutoriel!!! Patience ! « « « Vous êtes presque là.
- Faites un clic droit sur l’icône périphériques Bluetooth dans la barre de plateau et cliquez sur Ajouter nouvel appareil.
- Qu’il recherche, de recherche et de recherche jusqu’au HC - 06 affiche
Si elle n’apparaît pas après avoir essayer parfois vérifié si vous pouvez trouver le périphérique à l’aide de votre téléphone mobile (tous les téléphones sauf les téléphones Apple devraient être capables de le détecter). Si vous n’avez pas vous savez qu’il y a quelque chose de mal avec votre HC-06 et il faut y remédier en vérifiant les connexions. - Double cliquez dessus.
- Sur le prochain dialogue boîte select Enter le dispositif couplage code et type en 1234. Il devrait puis installez le 06 HC sur votre ordinateur.
- Maintenant, cette partie est important ouvrir le gestionnaire de périphériques (Démarrer >> Gestionnaire de périphériques)
- Allez sur Ports (COM & LPT) et noter les ports COM utilisés par le Bluetooth.
COM10 et COM21 pour mon cas.
BitVoicer (Option 1)
Vous pouvez télécharger BitVoicer depuis ici.
Commençons tout d’abord, si vous n’êtes pas un orateur anglais américain vous pouvez modifier la langue/accent que BitVoicer va essayer de reconnaître. Pour ce faire, allez dans fichier >> langues supplémentaires et continuer à installent votre langue préférée/accent.
Nous sommes maintenant prêts à ajouter des commandes. Pour démarreurs nous allons ajouter deux commandes à savoir sont lever et s’asseoir. Vous pouvez les modifier ou ajouter des commandes plus tard. Les étapes sont les suivantes :
- Créer un nouveau schéma en cliquant sur fichier >> New.
- Changer le type de données de commande par défaut en char.
- Cliquez sur Ajouter une nouvelle phrase
- Tapez dans "stand up" (sans les guillemets)
- Cliquez sur Ajouter une nouvelle phrase
- Tapez « assis » (encore une fois sans les guillemets)
- Maintenant ci-dessous en phrase anagrammes, changer les types de données de ces deux commandes en char si ce n’est pas déjà le char.
- Pour lève-type de la commande que vous avez et pour asseoir type j’ai.
- Votre écran devrait ressembler à l’Image 5.
- Enregistrez votre schéma dans un répertoire qui vous convient.
- Maintenant, ouvrez les préférences de fichier >> Préférences et remplissez l’à l’aide de trucs.
Que trois choses qui seront différentes pour vous sera le dossier de sortie par défaut, la langue de reconnaissance vocale et le nom du Port. - Votre nom de Port correspondra à votre Port COM qui utilise votre Bluetooth que vous avez découvert à l’étape 6 en Bluetooth. Essayez d’abord le nombre inférieur.
- Cliquez sur Enregistrer.
- Passez à l’étape suivante.
Python (Option 2)
Commencez par Télécharger Python (pour ce tutoriel je vais utiliser la version 3.4) qui peut être téléchargé depuis https://www.python.org/download/releases/3.4.1/ pourquoi 3.4 et le n’est pas la version 2.7 ? Eh bien la reconnaissance de la parole que nous utilisons ne fonctionne que sur la version 3.4 de python (ya je sais ça craint mais bon 3,4 > 2.7 droit?)
Installez-le dans C:\Python34 par souci de commodité. La prochaine chose que vous devez faire est de télécharger et installer eclipse qui est une interface pour écrire votre code via Python. Vous pouvez le télécharger depuis http://www.eclipse.org/downloads/ installer dans C:\eclipse
Si vous obtenez cette erreur lors de l’exécution, il...
Un environnement d’exécution Java (JRE) ou le Kit de développement Java (JDK) doit être disponible afin de lancer Eclipse. Aucune machine virtuelle de Java a été trouvé après une recherche aux emplacements suivants :
C:\eclipse\jre\bin\javaw.exe
javaw.exe dans votre chemin d’accès actuel
Aller à la première réponse à http://stackoverflow.com/questions/2030434/eclipse-no-java-jre-jdk-no-virtual-machine
www.StackOverflow.com est le meilleur endroit pour trouver de l’aide pour tous les problèmes en python
Utilisez ce tutoriel pour installer python dans eclipse sauf au lieu de python 2.6, que vous devriez choisir python 3.4. Vous pouvez également utiliser ce tutoriel d’installer python dans Geany si vous avez choisi d’utiliser Geany que j’entends est beaucoup plus agréable que l’éclipse, mais je n’ai pas eu assez de temps pour migrer vers elle. Il y a quelque chose appelé « bibliothèques » dont vous aurez besoin d’accéder aux différentes fonctionnalités de python. Maintenant passons allez-y et installer quelques bibliothèques dont nous avons besoin pour ce projet. Pour ceux d'entre vous qui savent déjà comment faire pour installer les bibliothèques il suffit d’aller venir installer celles cotées et aller le code.
Bibliothèques requises :
- PyBluez 0,20 - Bluetooth (installation)
- PyAudio 0.2.8 - fournit des liaisons pour la reconnaissance vocale (installation)
- SpeechRecognition 1.1.0 - reconnaissance vocale (Télécharger)
PyBluez et PyAudio peuvent être installés en téléchargeant le "... win32-py3.4.exe" versions à partir du lien et simplement l’exécution du fichier exécutable (setup).
SpeechRecognition bibliothèque est un peu délicat si vous débutez en python. Ouvrir le lien « Télécharger » ci-dessus, puis cliquez sur téléchargements. Télécharger "SpeechRecognition-1.1.0.tar.gz (md5)". Extrayez tout le contenu (pas le dossier qui dit SpeechRecognition-1.1.0 mais whats dedans) du dossier téléchargé (via winRAR ou n’importe quel extracteur vous envie à l’aide) dans le répertoire python 3.4 (C:\Python34). Si une boîte de dialogue s’affiche demandant s’il faut remplacer les fichiers existants, cliquez sur Oui pour tout. Maintenant, accédez au lecteur C:, tout en maintenant Shift, faites un clic droit sur le dossier qui dit Python34 et cliquez sur « commande ouvrir fenêtre ici ». Tapez « python setup.py install » sans les guillemets et appuyez sur entrée. Vous devriez maintenant avoir toutes les bibliothèques nécessaires installés. Yay !
Ouvrir eclipse.
Sous le dossier PythonTest dans le didacticiel de créer un nouveau fichier appelé Speech_Controlled_Quadrapod.py semblable à comment vous avez créé le pytest.py fichier que vous avez créé dans le didacticiel. Maintenant, collez ou télécharger...
Le code :
# Title: Speech Controlled Quadrapod # Author: Adith Jagadish # Description: Uses Google's Speech Recognition API and python bluetooth library to control a quadrapod # How to: Say "stand up" to make bot stand up and say "sit down" to make it sit. # Say "stop listening to terminate the program" import bluetooth import speech_recognition as sr port = 1 bd_addr = "xx:xx:xx:xx:xx:xx" sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) sock.connect((bd_addr, port)) r = sr.Recognizer() r.pause_threshold = 0.6 r.energy_threshold = 400 MESSAGE = "continue" print("Ready to accept command...\n") while (MESSAGE != "stop listening"): while (MESSAGE == "continue"): try: # use the default microphone as the audio source with sr.Microphone() as source: # listen for the first phrase and extract it into audio data audio = r.listen(source,timeout = None) # recognize speech using Google Speech Recognition print("Me: " + r.recognize(audio)) MESSAGE = str(r.recognize(audio)) except LookupError: # speech is unintelligible MESSAGE = "continue" print("Could not understand audio") if(MESSAGE == "sit down"): sock.send("i") elif(MESSAGE == "stand up"): sock.send("u") elif(MESSAGE == "stop listening"): break; MESSAGE = "continue" sock.close() print("\nProgram terminated.")
Le seul changement que vous devez faire est en ligne :
bd_addr = "xx:xx:xx:xx:xx:xx"
Faites un clic droit sur l’icône bluetooth dans la barre d’État et cliquez sur « Afficher les périphériques Bluetooth ». Faites un clic droit sur HC-06 et cliquez sur Propriétés. Allez dans l’onglet Bluetooth et copiez le numéro d’identification Unique et que coller à la place de xx.
Vous êtes bon pour aller à l’essai.