120, rue Beacon, Somerville, MA 02143
Détection automatique d'objets avec votre main NeuroMaker

Permettez à votre main NeuroMaker de détecter un objet à proximité et d'effectuer automatiquement des gestes. Par exemple, vous pouvez placer le capteur sur la paume pour qu'il secoue automatiquement votre main lorsque vous vous en approchez avec votre main. Apprenez à utiliser les maquettes, les capteurs et les circuits de base. Code C++ dans Arduino IDE pour alimenter les capteurs, obtenir des entrées et des sorties, visualiser les entrées série et créer vos propres gestes et applications.

Temps estimé

2 heures

Nombre de personnes

1- 2 étudiants par kit de main NeuroMaker

Fournitures nécessaires

  • Une main NeuroMaker entièrement construite
  • (Inclus dans le kit) Carte de programmation UNO
  • Câble USB (Inclus dans le kit)
  • Câbles de démarrage et planche à pain (inclus dans le kit)
  • Capteur de distance à ultrasons HC-SR04 (non inclus)

Fichiers de programme nécessaires

Éléments de pré-vérification

  • Achèvement du projet « Construisez votre premier programme C++ »
  • La main NeuroMaker est entièrement construite
  • Les piles 9V et AA sont installées
  • Un ordinateur Mac/Windows avec accès réseau et port USB
  • L'IDE Arduino est installé

Arrière plan

C++ est l'un des langages de programmation les plus utilisés dans le monde aujourd'hui. Une grande partie du code qui exécute votre navigateur Internet et les jeux en ligne populaires comme World of Warcraft utilisent C++ pour faire fonctionner leurs systèmes ! C++ nécessite moins de ressources pour fonctionner que d'autres langages de niveau supérieur comme Python. Dans le monde des sciences biomédicales, C++ est utilisé partout pour alimenter les appareils d'IRM et les systèmes qui gèrent les informations sur les patients. Chez BrainRobotics, une grande partie du code utilisé pour contrôler le mouvement de l'appareil lui-même est en fait écrit en C++ !

Instructions de projet

Connectez le capteur à ultrasons à la puce d'alimentation bleue de la main NeuroMaker à l'aide de fils de planche à pain et de cavaliers.

Ci-dessous une liste de connexions :

Broches sur le capteur à ultrasons Prises sur la puce d'alimentation bleue
Vcc 5V
Terre Terre
Trigonométrie D7
Écho D8

 

Vous trouverez ci-dessous les instructions pour le code.

Vous avez déjà appris en le projet C++ précédent que nous avons besoin de bibliothèques au départ pour importer du code pré-construit important :

Complétez ce code C++ !

