ISS Tracker

De Les Fabriques du Ponant
Aller à : navigation, rechercher

ISS Tracker

L'ISS Tracker (ou traqueur d'ISS) est un montage permettant d'indiquer, en temps réel, la position de la Station spatiale internationale (ou ISS) par rapport à un planisphère représenté sous la forme d'un cylindre.

ISS Tracker.jpgLogo enib.jpg

Matériel

- Une planche de bois (300mm x 600mm)

- Une carte arduino uno

- Une connexion internet

- Deux servomoteurs à rotation continue

- Papier

- Corde

- Marteau

- Pistolet à colle

- Carton

- Un bouchon de liège

- Scotch (invisible/transparant)

Guide d'assemblage

- Tout d’abord, afin de gagner du temps il est conseiller de lancer la découpe de la plaque de bois afin d’obtenir les différentes parties constituant la boîte ainsi que le mat. Cependant, la face supérieur (là où il est inscrit « ISS Tracker ») possède sur sa partie droite, un trou sous la forme d’un rectangle. Avant de lancer la découpe laser de ce plan, il faut s'assurer que l'un de vos servomoteur loge dans ce trou avec, sur la longueur, un millimètre de marge pour l'installation.

Plan ISS.jpg

- Lancer la découpe des pièces

- Pour réaliser le cylindre nous avons avant tout découper deux (ou plus) disque de carton de 88mm de diamètre. Pour consolider le tout nous avons intégré quelques tiges de bois afin de réaliser la structure du cylindre. A chaque étage nous avons collé chaque tige à chaque bout de carton puis nous avons coller le planisphère en papier sur cette structure (pour cette application, un simple tube de colle blanche suffit). Pour finaliser ce cylindre il faut simplement mettre du scotch pour fixer ensemble les deux extrémités du planisphère.

CylindreISS.jpg

- Téléverser le programme sur la carte arduino Uno.

- Montez la face supérieur du boîtier avec les faces latérales et la face avant, en effet laisser la face arrière et la face inférieur peuvent compliquer les choses si on les assembles en premier.

- Pour réaliser la bobine servant à faire monter et descendre l'ISS, nous avons simplement utilisé un demi bouchon de liège et deux disque de carton avec un diamètre légèrement plus large que le diamètre du bouchon (je dis légèrement car ces deux disques doivent pouvoir être contenus dans le socle)

Poulie1.jpeg

- En ce qui concerne le mat, il suffit d'assembler les différentes parties avec un pistolet à colle et une fois le tout assemblé, nous avons put le coller sur le socle.

Lemaaaaat.jpg

- Mettez ensuite les différents moteurs comme ceci:

Poulie2.jpgSocleISS.jpg

- Après cette partie terminée, il ne manque plus qu'a fixer le cylindre sur le servomoteur de droite en emboitant la roue dentée du servo dans le disque inférieur du cylindre.

- Astuce bonus : lorsque nous avons réalisé notre projet nous avons décidé de relier le cylindre et le mat par le haut afin de solidifier quelque peut le cylindre et surtout pour s'assurer que son axe reste suffisamment droit. Pour cela nous avons simplement découpé un morceau de carton avec un trou au bout et nous avons scotché l'autre extrémité du carton au sommet du mat.

Code

Script python

import serial
import time
import urllib2
import json

ArduinoSerial = serial.Serial(port='/dev/ttyS6',baudrate=9600)

while 1 :

	time.sleep(1)

	req = urllib2.Request("http://api.open-notify.org/iss-now.json")
	response = urllib2.urlopen(req)

	obj = json.loads(response.read())

	data = ""
	data = obj['iss_position']['latitude'] + " " + obj['iss_position']['longitude']
	databytes = data.encode('utf-8')

	print 'donnee envoyee'
	print data

	ArduinoSerial.write(databytes)

	time.sleep(4)

Ce script python, à lancer depuis un terminal met en relation l'API utilisée pour récupérer la position de l'ISS (http://api.open-notify.org/iss-now.json) avec l'Arduino Uno utilisée pour notre projet. Ici, l'arduino est branchée sur le port série COM6 (information disponible dans le gestionnaire de périphérique ou le logiciel Arduino). Le terminal utilisé étant le bash Ubuntu pour Windows 10 nous oblige a passer par le port '/dev/ttyS6'.

Arduino

#include <Servo.h>

char data, latitude, longitude;
int count = 0;
bool montee = false;

Servo servolong, servolat;

void setup() {
  Serial.begin(9600);
  servolong.attach(9);
  servolat.attach(10);
}

void loop() {
  if (montee) {
    servolat.write(0);
    delay(120);
    servolat.write(92);
    count = count + 1;
  }
  else {
    servolat.write(180);
    delay(100);
    servolat.write(92);
    count = count + 1;
  }

  if (count > 25){
    if (montee){
      montee = false;
    }
    else {
      montee = true;
    }
    count = 0;
  }
 
 servolong.write(120);
 delay(50);
 servolong.write(90);
 delay(2000);
}

Ce code Arduino est celui permettant une simulation du déplacement de l'ISS en accéléré.

Afin de pouvoir régler la position du module vertical, deux codes arduino sont déposés dans les ressources permettant de monter ou descendre le module.

Communication entre l'arduino et le script python

while (Serial.available()){
    datastring = Serial.readString();                             //On récupère les données envoyées par le script python
    index = datastring.indexOf(' ');                              //On sépare la chaine de charactères en deux données indépendantes
    
    latitude = datastring.substring(0,index);
    longitude = datastring.substring(index + 1);
    
    nextlat = latitude.toInt();
    nextlong = longitude.toInt();

Ce code permet de récupérer dans deux données de type int les valeurs respectives de la latitude et de la longitude de l'ISS.

Ressources informatiques

Le plan de découpe du boitier ainsi que du mat

Media:BoitierISS.svg

Pour ce qui est du montage, ici le fichier fritzing qui reprend tout le câblage que nous avons réalisé:

CablageISS.jpg

Compléments de gestion du module vertical

  • Montée
#include <Servo.h>

Servo servolat;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servolat.attach(10);
}

void loop() {
  servolat.write(0);
  delay(200);
  servolat.write(92);
  delay(1000);
}
  • Descente
#include <Servo.h>

Servo servolat;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servolat.attach(10);
}

void loop() {
  servolat.write(180);
  delay(200);
  servolat.write(92);
  delay(1000);
}