Projet IMA3 P3, 2017/2018, TD2 : Différence entre versions

De Wiki de Projets IMA
(Projet IMA3-SC 2017-2018)
(Visionnage en trois dimensions)
Ligne 25 : Ligne 25 :
  
 
=== Visionnage en trois dimensions ===
 
=== Visionnage en trois dimensions ===
 +
 +
[[Fichier:Camera_25px_moteur3D_test.png|500px|thumb|right|Tests du moteur 3D avec un cube (à gauche) et un graphique représentant à quoi devrait ressembler un graphique dans sa version finale (à droite) (fichiers disponible sur [https://github.com/pfrison/Projet-IMA3-SC-2019-TD2-P3 le Github du groupe])]]
 +
 +
Notre but ici est de visionner le profil de l'objet grâce à l'ombre qu'il produit lorsqu'il est devant la caméra. Il nous a donc donc fallu réalisé dans un premier temps un moteur graphique en trois dimension (le plus basique possible) pour afficher le résultat.
 +
 +
Les données envoyées au moteur pour le rendu sont :
 +
 +
* une liste de points avec trois dimensions
 +
* une liste de lignes avec 2 points par ligne
 +
* une liste de polygones avec trois ou plus points par polygone.
 +
 +
[[Fichier:Camera_25px_moteur3D_schema.png|200px|thumb|left|Cette image illustre les angles et la translation que réalise le moteur graphique]]
 +
 +
Pour le rendu, le script en Javascript applique trois transformations angulaires correspondant aux deux angles du repère sphérique, plus une autre rotation autour de l'axe de la caméra. Les trois rotations sont appelées : rotTheta, rotPhi, rotPsi.
 +
 +
Le script applique ensuite une translation des points suivant l'axe de la caméra. translation appelée transRho.
 +
 +
Notre scène est toujours en trois dimensions et ne peut pas être affichée sur un écran qui n'a que deux dimensions. Le script va alors réaliser une projection en perspective (une simple division : plus le point est loin de la caméra plus il sera proche du centre). Cette projection tiens comptes d'une distance appelée tirageMecanique qui est la distance entre l'écran et le point de perspective.
 +
 +
Une fois les coordonnées X et Y des points projetés sur l'écran, le moteur dessine les points, les lignes et les polygones sur l'écran.
 +
 +
En répétant l'opération régulièrement et en modifiant les coordonnées des points ou les angles ou la distance de la caméra à la scène, on obtient une animation.
 +
 +
Les codes sources (fichiers HTML avec du Javascript) sont disponibles sur [https://github.com/pfrison/Projet-IMA3-SC-2019-TD2-P3 le Github du groupe].
  
 
=== Contrôleur audio Android ===
 
=== Contrôleur audio Android ===

Version du 13 juin 2018 à 22:46

Projet IMA3-SC 2017-2018

Projet informatique

Cahier des charges

Construire une caméra 5x5 pixels grâce à des photorésistances. Nous ferons la démonstration de l'utilité d'un tel système :

  • Simple visionnage en 2 dimensions
  • Visionnage du profil d'un objet en 3 dimensions
  • Contrôle de divers système (exemple avec un contrôleur audio pour Android)

Matériel nécessaire

  • 25 photo-resistances
  • 25 résitances 2 kOhm
  • 25 transistors NPN (2n2222 ou equivalent)
  • 5 résistances 820 Ohm
  • 1 Arduino
  • 1 Raspberry PI 3

Communication série

Visionnage en deux dimensions

Visionnage en trois dimensions

Tests du moteur 3D avec un cube (à gauche) et un graphique représentant à quoi devrait ressembler un graphique dans sa version finale (à droite) (fichiers disponible sur le Github du groupe)

Notre but ici est de visionner le profil de l'objet grâce à l'ombre qu'il produit lorsqu'il est devant la caméra. Il nous a donc donc fallu réalisé dans un premier temps un moteur graphique en trois dimension (le plus basique possible) pour afficher le résultat.

Les données envoyées au moteur pour le rendu sont :

  • une liste de points avec trois dimensions
  • une liste de lignes avec 2 points par ligne
  • une liste de polygones avec trois ou plus points par polygone.
Cette image illustre les angles et la translation que réalise le moteur graphique

Pour le rendu, le script en Javascript applique trois transformations angulaires correspondant aux deux angles du repère sphérique, plus une autre rotation autour de l'axe de la caméra. Les trois rotations sont appelées : rotTheta, rotPhi, rotPsi.

Le script applique ensuite une translation des points suivant l'axe de la caméra. translation appelée transRho.

Notre scène est toujours en trois dimensions et ne peut pas être affichée sur un écran qui n'a que deux dimensions. Le script va alors réaliser une projection en perspective (une simple division : plus le point est loin de la caméra plus il sera proche du centre). Cette projection tiens comptes d'une distance appelée tirageMecanique qui est la distance entre l'écran et le point de perspective.

Une fois les coordonnées X et Y des points projetés sur l'écran, le moteur dessine les points, les lignes et les polygones sur l'écran.

En répétant l'opération régulièrement et en modifiant les coordonnées des points ou les angles ou la distance de la caméra à la scène, on obtient une animation.

Les codes sources (fichiers HTML avec du Javascript) sont disponibles sur le Github du groupe.

Contrôleur audio Android

Activité électronique

La partie électronique sera un quadrillage de 25 photorésistances avec une carte Arduino pour récupérer les informations et les transmettre à la partie informatique. L'Arduino affichera aussi l'image reconstituée sur une matrice de LED.

Nous avons testé et opté pour la cellule suivante :

Cellule.png

Ce schéma électrique (appelé cellule) sera le même pour les 25 photorésistances de notre quadrillage. Le transistor permet au courant de circuler ou non entre l'alimentation et le noeud intermédiaire du pont diviseur de tension. Si la tension à la base du transistor (la résistance R est ici pour délivrer du courant à la base) est de 5V (niveau logique haut) le courant passe (le courant est bloqué dans le cas 0V).

Nous connectons ensuite les cellules de la manière suivante :

Montage camera.png

Chaque colonnes sont connectés avec un pont diviseur de tension. Ce pont diviseur de tension permet à la tension au milieu du noeud d'être seulement fonction de la valeur de la photorésistance (les autres valeurs étant constantes). Il suffit maintenant de transformer cette tension en valeur binaire grâce à un convertisseur analogique-numérique et d'envoyer le résultat à la partie informatique.

Bien sûr, il nous faut commander chaque ligne pour autoriser ou non le passage du courant (principe du rolling shutter). Il faut autoriser le passage du courant dans une seule ligne et passer à la suivante dès que le convertisseur analogique-numérique a obtenu les valeurs de la ligne précédente.

Voici le schematics au complet (valeur des résistances aux bases des transistors : 2 kOmh, valeur des résistances proches des ports analogiques : 820 Omh) :

Camera 25px full schematics.PNG

Et voici le circuit imprimé finalement désigné :

Routage Camera.png

Et enfin, le circuit imprimé avec tous les composants soudés (la carte Arduino est connecté en dessous du circuit imprimé) :

Camera 25px photo circuit.jpg