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