Caméra panoramique

Tom, Anissa, Romain

Objectif

Mettre en place une caméra sur un support orientable, de manière à pouvoir :

  • Stabiliser la direction de prise de vue (compenser le mouvement de rotation de la nacelle)
  • Choisir la direction de la vue (pilotage en temps réel par onde radio ou bien mouvement préprogrammé)

Il sera ainsi possible, par une série de prises de vues à différents angles, de réaliser des photos panoramiques.

Tâches à réaliser

Analyse fonctionnelle

Il faut un appareil qui résiste au froid et qui ne consomme pas trop énergie. Il faut aussi qui ne pèse pas trop lourd.

Il faut aussi que le moteur puisse être contrôlé a distance avec une boussole (nord, sud, est, ouest).

Mise en œuvre de capteurs

Le Nord magnétique ne coïncide pas tout à fait avec le Nord géographique, pour cela, il faut connaitre la déclinaison magnétique, qui dépend de la latitude et de la longitude du lieu et également de la date. On peut utiliser un calculateur en ligne :

Mise en œuvre de moteurs

Besoin : il faut une motorisation capable de décrire un angle de 360° au moins, avec une précision de l’ordre de (suffisant pour faire une photo panoramique)

Moteur pas à pas

Il faut un moteur le plus petit possible, car le système de caméra panoramique doit être très léger. Nous avons récupéré un moteur dans un vieux lecteur DVD d’ordinateur.

On a mesuré les résistance aux bornes des ports du moteur pas à pas, on en a déduit que le port numéro 3 (celui au centre) était le com.

Avantage : contrôle au pas près, assez précis, pas de limite d’angle

 

Problème, le guidage en rotation est assuré aux deux extrémités de la vis, et si on coupe le bâti (pour pouvoir fixer la caméra sur la vis) on perd la liaison : la vis n’est plus guidée correctement et le moteur devient inutilisable !

Malgré d’autres recherches, nous n’avons pas trouvé de petit moteur pas à pas …

 

Moteur CC

Une solution en apparence simple, mais il est difficile de trouver un tout petit moteur.

Nous avons fait des essais, mais l’inconvénient, c’est que ce type de moteur tourne très vite et es difficile à contrôler en position …

Servomoteur

Les servomoteurs sont des système avec moteur, réducteur et mesure d’angle.

Les servomoteurs « classiques » sont limités en amplitude angulaire (180° maximum environ). Il faut donc utiliser un servomoteur à rotation continue.

Avantages : facile à piloter, couple résiduel quand on coupe l’alimentation, pas de limite d’angle.

 

Conception et assemblage

Support pour la caméra

Programmation

Pour que la caméra se positionne dans la position souhaitée, il faut mesurer son orientation absolue (par rapport au champ magnétique Terrestre), et élaborer une loi de commande.

Programme Arduino

/*
 * Controle caméra manoramique
 * 
 * avec :
 *  - HMC5883L Compas numérique 3 axes
 *  - servomoteur à rotation continue
 */

#include <Servo.h>
#include <Wire.h>
#include <HMC5883L.h>

Servo myservo;
const int mid = 1320;    // Temps haut du signal PPM pour avoir une vitesse nulle
const int max_vit = 60;  // Ecart maxi (en ms) de temps haut pour piloter le moteur

HMC5883L compas;

int pos_cons = 180;

// Pour correcteur PID :
const float kP = 1;
const float kI = 0.001;
float cum_e = 0;      // écart cumulé
unsigned long  t = 0; // instant "actuel"
unsigned long _t = 0; // instant précédent


void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  myservo.attach(9);
  myservo.writeMicroseconds(mid);  // Servomoteur en position arrêt

  while (!compas.begin())
  {
    Serial.println("Aucun HMC5883L trouve !");
    delay(500);
  }
 
  // Plage de mesure : 0.88 Gauss (intensité du champ magnétique Terrestre ~ 0.5 Gauss)
  compas.setRange(HMC5883L_RANGE_0_88GA);
  // Mode de mesure : continue
  compas.setMeasurementMode(HMC5883L_CONTINOUS);
  // Fréquence de rafraichissement des données : 30Hz
  compas.setDataRate(HMC5883L_DATARATE_30HZ);
  // Nombre d'échantillons par mesure
  compas.setSamples(HMC5883L_SAMPLES_8);
  // Offset de calibration
  compas.setOffset(-14, -126);
  //-524:496:-596:343:-14:-126
}

void loop() {
  // Acquisition consigne de position angulaire
  if(Serial.available()>0) {
     pos_cons = Serial.parseInt();
  }

  // Acquisition de la position angulaire de la caméra
  int orientation = 0;
  for (int i = 0; i<10 ; i++){
    orientation += get_pos();
    delay(5);
  }
  orientation /= 10;

  // Affichage de la position angulaire / consigne de position
  Serial.print("Orientation = ");
  Serial.print(orientation);
  Serial.print("\t/\t");
  Serial.print(pos_cons);

  // Calcul de l'écart angulaire à combler
  int ecart = orientation - pos_cons;
  if (ecart > 180) ecart -= 360;
  else if (ecart < -180) ecart += 360;

  // Calcul de la "vitesse"
  t = millis();
  cum_e += float(ecart) * float(t - _t);
  _t = t;
  int vit = int(float(ecart)*kP + cum_e * kI);
  if (vit > max_vit) vit = max_vit;
  else if (vit < -max_vit) vit = -max_vit;
  
  myservo.writeMicroseconds(mid+vit);

  Serial.print("\t(");
  Serial.print(ecart);
  Serial.print(" ; ");
  Serial.print(vit);
  Serial.println(")");

  delay(10);
}




////////////////////////////////////////////////////////////////////////
int get_pos(){
  Vector v = compas.readNormalize();
 
  // Calcul de l'angle d'orientation
  float orientation = atan2(v.YAxis, v.XAxis);
 
  // Correction pour orientation < 0deg et pour orientation > 360deg
  if (orientation < 0)
  {
    orientation += 2 * PI;
  }
 
  if (orientation > 2 * PI)
  {
    orientation -= 2 * PI;
  }
 
  // Conversion en degrés
  return int(orientation * 180/M_PI); 
}

 

Analyse des performances

Expérimentations et mesures (efficacité, poids, consommation énergétique, …
moteur pas à pas

 

http://translate.google.com/translate?hl=fr&sl=auto&tl=fr&u=http%3A%2F%2Fwww.jarzebski.pl%2Farduino%2Fczujniki-i-sensory%2F3-osiowy-magnetometr-hmc5883l.html

 

 

 

Répartition des tâches

A compléter !

date
Tom Anissa Romain
21/01/19
28/01/19 arduino montage arduino montage arduino montage
04/02/19 arduino programme arduino programme arduino programme
04/03/19 arduino programme arduino programme Cablage moteur
11/03/19 arduino programme+soudage arduino programme+soudage arduino programme+soudage
23/03/19 compas compas compas

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *