Tournicayou (Photogrammétrie)
Construction d'un appareil photogramméphotogrammétrique dans le cadre de l'UE Atelier Fablab LU3SV062
Informations
ÉÉtudiants :ZoéZoé ALBENGA (zoealbenga@outlook.com)- Lucas Gorini
- Encadrants :
- Responsables de l'UE : Fabrice Minoletti et Pierre
ThéThéry - Responsable du projet : Pierre
ThéThéry
- Responsables de l'UE : Fabrice Minoletti et Pierre
- Parcours : SV/ST : UE_FabLab : LU3ST062
- Date : S6
Contexte
Objectifs
Notre objectif de réréalisation pour cette UE est la d'un socle pour la photogramméphotogrammétrie. Celui-ci aurait comme application dans un premier temps la réréalisation "d'image en 3D" pour certaines pierres ponces, puis àà usage plus large par la suite.
MatéMatériel
- Carte Arduino
Construction
ÉÉtape 1 : https://github.com/ArduCAM/Arducam_mini
ÉÉtape 2 : https://www.youtube.com/watch?v=FlfrkJ08pnQ
ÉÉtape 3 : https://github.com/ArduCAM/Arduino
ÉÉtape 4 : https://github.com/ArduCAM/Arduino/issues/528
ÉÉtape 5 :
ÉÉtape 6 :
ÉÉtape 7 :
Journal de bord
30/01/26
1è1ère SéSéance : Sujet PhotogramméPhotogrammétrie (SchéSchéma) + DéDécouverte de ARDUINO
PremièPremièresréréflexionsréréalisation sur la de ce supportààphotogramméphotogrammétrie.RéRéalisation de plusieurs dessins "idéidées" (voir photos).PremièPremière manipulation avec le logiciel ARDUINO, premier codage. Bien difficile....
Codage avec Arduino, led clignotant SOS en morse.
06/02/26
2è2ème SéSéance : Retour sur le support (SchéSchémas) + Mise en place des diffédifférentes éétapes
- Reprise de la structure du support de
photogramméphotogrammétrie --> bras tournant autour du support - Mise en place des
diffédifférenteséétapes :- Moteur + programmation
- Moule
àà Tarte - Arduino +
camécaméras + affichage ordiàà voir ? - Soutiens-gorge : support
camécaméra + LED- Bonus :
éécran + angles + focuscamécaméras
- Bonus :
13/02/2026
3è3ème SéSéance : Gratuit Gratuit ecad + Arduino
FREECAD
Apprentissage des fonctions de base du logiciel Freecad. Plusieurs essais infructueux de la conception de la pièpièce crantécrantée permettant le support du moteur autour de l'objet àà photographier.
VidéVidéos youtube visionnévisionnées pour le modèmodèle Freecad :
- https://www.youtube.com/watch?v=3wPDnRFfgEg
- https://www.youtube.com/@cadgab/playlistshttps://www.youtube.com/@cadgab/playlists
LE COULOMMIERS EST TERMINÉTERMINÉ (18/02) - CôCôte Mauvaise
Pour crécréer le coulommiers, qui fait office d'engrenage interne permettant le dédéplacement du bras, il faut crécréer deux corps diffédifférents sur FreeCad. Les corps sont créécréés sur le module Part design
- Un cercle de 600 mm de
diamèdiamètre et 200 mm de haut - Un engrenage
ààdédévelopper de Dp = 495 mm, M = 2,5 mm, z = 198 et 200 mm de haut
Une fois les deux corps forméformés, il faut utiliser une boolébooléenne pour former le rouage final grâgrâce au module Part
Attention : Les valeurs inscrites sont les valeurs erronéerronées
ARDUINO
Familiarisation réréalisation avec le logiciel Arduino et d'un premier montage :
MatéMatériels :- Arduino Uno +
câcâble USB de liaison Arduino/Ordinateur CâCâbles de connexion- Moteur pas
àà pas 28 BYJ-48
- Arduino Uno +
SchéSchéma de connexion :
- Code :
- Ce code permet au moteur de
réréaliser une rotation dans le sens des aiguilles d'une montre, attendre 1 seconde(s), puis de faire une rotation dans le sens contraire des aiguilles d'une montre, puis de nouveau attendre 1 s.
- Ce code permet au moteur de
#include <Stepper.h>
double stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); // Pin inversion to make the library work
void setup() {
myStepper.setSpeed(10);
Serial.begin(9600);
}
void loop() {
// 1 rotation counterclockwise:
Serial.println("counterclockwise");
myStepper.step(stepsPerRevolution);
delay(1000);
// 1 rotation clockwise:
Serial.println("clockwise");
myStepper.step(-stepsPerRevolution);
delay(1000);
}
Une librairie Stepper.h existe.
-
SuccèSuccès de ce premier montage et codeassociéassocié. Manipulation du code nous permettant d'obtenir une rotation dans le sens des aiguilles d'une montre avecarrêarrêt de 1 s. (suppression de lapremièpremière partie de la void loop)- Rapidement essayez de changer de vitesse =
ÉÉCHEC --> comprendre pourquoiàà la prochaineséséance.
--> Prochaine éétape : RéRéaliser le montage avec ajout d'un potentiomèpotentiomètre permettant de contrôcontrôler la vitesse de rotation ainsi que le sens (--> potentiomèpotentiomètre vers la droite= sens des aiguilles d'une montre ; potentiomèpotentiomètre àà gauche = sens inverse )
20/02/2026
4è4ème SéSéance : Gratuit ecad + Arduino
Partie Freecad :
ModéModélisation du rouage pour le moteur pas àà pas, et reprise de dimension du coulommiers. Pour calculer le nombre de dents de chaque rouage, externe (Moteur) comme interne (Coulommiers) nous avons suivi l'ééquation suivante :
Dp/M = z
Dp => Le diamèdiamètre primitif ; M => Module du rouage ; z => Nombre de dents
Pour que deux engrenages puissent fonctionner ensemble il faut respecter 3 conditions :
- Ils doivent avoir un module
éégal - Ils doivent avoir un angle de pression
éégal (par convention20°20°) - Leur
diamèdiamètre primitif doitêêtre tangent
Pour le dernier point, la distance entre le centre des rouages Dr = ((z 1 +z 2 )*M)/2
Pour le coulommiers :
La modémodélisation comporte deux corps.
- Un cercle de 300 mm de
diamèdiamètre et 100 mm de haut - Un engrenage
ààdéveloppédéveloppé de Dp = 250 mm, M = 2,5 mm, z = 100 et 100 mm de haut
Pour former le rouage interne, il faut faire la diffédifférence des deux corps grâgrâce àà la boolébooléenne dans le module Part . (cf https://www.youtube.com/watch?v=3wPDnRFfgEg)
Pour le rouage externe ce dernier doit êêtre fixéfixé sur la "tige" du moteur faisant 19 mm de long. Il faut creuser un cylindre de 5mm de diamèdiamètre au centre du rouage avec une corde de 3mm afin de respecter l'aspect de la tige.
La modémodélisation comporte deux corps.
- Un cylindre de 5mm de
diamèdiamètrecoupécoupé d'une corde de 3mm et faisant 19mm de haut - Un engrenage externe de Dp = 45 mm, M = 2,5 mm, z = 18 et 19 mm de haut
Impression 3D des pièpièces pour essais ultéultérieurs.
ARDUINO
Retour sur le montage réréalisation et la du circuit de la semaine dernièdernière = ÉÉCHEC. Nous n'avons pas trouvétrouvé la raison pour laquelle la réréussite de la semaine passépassée n'éétait plus réréalisable. (Changement de moteur, vévérification et retour sur les explications du code, changement de code, vévérification du fonctionnement de la carte Arduino uno...)
RéRéalisation d'un autre montage avec le moteur Servo :
MatéMatériels :- Arduino Uno +
câcâble USB de liaison Arduino/Ordinateur CâCâbles de connexion- Microservo
àà moteur pasàà pas SG90
- Arduino Uno +
SchéSchéma de connexion :
- Code :
- Ce code permet au moteur de
réréaliser une rotation dans le sens des aiguilles d'une montre, attendre 1 seconde(s), puis de faire une rotation dans le sens contraire des aiguilles d'une montre, puis de nouveau attendre 1 s.
- Ce code permet au moteur de
AprèAprès plusieurs ééchecs, et des changements de codes, succèsuccès de la manipulation. Notre moteur se dédéplace de l'angle 0 àà l'angle 90, puis àà celui 180 avant de revenir àà 0 et de recommencer sa boucle. AprèAprès chaque dédéplacement celui-ci fait une pause de 1 s. Notre moteur avance degrédegré par degrédegré.
--> Prochaine éétape : Modification de notre code pour réréaliser un mouvement de 20°20° en 20°20° avec 1 s de dédélai entre chaque dédéplacement.
27/02/2026
Objectif de la séséance : Finaliser le code arduino pour le moteur, tester les pièpièces 3D, conception du bras
Nous avons commencécommencé la réréalisation des plans quant àà la partie qui tourne autour du coulommiers. Trois soirésoirées :
- Le support
mêmême du moteur, permettant sa fixation par vis. - La partie centrale,
dotédotée d'une roue permettant au socle tournant d'avancer sur les coulommiers. - Le support bras, avec des fentes permettant l'insertion du bras photo et des emplacement pour piles et carte arduino.
L'idéidée est de crécréer deux pièpièces s'assemblant comme un puzzle. La premièpremière composécomposée du socle moteur et de la partie centrale. L'autre du socle bras.


ARDUINO
Une partie des coulommiers dentédentés et le rouage du moteur sont dédésormais impriméimprimés ! Aujourd'hui sur un pu tester le gros moteur de 12 V, qui sera notre moteur final, avec donc le rouage modélisémodélisé par Lucas.
J'ai cramécramé la batterie brique de 12 V... Surement un problèproblème dans mon montage.
RéRéalisation d'un autre montage avec le moteur NEMA 17, moteur pas àà pas de 12 V :
MatéMatériels :- Arduino Uno +
câcâble USB de liaison Arduino/Ordinateur CâCâbles de connexion- Moteur Shield
- Moteur NEMA 17 pas
àà pas
- Arduino Uno +
SchéSchéma de connexion :
- Code :
- Ce code permet au moteur de
réréaliser une rotation dans le sens des aiguilles d'une montre, attendre 1 seconde(s), puis de faire une rotation dans le sens contraire des aiguilles d'une montre, puis de nouveau attendre 1 s.
- Ce code permet au moteur de
#include <AFMotor_R4.h>
const int stepsPerRevolution = 200; // nombre de pas du moteur
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
Serial.begin(9600);
motor.setSpeed(10); // vitesse en RPM
}
void loop() {
// Calcul du nombre de pas pour 20°20°
int stepsFor20Degrees = stepsPerRevolution / 18;
// Rotation sens horaire (aiguilles d'une montre)
motor.step(stepsFor20Degrees, FORWARD, SINGLE);
delay(1000); // arrêarrêt de 1 seconde
}
-
- Ce code fonctionne
plutôplutôttrètrès bien, ilréréalise donc une rotation dans le sens des aiguilles d'une montre ; fait20°20° puis fait une pause pour la photo.
- Ce code fonctionne
#include <AFMotor_R4.h>
const int stepsPerRevolution = 200; // nombre de pas du moteur
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
Serial.begin(9600);
motor.setSpeed(10); // vitesse en RPM
}
void loop() {
int stepsFor20Degrees = stepsPerRevolution / 18; // 20°20° ≈≈ 11 pas
// Un tour complet = 360°360° = 18 segments de 20°20°
for(int i = 0; i < 18; i++) {
motor.step(stepsFor20Degrees, FORWARD, SINGLE); // avance 20°20°
delay(2000); // pause de 2 secondes
}
// Pause longue àà la fin du tour
delay(10000); // pause de 10 secondes
}
Ce 2è2ème code est trètrès probablement mieux mais manque de fluiditéfluidité de mouvement : il ne réréalise pas forcéforcément tout le temps 20°20° degrédegré mais parfois moins et de manièmanière saccadésaccadé. Il réréalise donc 11 pas pour faire les 20°20° demandédemandées ; pause de 2 secondes ; puis reprends pour faire un tour complet de 20 par 20 ; pause de 10 s.
Ce code rend le moteur extrêextrêmement bruyant en plus du mouvement saccadésaccadé.
06/03/2026
Partie conception 3D : Le socle moteur
Conception du socle moteur sur Freecad. Les mesures sont encore àà vévérifier. Le socle est composécomposé d'un assemblage Freecad de deux pièpièces. La premièpremière correspond au support mêmême du moteur, et dispose de 4 trous de fixation permettant par vis et un cinquiècinquième plus grand permettant au bras du moteur de passer. (Le moteur est fixéfixé par la surface oùoù se situe le bras). L'autre pièpièce est un rectangle permettant l'insertion d'une roue àà billes, servant au roulement du support moteur sur les coulommiers. Cette pièpièce possèpossède un trou permettant le passage d'une tige maintenant la roue en place. La conception de cette tige en 3D est réaliséréalisée, mais reste àà voir pour sa conception (Impression 3D, mémétal, autre ?)(Au final Pierre a arrangéarrangé une vis pour la faire maintenir la roue). Le rectangle possèpossède un creux en forme de puzzle servant àà l'insertion du socle du bras, devant encore êêtre modélisémodélisé.
Fichier STL de la pièpièce dédécrite :
13/03/2026
Lucas : J'ai limélimé pendant deux heures le bloc, puis dédébut de la conception des plan pour la pièpièce arrièarrière.
Partie conception 3D : CréCréation de la pièpièce arrièarrière
La pièpièce arrièarrière a pour but de maintenir la machine autour du coulommiers et de servir de contre-poids au moteur. Celle-ci est composécomposée de deux parties principales, formant une pièpièce unique :
- La partie la plus importante est le gros
boîboîtier principal. Celui-ci fait ... de large, ... de haut et ... de long.ÀÀ l'intéintérieur une grandecavitécavité estlaissélaissée pour permettre de tenir lesdiffédifférents composantséélectriques. L'avant de lapièpiècepossèpossède lapièpièce de puzzlecomplécomplémentaire au support moteur, le rond deàà undiamèdiamètre de 15,5mm.ÀÀ partir du haut, au bout de ...mm, la face avant recule de 4mm pour que permettreàà un roulementàà billes de rouler sur le bord du coulommiers. Sur la partie basse, deux roues sontplacéplacés sur un arc de cercle fictif de 735mm dediamèdiamètre. Cet arc a lemêmême foyer que le coulommiers, les roues ainsiinclinéinclinées d'un angle de 6,60°60°àà partir de l'axe central de lapièpièce serventàà lapièpièceàà tourner plus facilement. - La
deuxièdeuxième partie est sur la partie haute de lapièpièce. Il s'agit d'un socle ayantàà l'avant de trous de 8,25mm de rayon permettant l'encoche du bras photographique.
Fichier STL de la pièpièce dédécrite :
ARDUINO
Aujourd'hui j'ai revu le code pour notre moteur afin que celui-ci réréalise 20°20° sur les coulommiers et non par rapport àà l'axe du moteur.
RéRéalisation d'un autre montage avec le moteur NEMA 17, moteur pas àà pas de 12 V :
MatéMatériels :- Arduino Uno +
câcâble USB de liaison Arduino/Ordinateur CâCâbles de connexion- Moteur Shield
- Moteur NEMA 17 pas
àà pas
- Arduino Uno +
SchéSchéma de connexion :
- Code :
- Petite partie calcule pour
réréaliser le code et essayer de trouver unefaçfaçon pour que le moteur soit un mouvement plus fluide et plussaccadésaccadé et bruyant.
- Petite partie calcule pour
coulommiers = 100 bosses ; rouage = 18 bosses ; moteur pas àà pas = 200 pas / tour
100/18=5.55 tours --> le bébébébé rouage effectuera donc 5.5 tour pour réréaliser un tour complet du tour interne du coulommiers.
200 x 5.55 = 1 111 pas --> le moteur lui devra donc réréaliser 1111 pas pour faire 360°360° donc un tour complet du coulommiers.
1111 x 20/360 = 61.7 pas --> le moteur devra réaliséréalisé environ 62 pas pour réréaliser 20°20° sur le coulommiers.
62 pas x 18 positions = 1 116 pas # 1 111 pas ! => possibilitépossibilité d'alternance entre 62 et 61 pas pour obtenir pile 360°360°
-
- Pour
ééviter que le moteur soitsaccadésaccadé on peut voir pour augmenter la vitesse dedédéplacement/ ou la diminuer.
- Pour
#include <AFMotor_R4.h>
const int stepsPerRevolution = 200; // pas moteur
const int stepsFor20Degrees = 62; // calcul avec engrenage
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
Serial.begin(9600);
motor.setSpeed(10); // vitesse RPM
}
void loop() {
// 360°360° / 20°20° = 18 positions
for(int i = 0; i < 18; i++) {
motor.step(stepsFor20Degrees, FORWARD, SINGLE);
Serial.print("Position : ");
Serial.println(i + 1);
delay(2000); // pause entre chaque mouvement
}
Serial.println("Tour complet terminéterminé");
delay(10000);
}
-
- 1er code
testétesté : FONCTIONNEL ! - Testez un autre code avec une alternance de 61 et 62 pas pour avoir pile
360°360° et voir si celui ci est plus fluide ou non.
- 1er code
#include <AFMotor_R4.h>
const int stepsPerRevolution = 200;
AF_Stepper motor(stepsPerRevolution, 2);
int positionIndex = 0;
// SéSéquence corrigécorrigée pour obtenir exactement 360°360°
int stepSequence[18] = {
62,62,62,62,62,62,
62,62,62,
61,
62,62,62,62,62,
62,62,
61
};
void setup() {
Serial.begin(9600);
motor.setSpeed(10);
Serial.println("Systeme de rotation initialise");
}
void loop() {
int steps = stepSequence[positionIndex];
motor.step(steps, FORWARD, INTERLEAVE);
Serial.print("Position : ");
Serial.println(positionIndex + 1);
positionIndex++;
delay(2000); // pause de 2 s entre chaque mouvement
if(positionIndex >= 18)
{
positionIndex = 0;
Serial.println("Tour complet termine");
delay(10000); // pause de 10 s aprèaprès le tour complet
}
}
Toujours un problèproblème de fluiditéfluidité, voir pour améaméliorer le 1er code ou le 2è2ème.
Test de diffédifférentes vitesses : 5 et 30 plus ou moins OK, toujours saccadésaccadé et bruyant --> voir microstep ?
Recherche pour les camécaméras : Arducam Shield Mini 5MP Plus :
- Montage possible :
-
- Carte SD
nénécessaire ? - Dans ce montage, le module
camécaméra 5MP seraitutiliséutilisé avec une carte Arduino UNO pour capturer des imagesàà intervallesréréguliers. Sans carte microSD, les photos ne peuvent pasêêtrestockéstockées directement sur lesystèsystèmeembarquéembarqué. ÀÀ la place, lesdonnédonnées de l'image au format JPEG serontenvoyéenvoyées via la liaisonsésérie (USB) vers un ordinateur. L'Arduinodédéclenche une prise de vue, transmet lesdonnédonnées binaires correspondantes, puis attend 30 secondes avant de recommencer (pour notre projet).- Comme l'Arduino Uno
possèpossède unemémémoirelimitélimitée, il estnénécessaire deréréduire larérésolution des images afin d'assurer un fonctionnement stable. --> utilisation d'une autre carte ? - Les images
reçreçues sur l'ordinateur peuvent ensuiteêêtre reconstruites etvisualisévisualiséesàà l'aide d'un programme externe, par exemple en Python.
- Carte SD
--> Prochaine séséance : Test de 25 - 5°5° pour améaméliorer la fluiditéfluidité + CAMÉCAMÉRAS ! redemander les bibliothèbibliothèques.
20/03/2026
On galègalère avec les camécaméras....
Partie conception 3D : CréCréation du bras photographique
Ce bras s'encoche dans la partie haute de la pièpièce arrièarrière. Il est conçconçu en une pièpièce unique (dûdû àà la limitation de taille d'impression de l'imprimante 3D, la pièpièce a étéété scindéscindé en deux pour les tests) en trois parties.
- La partie basale est
composécomposée de deux tubes permettant l'insertionàà lapièpiècearrièarrière. Les encocheséétant de 8,25mm de rayon, le tubes ont un rayon de 7,25mm. - Le bras
incurvéincurvé, arc de cercle de 692 mm dediamèdiamètre. Il forme un angle de 72,70°70°. Afin d'alléalléger la structure, mais aussi de limiter l'utilisation de plastique, des triangleséquilatééquilatéraux d'unearêarête de 34,1738mm sontdisposédisposés defaçfaçon alterne. Cinq triangles avec la pointe distal au support central, quatre avec une pointe qui lui est proximal. - Deux nouvelles encoches
àà 19,96°96° et 59,39°39° de 7mm dediamèdiamètre permettront l'insertion descamécaméras.
Fichier STL de la pièpièce dédécrite :
27/03/2026
Le bras du Tournicayou est impriméimprimé !
!!!! Comprendre les camécaméras !!!!
MatéMatériels :- Arduino Uno +
câcâble USB de liaison Arduino/Ordinateur CâCâbles de connexion- Module
camécaméra Mini 5MP Plus OV5642
- Arduino Uno +
SchéSchéma de connexion :
- Code :
- Essais avec
énorméénormément de codesdiffédifférents, beaucoup dedifficultédifficultés pour ce qui est de comprendre l'utilisation desdiffédifférentes fonctionsliéliéàà lacamécaméra.
- Essais avec
#include <Wire.h>
#include <SPI.h>
#include <ArduCAM.h>
#include "memorysaver.h"
#if !(defined OV5642_MINI_5MP_PLUS)
#error Please select the hardware platform and camera module in memorysaver.h
#endif
#define BMPIMAGEOFFSET 66
const int CS = 7;
bool is_header = false;
int mode = 0;
uint8_t start_capture = 0;
ArduCAM myCAM(OV5642, CS);
uint8_t read_fifo_burst(ArduCAM myCAM);
void setup() {
uint8_t vid, pid;
uint8_t temp;
Wire.begin();
Serial.begin(921600);
Serial.println(F("ACK CMD ArduCAM Start! END"));
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
SPI.begin();
// Reset camécaméra
myCAM.write_reg(0x07, 0x80);
delay(100);
myCAM.write_reg(0x07, 0x00);
delay(100);
// Test SPI
while (1) {
myCAM.write_reg(ARDUCHIP_TEST1, 0x55);
temp = myCAM.read_reg(ARDUCHIP_TEST1);
if (temp != 0x55) {
Serial.println(F("ACK CMD SPI interface Error! END"));
delay(1000);
} else {
Serial.println(F("ACK CMD SPI interface OK. END"));
break;
}
}
// VéVérif camécaméra
while (1) {
myCAM.wrSensorReg16_8(0xff, 0x01);
myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);
myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);
if ((vid != 0x56) || (pid != 0x42)) {
Serial.println(F("ACK CMD Can't find OV5642 module! END"));
delay(1000);
} else {
Serial.println(F("ACK CMD OV5642 detected. END"));
break;
}
}
myCAM.set_format(JPEG);
myCAM.InitCAM();
myCAM.OV5642_set_JPEG_size(OV5642_320x240);
delay(1000);
myCAM.clear_fifo_flag();
}
void loop() {
uint8_t temp;
if (Serial.available()) {
temp = Serial.read();
switch (temp) {
case 0x10:
mode = 1;
start_capture = 1;
Serial.println(F("ACK CMD CAM start single shoot. END"));
break;
case 0x11:
myCAM.set_format(JPEG);
myCAM.InitCAM();
break;
default:
break;
}
}
if (mode == 1) {
if (start_capture == 1) {
myCAM.flush_fifo();
myCAM.clear_fifo_flag();
myCAM.start_capture();
start_capture = 0;
}
if (myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK)) {
Serial.println(F("ACK CMD CAM Capture Done. END"));
read_fifo_burst(myCAM);
myCAM.clear_fifo_flag();
}
}
}
// --- Version corrigécorrigée pour Host App ---
uint8_t read_fifo_burst(ArduCAM myCAM) {
uint8_t temp = 0, temp_last = 0;
uint32_t length = myCAM.read_fifo_length();
if (length == 0 || length >= MAX_FIFO_SIZE) {
Serial.println(F("ACK CMD Size error. END"));
return 0;
}
myCAM.CS_LOW();
myCAM.set_fifo_burst();
temp = SPI.transfer(0x00);
length--;
while (length--) {
temp_last = temp;
temp = SPI.transfer(0x00);
if (is_header) {
Serial.write(temp); // flux JPEG pur
} else if ((temp == 0xD8) && (temp_last == 0xFF)) {
is_header = true;
Serial.write(temp_last);
Serial.write(temp); // dédébut JPEG
}
if ((temp == 0xD9) && (temp_last == 0xFF)) break; // fin JPEG
}
myCAM.CS_HIGH();
is_header = false;
return 1;
}
-
- Voici ci-dessus le dernier code
utiliséutilisé pour obtenir des photos et qui estliélié avec l'ArduCam Host App. - Dernier test
plutôplutôt positifs avec l'ArduCam Host App mais toujours pas unsuccèsuccès...
- Voici ci-dessus le dernier code
D'aprèaprès le logiciel on arrive àà prendre des photos (ArduCam Host App --> photo ci-dessous)
OùOù sont les photos ? C'est le plus gros des problèproblèmes, réréussir a retrouver les photos et savoir si celle-ci se sont réréellement enregistréenregistrées ou non, ou si plus génégénéralement on arrive vraiment àà prendre des photos.
Pour la prochaine séséance --> rérésoudre le problèproblème : oùoù sont les photos ?!?
03/04/2026
Objectif : se dédébarrasser du problèproblème CAMÉCAMÉRA !
https://www.arducam.com/camera-modules/5mp-ov5642/
Fab a du fil àà retordre
Le code photo fonctionne, il est possible de prendre des photos.
ProblèProblèmes :
- Au bout d'un certain nombre de photos, il n'est plus possible d'en prendre (D'
aprèaprès Claude c'est unproblèproblème de FIFOoùoù Host App/Arduino essaye de lire la photo avant qu'elle ne soit prise). - Il faut trouver un moyen d'automatiser les photos pour un tour complet de coulommiers.
- Reste
àà savoir si fonctionne avec deuxcamécaméras.
Partie conception 3D : RéRévision du coulommiers
La premièpremière version du coulommiers avait un léléger problèproblème de dimension. Notamment avec ses 20 centimècentimètres de haut. En réalitéréalité, le coulommiers ne nénécessite que 4 centimècentimètres de haut. Autre problèproblème auquel faire face... 60 centimècentimètre de diamèdiamètre sort du plateau d'impression de l'imprimante 3D.
Ainsi le nouveau coulommiers ne fait "que" 4 centimècentimètre de haut, est montémonté sur un un plateau support de 5 millimèmillimètres de diamèdiamètre permettant le roulement de la pièpièce arrièarrière. La structure montante du coulommiers est creuse, permettant d'user de moins de plastique. Le coulommiers a étéété modélisémodélisé en quart, avec des pièpièces mâmâles femelle basales permettant un montage en puzzle. Ces structures sont ainsi disposédisposées pour limiter un maximum au support moteur de rouler sur des failles. Cependant la partie mâmâle dédépasse toujours du support d'impression.
La pièpièce est encore àà revoir. Durant cette rérévision, le plateau support sera retravailléretravaillé afin de limiter au mieux l'usage de plastique.
10/04/2026
Photos multiples possible àà rérédiger
17/04/2026
on re test moteur sur roue --> problemo
Re modémodélisation de certaines pièpièces
Aujpurd'Aujourd'hui nous avons essayéessayé de monter les différrentesdifférentes pièces toutes ensembles. Plusieurs problemesproblèmes se sont alors présentéprésentés àà nous:
- Les puzzles ont des marges d'erreurs sur
estiméestimées. Il faudraitàà l'avenir les repenser afin de faciliter le montage. Toutes lescomplémentaritécomplémentarités sontàà revoir, nonobstant, celle entre le socle moteur et lapièpiècearrièarrière est primordiale. - La
pièpiècearrièarrière avaitétéétépensépensée pour avoir une roue permettant de faire encoche avec le coulommiers, permettant alors de maintenir le tout sans branlements. Il faudrait donc, soit retirer labutte,but - e, soit redesigner la
pièpièce dans son ensemble. - Le support moteur est
àà retravailler.ImaginerImaginé audédépart commenénécessitant unepièpiècecomplécomplémentaire pourêêtre stable, il devradorédorénavant obtenir unestabilitéstabilité autonome. L'idéidéedesera d'ajouter des butes sur le bord distal au foyer du coulommiers. Plusieursmodèmodèle de butes seronttestétestés. - Le coulommiers en lui
mêmême ne sera pasmodifiémodifié, mais des explicationssupplésupplémentaires quantàà sa conception peuventêêtreajoutéajoutées. Le principe du coulommiers est de permettre une rotation d'un bras photographique autour du support -substituant la rotation du support luimêmême-. Les dents sont sur la surface interne du coulommiers Pourquoi ? --> Pour permettre un ancrage par le rouage et une autre encocheàà la surfaceopposéopposée. L'idéidée derouerouage sur sur lecotécoté haut du coulommiers aétéétéproposéproposée. Elle ne nous semble que peuadéadéquate au projet. En effet, elle poserait plus deproblèproblèmes,necessitantnécessitant deux encoche, et unrougagerouage circulaireaà lacitroen.Citroën. IMPOSSIBLE.



