Skip to main content

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
  • Parcours : SV/ST : UE_FabLab : LU3ST062 
  • Date : S6

Contexte


 

Objectifs

Notre objectif de alisation pour cette UE est la d'un socle pour la photogramméphotogrammétrie. Celui-ci aurait comme application dans un premier temps la 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

re ance : Sujet PhotogramméPhotogrammétrie (SchéSchéma) + couverte de ARDUINO

  • PremièPremières flexions alisation sur la de ce support àà photogramméphotogrammétrie.
  • alisation de plusieurs dessins "idéidées" (voir photos).
  • PremièPremière manipulation avec le logiciel ARDUINO, premier codage. Bien difficile....1er essai ARDUINO.png
 

Codage avec Arduino, led clignotant SOS en morse.

06/02/26

me 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 + focus camécaméras
13/02/2026

me 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 : 

LE COULOMMIERS EST TERMINÉTERMINÉ (18/02) - te Mauvaise

Pour crécréer le coulommiers, qui fait office d'engrenage interne permettant le 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 àà 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 alisation avec le logiciel Arduino et d'un premier montage :

  • MatéMatériels :
    • Arduino Uno + ble USB de liaison Arduino/Ordinateur
    • bles de connexion
    • Moteur pas àà pas 28 BYJ-48

 

  • SchéSchéma de connexion :

Moteur pas à pas de montage 28BYJ-48.pngMoteur pas à pas de montage 28BYJ-48.png

  •  Code : 
    • Ce code permet au moteur de 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.
#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 code associéassocié. Manipulation du code nous permettant d'obtenir une rotation dans le sens des aiguilles d'une montre avec arrêarrêt de 1 s. (suppression de la premièpremière partie de la void loop) 
    • Rapidement essayez de changer de vitesse = ÉÉCHEC --> comprendre pourquoi àà la prochaine ance.

--> Prochaine éétape : 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

me 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 convention 20°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ètre coupé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 alisation et la du circuit de la semaine dernièdernière = ÉÉCHEC. Nous n'avons pas trouvétrouvé la raison pour laquelle la ussite de la semaine passépassée n'éétait plus alisable. (Changement de moteur, rification et retour sur les explications du code, changement de code, rification du fonctionnement de la carte Arduino uno...)

alisation d'un autre montage avec le moteur Servo :

  • MatéMatériels :
    • Arduino Uno + ble USB de liaison Arduino/Ordinateur
    • bles de connexion
    • Microservo àà moteur pas àà pas SG90

 

  • SchéSchéma de connexion :

montage-servo.png


  •  Code : 
    • Ce code permet au moteur de 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.

AprèAprès plusieurs ééchecs, et des changements de codes, succèsuccès de la manipulation. Notre moteur se place de l'angle 0 àà l'angle 90, puis àà celui 180 avant de revenir àà 0 et de recommencer sa boucle. AprèAprès chaque placement celui-ci fait une pause de 1 s. Notre moteur avance degrédegré par degrédegré.

--> Prochaine éétape : Modification de notre code pour aliser un mouvement de 20°20° en 20°20° avec 1 s de lai entre chaque placement.

 

27/02/2026

Objectif de la ance :  Finaliser le code arduino pour le moteur, tester les pièpièces 3D, conception du bras

Nous avons commencécommencé la alisation des plans quant àà la partie qui tourne autour du coulommiers. Trois soirésoirées :

  • Le support 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.Plan Fablab socle BM 3.jpegPlan Fablab socle BM 2.jpegPlan Fablab socle BM 1.jpeg

 

ARDUINO

Une partie des coulommiers dentédentés et le rouage du moteur sont 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.

alisation d'un autre montage avec le moteur NEMA 17, moteur pas àà pas de 12 V :

  • MatéMatériels :
    • Arduino Uno + ble USB de liaison Arduino/Ordinateur
    • bles de connexion
    • Moteur Shield
    • Moteur NEMA 17 pas àà pas

 

  • SchéSchéma de connexion :

Capture d'écran 2026-03-20 102959.jpgCapture d'écran 2026-03-20 102959.jpg

  •  Code : 
    • Ce code permet au moteur de 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.
#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ôt trètrès bien, il alise donc une rotation dans le sens des aiguilles d'une montre ; fait 20°20° puis fait une pause pour la photo.
#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 me code est trètrès probablement mieux mais manque de fluiditéfluidité de mouvement : il ne alise pas forcéforcément tout le temps 20°20° degrédegré mais parfois moins et de manièmanière saccadésaccadé. Il 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 àà rifier. Le socle est composécomposé d'un assemblage Freecad de deux pièpièces. La premièpremière correspond au support 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 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, 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 crite : 

13/03/2026

Lucas : J'ai limélimé pendant deux heures le bloc, puis 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 :

  1. 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 grande cavitécavité est laissélaissée pour permettre de tenir les diffédifférents composants éélectriques. L'avant de la pièpièce possèpossède la pièpièce de puzzle complécomplémentaire au support moteur, le rond de àà un diamè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 sont placéplacés sur un arc de cercle fictif de 735mm de diamèdiamètre. Cet arc a le me foyer que le coulommiers, les roues ainsi inclinéinclinées d'un angle de 6,60°60° àà partir de l'axe central de la pièpièce servent àà la pièpièce àà tourner plus facilement. 
  2. La deuxièdeuxième partie est sur la partie haute de la piè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 crite : 

ARDUINO

Aujourd'hui j'ai revu le code pour notre moteur afin que celui-ci alise 20°20° sur les coulommiers et non par rapport àà l'axe du moteur.

alisation d'un autre montage avec le moteur NEMA 17, moteur pas àà pas de 12 V :

  • MatéMatériels :
    • Arduino Uno + ble USB de liaison Arduino/Ordinateur
    • bles de connexion
    • Moteur Shield
    • Moteur NEMA 17 pas àà pas
  • SchéSchéma de connexion :

Capture d'écran 2026-03-20 102959.jpgCapture d'écran 2026-03-20 102959.jpg

  •  Code : 
    • Petite partie calcule pour aliser le code et essayer de trouver une façfaçon pour que le moteur soit un mouvement plus fluide et plus saccadésaccadé et bruyant.

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 aliser un tour complet du tour interne du coulommiers.

200 x 5.55 = 1 111 pas --> le moteur lui devra donc 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 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 soit saccadésaccadé on peut voir pour augmenter la vitesse de placement/ ou la diminuer.
#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.
#include <AFMotor_R4.h>

const int stepsPerRevolution = 200;

AF_Stepper motor(stepsPerRevolution, 2);

int positionIndex = 0;

// 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 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 :

ArduinoConnection--300x300  Cablage caméra.jpgArduinoConnection--300x300  Cablage caméra.jpg 

    • Carte SD cessaire ? 
    • Dans ce montage, le module camécaméra 5MP serait utiliséutilisé avec une carte Arduino UNO pour capturer des images àà intervalles guliers. Sans carte microSD, les photos ne peuvent pas êêtre stockéstockées directement sur le systèsystème embarquéembarqué.
    • ÀÀ la place, les donnédonnées de l'image au format JPEG seront envoyéenvoyées via la liaison rie (USB) vers un ordinateur. L'Arduino clenche une prise de vue, transmet les donnédonnées binaires correspondantes, puis attend 30 secondes avant de recommencer (pour notre projet).
    • Comme l'Arduino Uno possèpossède une moire limitélimitée, il est cessaire de duire la 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 et visualisévisualisées àà l'aide d'un programme externe, par exemple en Python.

