From 987e4c44b18afd455620af96ac85865aa70daa06 Mon Sep 17 00:00:00 2001 From: Philippe Roy Date: Wed, 4 Oct 2023 15:27:32 +0200 Subject: [PATCH] Mise en place des tests sur la commande des servo-moteurs (Arduino) et la vision (OpenCV) --- labyrinthe/3-arduino_pyfirmata/test/README.md | 6 ++ .../3-arduino_pyfirmata/test/manette-test.py | 2 +- labyrinthe/6-jumeaux/test/README.md | 7 ++ labyrinthe/6-jumeaux/test/cam_bille-test.py | 53 +++++++++++++ .../test/manette-test/manette-test.ino | 79 +++++++++++++++++++ .../6-jumeaux/test/servo-test/servo-test.ino | 30 +++++++ 6 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 labyrinthe/3-arduino_pyfirmata/test/README.md create mode 100644 labyrinthe/6-jumeaux/test/README.md create mode 100644 labyrinthe/6-jumeaux/test/cam_bille-test.py create mode 100644 labyrinthe/6-jumeaux/test/manette-test/manette-test.ino create mode 100644 labyrinthe/6-jumeaux/test/servo-test/servo-test.ino diff --git a/labyrinthe/3-arduino_pyfirmata/test/README.md b/labyrinthe/3-arduino_pyfirmata/test/README.md new file mode 100644 index 0000000..b4c6d69 --- /dev/null +++ b/labyrinthe/3-arduino_pyfirmata/test/README.md @@ -0,0 +1,6 @@ +## Labyrinthe à bille : **Créer une scène 3D interactive et interfacée avec un microcontroleur** + +### Programmes de test du Tutoriel 3 (Interfacage scène 3D <-> carte Arduino par pyFirmata) : + +- pyfirmata-test.py : Test de validation de la communication entre la carte Arduino et l'ordinateur en passant par le protocol Firmata +- manette-test.py : Test de la manette Grove constituée de 4 boutons et d'1 joystick diff --git a/labyrinthe/3-arduino_pyfirmata/test/manette-test.py b/labyrinthe/3-arduino_pyfirmata/test/manette-test.py index 1fee6bb..57ed8b8 100644 --- a/labyrinthe/3-arduino_pyfirmata/test/manette-test.py +++ b/labyrinthe/3-arduino_pyfirmata/test/manette-test.py @@ -5,7 +5,7 @@ import sys ############################################################################### # manette-test.py : -# @title: Test de la manette 4 boutons et joystick (protocol Firmata) +# @title: Test de la manette 4 boutons Grove et 1 joystick Grove en passant par le protocol Firmata # @project: Blender-EduTech - Tutoriel : Tutoriel 3 Labyrinthe à bille - Interfacer la scène 3D avec une carte Arduino # @lang: fr # @authors: Philippe Roy diff --git a/labyrinthe/6-jumeaux/test/README.md b/labyrinthe/6-jumeaux/test/README.md new file mode 100644 index 0000000..1c3dacc --- /dev/null +++ b/labyrinthe/6-jumeaux/test/README.md @@ -0,0 +1,7 @@ +## Labyrinthe à bille : **Créer une scène 3D interactive et interfacée avec un microcontroleur** + +### Programmes de test du Tutoriel 6 (Développement de jumeau numérique) : + +- servo-test.ino : Commande simple du servo-moteur +- manette-test.ino : Commande des servo-moteurs à la manette Grove (4 boutons + joystick) avec retour à l'horizontale via le capteur inertiel (IMU) +- cam_bille-test.py : Détection de la bille par vision (caméra + OpenCV+ matplotlib) diff --git a/labyrinthe/6-jumeaux/test/cam_bille-test.py b/labyrinthe/6-jumeaux/test/cam_bille-test.py new file mode 100644 index 0000000..6c0b4c2 --- /dev/null +++ b/labyrinthe/6-jumeaux/test/cam_bille-test.py @@ -0,0 +1,53 @@ +import os, time +import matplotlib.pyplot as plt + +import cv2 + +############################################################################### +# cam_bille-test.py : +# @title: Détection de la bille par vision (caméra + OpenCV) +# @project: Blender-EduTech - Tutoriel : Tutoriel 6 Labyrinthe à bille - Développement de jumeau numérique +# @lang: fr +# @authors: Philippe Roy +# @copyright: Copyright (C) 2023 Philippe Roy +# @license: GNU GPL +# +############################################################################### + +### +# Installation : +# - pip3 install opencv-python +### + +############################################################################### +# Initialisation +############################################################################### + +# Init de la caméra +cam_id = 0 # 0 pour la 1ere camera, 1 pour la seconde ... +cam = cv2.VideoCapture(cam_id) # 0 pour la 1ere camera, 1 pour la +assert cam.isOpened(), "Erreur lors de l'ouverture de la camera !" + +# Création de la fenêtre d'affichage +cv2.namedWindow("Caméra") + +############################################################################### +# Affichage +############################################################################### + +# Capture +key='' +while cam.isOpened(): + cam_actif, cam_img = cam.read() + cv2.imshow("Caméra", cam_img) + key = cv2.waitKey(1) # Saisie clavier avec un timeout de 1 ms + if key & 0xFF == ord('q') or key == 27 : + break + # cv2.imwrite("camera.png", cam_img) + +############################################################################### +# Quitter +############################################################################### + +cam.release() +cv2.destroyAllWindows() diff --git a/labyrinthe/6-jumeaux/test/manette-test/manette-test.ino b/labyrinthe/6-jumeaux/test/manette-test/manette-test.ino new file mode 100644 index 0000000..f9d880d --- /dev/null +++ b/labyrinthe/6-jumeaux/test/manette-test/manette-test.ino @@ -0,0 +1,79 @@ +#include "servo.h" +#include "Wire.h" +#include "MPU6050.h" + +/****************************************************************************** + * manette-test.ino + * @title: Programme pour la carte Arduino (capteur imu + 2 servomoteurs) + * @project: Blender-EduTech - Tutoriel 6 : Labyrinthe à bille - Développer le jumeau numérique du labyrinthe + * @lang: fr + * @authors: Philippe Roy + * @copyright: Copyright (C) 2023 Philippe Roy + * @license: GNU GPL + * + ******************************************************************************/ + +/****************************************************************************** + * IMU - I2C + ******************************************************************************/ + +MPU6050 accelgyro; + +int16_t ax, ay, az; +int16_t gx, gy, gz; +int16_t mx, my, mz; +float Axyz[3]; +float roll; +float pitch; +float roll_deg; +float pitch_deg; +String roll_txt; +String pitch_txt; +String serial_msg_int_txt; + +/****************************************************************************** + * Initialisation + ******************************************************************************/ + +void setup() { + + // Liaison série + Serial.begin(115200); + + // IMU + Wire.begin(); + accelgyro.initialize(); + + } + +/****************************************************************************** + * Boucle principale + ******************************************************************************/ + +void loop() { + + /***** + * Lecture des accélérations + *****/ + + accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz); + Axyz[0] = (double) ax / 16384; + Axyz[1] = (double) ay / 16384; + Axyz[2] = (double) az / 16384; + roll = asin(-Axyz[0]); + roll_deg = roll*57.3; + roll_txt = String(roll_deg); + pitch = -asin(Axyz[1]/cos(roll)); // position capteur (X vers la gauche, Y vers l'arriere, Z vers le haut) + pitch_deg = pitch*57.3; + pitch_txt = String(pitch_deg); + + /***** + * Console + *****/ + + Serial.print(roll_txt); + Serial.print(","); + Serial.print(pitch_txt); + Serial.println(); + +} diff --git a/labyrinthe/6-jumeaux/test/servo-test/servo-test.ino b/labyrinthe/6-jumeaux/test/servo-test/servo-test.ino new file mode 100644 index 0000000..1faf96b --- /dev/null +++ b/labyrinthe/6-jumeaux/test/servo-test/servo-test.ino @@ -0,0 +1,30 @@ +#include "servo.h" + +/****************************************************************************** + * servo-test.ino + * @title: Programme pour la carte Arduino (2 servomoteurs) + * @project: Blender-EduTech - Tutoriel 6 : Labyrinthe à bille - Développer le jumeau numérique du labyrinthe + * @lang: fr + * @authors: Philippe Roy + * @copyright: Copyright (C) 2023 Philippe Roy + * @license: GNU GPL + * + ******************************************************************************/ + +/****************************************************************************** + * Initialisation + ******************************************************************************/ + +void setup() { + + // Liaison série + Serial.begin(115200); + +} + +/****************************************************************************** + * Boucle principale + ******************************************************************************/ + +void loop() { +}