mirror of
https://forge.apps.education.fr/blender-edutech/blender-edutech-tutoriels.git
synced 2024-01-27 09:42:33 +01:00
Mise en place des tests sur la commande des servo-moteurs (Arduino) et la vision (OpenCV)
This commit is contained in:
parent
f8b3727356
commit
987e4c44b1
6
labyrinthe/3-arduino_pyfirmata/test/README.md
Normal file
6
labyrinthe/3-arduino_pyfirmata/test/README.md
Normal 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
|
@ -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>
|
||||||
|
7
labyrinthe/6-jumeaux/test/README.md
Normal file
7
labyrinthe/6-jumeaux/test/README.md
Normal 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)
|
53
labyrinthe/6-jumeaux/test/cam_bille-test.py
Normal file
53
labyrinthe/6-jumeaux/test/cam_bille-test.py
Normal 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()
|
79
labyrinthe/6-jumeaux/test/manette-test/manette-test.ino
Normal file
79
labyrinthe/6-jumeaux/test/manette-test/manette-test.ino
Normal 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();
|
||||||
|
|
||||||
|
}
|
30
labyrinthe/6-jumeaux/test/servo-test/servo-test.ino
Normal file
30
labyrinthe/6-jumeaux/test/servo-test/servo-test.ino
Normal 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() {
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user