--> Prochaine ance : Test de 25 - 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 ( àà 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.

  1. La partie basale est composécomposée de deux tubes permettant l'insertion àà la pièpièce arrièarrière. Les encoches éétant de 8,25mm de rayon, le tubes ont un rayon de 7,25mm.
  2. Le bras incurvéincurvé, arc de cercle de 692 mm de diamè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'une arêarête de 34,1738mm sont disposédisposés de façfaçon alterne. Cinq triangles avec la pointe distal au support central, quatre avec une pointe qui lui est proximal.
  3. Deux nouvelles encoches àà 19,96°96° et 59,39°39° de 7mm de diamèdiamètre permettront l'insertion des camécaméras.

Fichier STL de la pièpièce crite : 

27/03/2026

Le bras du Tournicayou est impriméimprimé !

!!!! Comprendre les camécaméras !!!!

  • MatéMatériels :
    • Arduino Uno + ble USB de liaison Arduino/Ordinateur
    • bles de connexion
    • Module camécaméra Mini 5MP Plus OV5642
  • SchéSchéma de connexion :

ArduinoConnection--300x300  Cablage caméra.jpgArduinoConnection--300x300  Cablage caméra.jpg

  •  Code
    • Essais avec énorméénormément de codes diffédifférents, beaucoup de difficultédifficultés pour ce qui est de comprendre l'utilisation des diffédifférentes fonctions liélié àà la camécaméra.
#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;
    }
  }

  // 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);  // 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 est liélié avec l'ArduCam Host App.
    • Dernier test plutôplutôt positifs avec l'ArduCam Host App mais toujours pas un succèsuccès...

D'aprèaprès le logiciel on arrive àà prendre des photos (ArduCam Host App --> photo ci-dessous)

sont les photos ? C'est le plus gros des problèproblèmes, ussir a retrouver les photos et savoir si celle-ci se sont ellement enregistréenregistrées ou non, ou si plus génégénéralement on arrive vraiment àà prendre des photos.

Pour la prochaine ance --> soudre le problèproblème : sont les photos ?!?

03/04/2026

Objectif : se 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 un problèproblème de FIFO 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 deux camécaméras.

Partie conception 3D : vision du coulommiers

La premièpremière version du coulommiers avait un ger problèproblème de dimension. Notamment avec ses 20 centimècentimètres de haut. En réalitéréalité, le coulommiers ne 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 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 le passe toujours du support d'impression. 

La pièpièce est encore àà revoir. Durant cette vision, le plateau support sera retravailléretravaillé afin de limiter au mieux l'usage de plastique.

10/04/2026

Photos multiples possible àà 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 les complémentaritécomplémentarités sont àà revoir, nonobstant, celle entre le socle moteur et la pièpièce arrièarrière est primordiale. 
  • La pièpièce arriè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 la butte,but
  • e, soit redesigner la pièpièce dans son ensemble. 
  • Le support moteur est àà retravailler. ImaginerImaginé au part comme cessitant une pièpièce complécomplémentaire pour êêtre stable, il devra dorédorénavant obtenir une stabilitéstabilité autonome. L'idéidée de sera d'ajouter des butes sur le bord distal au foyer du coulommiers. Plusieurs modèmodèle de butes seront testétestés.
  • Le coulommiers en lui me ne sera pas modifiémodifié, mais des explications supplésupplémentaires quant àà sa conception peuvent êêtre ajoutéajoutées. Le principe du coulommiers est de permettre une rotation d'un bras photographique autour du support -substituant la rotation du support lui me-. Les dents sont sur la surface interne du coulommiers Pourquoi ? --> Pour permettre un ancrage par le rouage et une autre encoche àà la surface opposéopposée. L'idéidée de rouerouage sur sur le cotécoté haut du coulommiers a étéété proposéproposée. Elle ne nous semble que peu adéadéquate au projet. En effet, elle poserait plus de problèproblèmes, necessitantnécessitant deux encoche, et un rougagerouage circulaire aà la citroen.Citroën. IMPOSSIBLE.