ISS Tracker : Différence entre versions
(→Guide d'assemblage) |
(→Ressources informatiques) |
||
(22 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
− | 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 | + | 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. |
− | |||
− | |||
+ | [[Fichier:ISS Tracker.jpg]][[Fichier:Logo enib.jpg]] | ||
== Matériel == | == Matériel == | ||
Ligne 11 : | Ligne 10 : | ||
- Une carte arduino uno | - Une carte arduino uno | ||
+ | |||
+ | - Une connexion internet | ||
- Deux servomoteurs à rotation continue | - Deux servomoteurs à rotation continue | ||
Ligne 26 : | Ligne 27 : | ||
- Un bouchon de liège | - 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. | ||
+ | |||
+ | [[Fichier:Plan ISS.jpg|700px]] | ||
+ | |||
+ | - 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. | ||
+ | |||
+ | [[Fichier:CylindreISS.jpg|400px]] | ||
+ | |||
+ | - 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) | |
+ | [[Fichier:Poulie1.jpeg|400px]] | ||
− | + | - 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. | |
− | - | ||
− | + | [[Fichier:lemaaaaat.jpg|400px]] | |
− | - | + | - Mettez ensuite les différents moteurs comme ceci: |
− | + | [[Fichier:Poulie2.jpg|400px]][[Fichier:socleISS.jpg|400px]] | |
− | - | + | - 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=== | ||
+ | <pre> | ||
+ | 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) | |
+ | </pre> | ||
− | - | + | 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/ttyS'''6''''. |
− | + | ===Arduino=== | |
+ | <pre> | ||
+ | #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); | ||
+ | } | ||
+ | </pre> | ||
− | + | 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=== | |
+ | <pre> | ||
+ | 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(); | ||
+ | </pre> | ||
− | + | 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 == | == Ressources informatiques == | ||
Ligne 92 : | Ligne 164 : | ||
Le plan de découpe du boitier ainsi que du mat | 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é: | ||
− | + | [[Fichier:CablageISS.jpg|400px]] | |
− | + | Compléments de gestion du module vertical | |
+ | * Montée | ||
+ | <pre> | ||
+ | #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); | ||
+ | } | ||
+ | </pre> | ||
+ | * Descente | ||
+ | <pre> | ||
+ | #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); | ||
+ | } | ||
+ | </pre> | ||
− | + | [[catégorie:enib2019]] |
Version actuelle datée du 23 janvier 2019 à 10:34
Sommaire
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.
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.
- 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.
- 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)
- 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.
- Mettez ensuite les différents moteurs comme ceci:
- 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
Pour ce qui est du montage, ici le fichier fritzing qui reprend tout le câblage que nous avons réalisé:
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); }