*/ #comprend // Ensuite, créez 5 objets Servo appelés "servos" et enregistrez-les dans un tableau. // Complétez votre code ici : /* Définissons maintenant quelques broches. Sur le capteur à ultrasons, vous pouvez trouver "Trig" et "Echo". Puisque nous avons connecté Trig à D7 et Echo à D8, nous devons le dire au microprocesseur. La distance max et min définit la plage dans laquelle vous voulez que les doigts se déplacent. Si la distance d'entrée est supérieure à max, les doigts ne bougent pas. Si la distance est plus proche que le min, tous les doigts bougent 100%. Pour tout nombre intermédiaire, nous devons calculer l'angle afin que les doigts se déplacent de manière linéaire. */ const int trigPin = 7; const int echoPin = 8 ; durée de flottement, distance, angle ; float maxDistance = 15 ; const float minDistance = 5 ; void setup() { // Définit le mode d'entrée/sortie pour chaque broche. pinMode(trigPin, SORTIE); pinMode(echoPin, INPUT); // Assurez-vous que la broche de déclenchement est définie sur LOW au début. digitalWrite(trigPin, LOW); retardMicrosecondes(2); // initialise la communication série : Serial.begin(9600); // Dans le projet précédent, vous avez appris à connecter chaque objet Servo // à une broche spécifique. servos[0].attach(6); // Complétez le reste du code : // Assurez-vous que tous les doigts sont en position ouverte au début. resetDoigt(); } void loop() { // Le trigPin est déclenché par une impulsion HIGH de 2 microsecondes ou plus. // Donnez une courte impulsion LOW au préalable pour garantir une impulsion HIGH propre : digitalWrite(trigPin, HIGH); retardMicrosecondes(10); digitalWrite(trigPin, LOW); retardMicrosecondes(2); /* Lorsque les ondes sonores générées par le module de capteur heurtent une barrière, elles rebondissent et sont capturées par un autre récepteur qui allume la broche Echo HIGH pendant la durée du déplacement des ondes. Pour obtenir la durée de déplacement des ondes, nous pouvons utiliser une fonction Arduino intégrée appelée pulseIn(). Il prend 2 arguments, le pin# et un état que nous voulons qu'il renvoie l'heure (HIGH ou LOW). Dans notre cas, lorsqu'il détecte que l'echoPin est HIGH, il commence à chronométrer puis arrête le chronométrage lorsque echoPin passe à LOW. Ensuite, nous stockons simplement le temps dans la variable de durée. */ durée = pulseIn(echoPin, HIGH); /* convertit le temps en distance. Étant donné que vitesse = distance/temps, et que le pulseIn renvoie le temps en microsecondes, nous pouvons rechercher sur Internet que la vitesse du son est de 0,0343 c/μS. Multipliez simplement la durée obtenue à l'étape précédente par 0,0343, puis divisez-la par 2 (puisque les ondes sonores se déplacent vers l'objet puis reviennent). */ distance = (durée*.0343)/2 ; // Nous pouvons voir l'entrée en temps réel du capteur à l'aide du moniteur série. Allez dans // "Outils" et sélectionnez "Moniteur série". Serial.print("Distance : "); Serial.print(distance); // Il s'agit d'une fonction que nous définissons pour obtenir le résultat calculé des angles que les servomoteurs doivent déplacer. angle = getAngle(distance); Serial.print(" Angle : "); Serial.println(angle); // Ceci est une fonction que nous définissons pour déplacer tous les doigts en fonction de l'entrée d'angle. moveDoigt(angle); retard(100); } /* C'est le corps de la fonction. Il renvoie la valeur absolue du déplacement angulaire des servomoteurs. Si la variable d'entrée "distance" est supérieure à maxDistance, renvoie 0. Si l'entrée est plus proche que minDistance, renvoie 180. Pour toute entrée intermédiaire, mappe linéairement l'entrée à l'angle. */ float getAngle (float distance){ // Complète cette fonction } // Cette fonction déplace tous les doigts vers leur position d'origine. Reportez-vous au projet précédent // pour savoir comment y parvenir. void resetFinger(){ // Complète cette fonction delay(1000); } // Cette fonction déplace tous les doigts vers la position cible, en fonction de l'entrée d'angle. L'entrée est // la valeur absolue de l'angle de déplacement. void moveFinger(float angle){ // Complète cette fonction }

 

Affichage des données série

Votre moniteur série affichera les données du capteur comme l'image à droite.

Téléchargez votre code

Une fois le code terminé, il est temps de commencer le téléchargement. Utilisez l'USB pour connecter la main NeuroMaker à votre ordinateur. Dans l'IDE Arduino, allez dans "Outils" et choisissez le port connecté à votre main comme indiqué ci-dessous. Le port # peut être différent sur votre appareil.

Choisissez la carte comme Arduino Uno comme indiqué.

Exécutez votre code

Cliquez sur le bouton de téléchargement affiché en jaune pour télécharger votre programme sur la main NeuroMaker.

 

Passer en revue

Comment votre code a-t-il fonctionné ? Pourriez-vous créer les bons angles de moteur pour afficher différents signaux manuels ? Quelle autre logique pourriez-vous ajouter pour rendre votre programme plus efficace ? Pour obtenir des conseils, consultez Sensor_Answer.ino

fr_FRFrench