Mise en place des tests sur la commande des servo-moteurs (Arduino) et la vision (OpenCV)

This commit is contained in:
Philippe Roy 2023-10-04 15:27:32 +02:00
parent f8b3727356
commit 987e4c44b1
6 changed files with 176 additions and 1 deletions

View File

@ -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

View File

@ -5,7 +5,7 @@ import sys
############################################################################### ###############################################################################
# manette-test.py : # 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 # @project: Blender-EduTech - Tutoriel : Tutoriel 3 Labyrinthe à bille - Interfacer la scène 3D avec une carte Arduino
# @lang: fr # @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr> # @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>

View File

@ -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)

View File

@ -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 <philippe.roy@ac-grenoble.fr>
# @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()

View File

@ -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 <philippe.roy@ac-grenoble.fr>
* @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();
}

View File

@ -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 <philippe.roy@ac-grenoble.fr>
* @copyright: Copyright (C) 2023 Philippe Roy
* @license: GNU GPL
*
******************************************************************************/
/******************************************************************************
* Initialisation
******************************************************************************/
void setup() {
// Liaison série
Serial.begin(115200);
}
/******************************************************************************
* Boucle principale
******************************************************************************/
void loop() {
}