Manège à résistances : Différence entre versions
(→Comment ça marche ?) |
|||
(14 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 16 : | Ligne 16 : | ||
* [[Utilisateur:Elie|Elie]] | * [[Utilisateur:Elie|Elie]] | ||
[[Catégorie:GroupeA]] | [[Catégorie:GroupeA]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Réaliser le projet == | == Réaliser le projet == | ||
− | |||
− | |||
− | |||
− | |||
+ | === Pouvoir choisir un tiroir === | ||
+ | Le but était de pouvoir à partir de la couleur de la résistance ou de sa valeur trouver son tiroir correspondant.Au début nous étions partis dans l'idée de faire des engrenages , c'est un dire un engrenage qui correspond aux valeur ainsi que un engrenage qui correspond aux couleurs et donc faire 3 jeu de deux engrenages qui correspondraient au deux chiffres significatif des résistances ainsi que leur puissance de dix .Puis au cour du projet pour se simplifier la tâche nous avons décidé de mettre les chiffres et les couleurs sur une même roue donc finalement nous n'avions plu que 3 roues. Pour capter la valeur de la résistance choisit ,nous avions prévu de placer dix résistances dans la roue qui serai alimentait par un fils de cuivre qui remonterait le long de l'arbre de la roue et chaque résistance correspondrait a une couleur et en capteur la valeur de la tension a la sortie de la resistance on aurai pu savoir avec un Arduino quel couleur et donc quel résistances avait été choisit? | ||
+ | <br>[[Fichier:Manége à resistance engrenage.jpg|500px|center]] | ||
=== Choisir et retrouver le tiroir de rangement des résistances recherchés === | === Choisir et retrouver le tiroir de rangement des résistances recherchés === | ||
− | + | L'objectif est de pouvoir rapidement trouver un tiroir à résistances en fonction des couleurs ou des valeurs des résistances. Pour ça, nous voulions utiliser un logiciel de dessin en 3D. Malheureusement toute nos tentatives se sont soldé par des échecs. | |
− | L'objectif est de pouvoir rapidement trouver un tiroir à résistances en fonction des couleurs ou des valeurs des résistances. Pour | ||
De plus, pour l'armature nous n'avons pas réussi à le mettre en place parce que nous n'avions pas assez de bois. | De plus, pour l'armature nous n'avons pas réussi à le mettre en place parce que nous n'avions pas assez de bois. | ||
Ligne 51 : | Ligne 37 : | ||
Cette partie est assez simple, il suffit de câbler une résistance fixe entre le 5V et une entrée analogique de la carte. On peut ensuite brancher la résistance à mesurer entre cette même entrée et GND. | Cette partie est assez simple, il suffit de câbler une résistance fixe entre le 5V et une entrée analogique de la carte. On peut ensuite brancher la résistance à mesurer entre cette même entrée et GND. | ||
− | Pour le programme, on fait un analogRead() sur l'entrée, et on récupère la valeur en faisait un calcul de pont diviseur. | + | Pour le programme, on fait un analogRead() sur l'entrée, et on récupère la valeur en faisait un calcul de pont diviseur.[[Media:]] |
− | === | + | Le code arduino: |
− | + | <code> | |
+ | int sensorPin = A0; | ||
+ | float sensorValue = 0; | ||
+ | const int divisor = 10000; //valeur de la résistance du pont diviseur en Ohm | ||
+ | float resistor_value = 0; //valeur de la résistance recherchée en Ohm | ||
− | == | + | void setup() { |
+ | pinMode(2, OUTPUT); | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | sensorValue = 5 * analogRead(sensorPin) / 1023.0; //on lit la tension et on la ramène en Volt | ||
+ | if (sensorValue < 5) { | ||
+ | resistor_value = (divisor * sensorValue) / (5 - sensorValue); // on fait le calcul du pont diviseur | ||
+ | Serial.println(resistor_value); // affichage de la valeur dans le moniteur série | ||
+ | } | ||
+ | }</code> | ||
+ | |||
+ | ==== Contrôler de nombreuses LEDs avec un nombre de sorties limité ==== | ||
+ | |||
+ | On a donc 14 LEDs à éteindre ou allumer suivant le tiroir que l'on veut indiquer. Or sur la carte arduino UNO à notre disposition il y a 14 sorties dont certaines sont réservées, ce n'est donc pas assez. | ||
+ | |||
+ | La première solution pour palier à ce problème consistait à utiliser des démultiplexeurs 8 vers 1 74HC595 qui permettent de contrôler 8 LEDs avec seulement 3 sorties de l'aduino. Ce composant reçoit un octet de données couplé à un signal d'horloge pour définir l'état de ses 8 sorties. Malheureusement ce type de matériel n'était pas disponible. | ||
− | + | On a donc trouvé une autre solution en câblant les LEDs sous forme de matrice suivant le schéma suivant: | |
+ | [[Image:matrice_resistances_enib2017.jpg|500px|center]] | ||
− | + | De cette façon, en activant par exemple les sorties 3 et 4 de l'arduino, on allumera la LED en bas à gauche. Le problème de cette solution est qu'on ne peut pas allumer au même moment deux LEDs situées sur une ligne et une colonne différente sans en allumer d'autres. | |
− | '' | + | Pour palier à cela, on va se servir du phénomène de persistance rétinienne de l’œil humain : en allumant les deux LEDs à tour de rôle, mais en les faisant clignoter très vite, l'observateur aura l'impression que les deux sont allumées en même temps. |
− | + | Le code arduino pour allumer 2 LEDs différentes suivant cette méthode: | |
− | |||
− | |||
− | + | <code>void setup() { | |
+ | pinMode(2, OUTPUT); | ||
+ | pinMode(3, OUTPUT); | ||
+ | pinMode(4, OUTPUT); | ||
+ | pinMode(5, OUTPUT); | ||
+ | pinMode(6, OUTPUT); | ||
+ | pinMode(7, OUTPUT); | ||
+ | pinMode(8, OUTPUT); | ||
+ | pinMode(9, OUTPUT); | ||
+ | pinMode(10, OUTPUT); | ||
− | + | } | |
− | |||
− | + | void loop() { | |
+ | digitalWrite(2, HIGH); //on allume la première LED | ||
+ | digitalWrite(5, HIGH); | ||
+ | delay(2); //pendant 2 millisecondes | ||
+ | digitalWrite(2, LOW); //on l'éteint | ||
+ | digitalWrite(5, LOW); | ||
− | + | digitalWrite(3, HIGH); //on allume la seconde LED | |
+ | digitalWrite(14, HIGH); | ||
+ | delay(2); //pendant 2 millisecondes | ||
+ | digitalWrite(3, LOW); //on l'éteint | ||
+ | digitalWrite(14, LOW); | ||
+ | }</code> | ||
− | + | [[Image:matrice_leds_montage_arduino_enib2017.jpg|500px|center|thumb|<center>Le montage avec la carte et les LEDs</center>]] | |
+ | == Comment ça marche ? == | ||
+ | |||
+ | Notre projet étant plus pratique que ludique pour les Fabriques du Ponant, nous n'avons pas vraiment quelque chose à observer, ni à expliquer. | ||
== Vous aimerez aussi == | == Vous aimerez aussi == | ||
''Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.'' | ''Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.'' | ||
− | |||
− | |||
− | |||
− |
Version actuelle datée du 26 janvier 2017 à 12:57
Cette page est une fiche écrite dans le cadre de l'Inter Semestre ENIB 2017
Le contenu de cette fiche est en cours de rédaction, elle va s'étoffer pendant tout le mois de janvier !
Sommaire
Le Manège à resistance
« Chapeau » du projet de fabrication numérique :
Un manège à résistance est un outils permettant de ranger des résistance suivant leur valeur. Nous avons penser à toute les fonctionnalité que nous pourrions rajouter pour qu'il soit ludique. Ainsi, nous voulions mettre au début un détecteur de résistance qui aurait allumé une led sur le tiroir correspondant à la valeur de la résistance. Nous voulions aussi mettre un détecteur de tiroir vide ainsi qu'un disque de valeur de résistance.
Auteurs
Ont participé à la rédaction de cette fiche :
Réaliser le projet
Pouvoir choisir un tiroir
Le but était de pouvoir à partir de la couleur de la résistance ou de sa valeur trouver son tiroir correspondant.Au début nous étions partis dans l'idée de faire des engrenages , c'est un dire un engrenage qui correspond aux valeur ainsi que un engrenage qui correspond aux couleurs et donc faire 3 jeu de deux engrenages qui correspondraient au deux chiffres significatif des résistances ainsi que leur puissance de dix .Puis au cour du projet pour se simplifier la tâche nous avons décidé de mettre les chiffres et les couleurs sur une même roue donc finalement nous n'avions plu que 3 roues. Pour capter la valeur de la résistance choisit ,nous avions prévu de placer dix résistances dans la roue qui serai alimentait par un fils de cuivre qui remonterait le long de l'arbre de la roue et chaque résistance correspondrait a une couleur et en capteur la valeur de la tension a la sortie de la resistance on aurai pu savoir avec un Arduino quel couleur et donc quel résistances avait été choisit?
Choisir et retrouver le tiroir de rangement des résistances recherchés
L'objectif est de pouvoir rapidement trouver un tiroir à résistances en fonction des couleurs ou des valeurs des résistances. Pour ça, nous voulions utiliser un logiciel de dessin en 3D. Malheureusement toute nos tentatives se sont soldé par des échecs. De plus, pour l'armature nous n'avons pas réussi à le mettre en place parce que nous n'avions pas assez de bois.
Détection d'une résistance et allumage d'une LED sur le tiroir correspondant
L'objectif était de pouvoir, en branchant une résistance à l'armoire, trouver automatiquement sa valeur et d'allumer une LED sur le tiroir correspondant afin de ranger la résistance facilement.
Comme l'objectif de base était d'avoir 48 tiroirs, autant de LEDs aurait été compliqué à gérer. Nous sommes donc partis sur l'idée de mettre 14 LEDs, 6 horizontales et 8 verticales: pour désigner un tiroir, on allume les 2 LEDs correspondant à la ligne et la colonne du tiroir.
Pour réaliser tout ça, on va mettre en oeuvre une solution sur la base d'une carte Arduino.
Utiliser l'Arduino comme Ohmmètre
Cette partie est assez simple, il suffit de câbler une résistance fixe entre le 5V et une entrée analogique de la carte. On peut ensuite brancher la résistance à mesurer entre cette même entrée et GND. Pour le programme, on fait un analogRead() sur l'entrée, et on récupère la valeur en faisait un calcul de pont diviseur.[[Media:]]
Le code arduino:
int sensorPin = A0;
float sensorValue = 0;
const int divisor = 10000; //valeur de la résistance du pont diviseur en Ohm
float resistor_value = 0; //valeur de la résistance recherchée en Ohm
void setup() {
pinMode(2, OUTPUT); Serial.begin(9600);
}
void loop() {
sensorValue = 5 * analogRead(sensorPin) / 1023.0; //on lit la tension et on la ramène en Volt if (sensorValue < 5) { resistor_value = (divisor * sensorValue) / (5 - sensorValue); // on fait le calcul du pont diviseur Serial.println(resistor_value); // affichage de la valeur dans le moniteur série }
}
Contrôler de nombreuses LEDs avec un nombre de sorties limité
On a donc 14 LEDs à éteindre ou allumer suivant le tiroir que l'on veut indiquer. Or sur la carte arduino UNO à notre disposition il y a 14 sorties dont certaines sont réservées, ce n'est donc pas assez.
La première solution pour palier à ce problème consistait à utiliser des démultiplexeurs 8 vers 1 74HC595 qui permettent de contrôler 8 LEDs avec seulement 3 sorties de l'aduino. Ce composant reçoit un octet de données couplé à un signal d'horloge pour définir l'état de ses 8 sorties. Malheureusement ce type de matériel n'était pas disponible.
On a donc trouvé une autre solution en câblant les LEDs sous forme de matrice suivant le schéma suivant:
De cette façon, en activant par exemple les sorties 3 et 4 de l'arduino, on allumera la LED en bas à gauche. Le problème de cette solution est qu'on ne peut pas allumer au même moment deux LEDs situées sur une ligne et une colonne différente sans en allumer d'autres. Pour palier à cela, on va se servir du phénomène de persistance rétinienne de l’œil humain : en allumant les deux LEDs à tour de rôle, mais en les faisant clignoter très vite, l'observateur aura l'impression que les deux sont allumées en même temps.
Le code arduino pour allumer 2 LEDs différentes suivant cette méthode:
void setup() {
pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH); //on allume la première LED digitalWrite(5, HIGH); delay(2); //pendant 2 millisecondes digitalWrite(2, LOW); //on l'éteint digitalWrite(5, LOW);
digitalWrite(3, HIGH); //on allume la seconde LED digitalWrite(14, HIGH); delay(2); //pendant 2 millisecondes digitalWrite(3, LOW); //on l'éteint digitalWrite(14, LOW);
}
Comment ça marche ?
Notre projet étant plus pratique que ludique pour les Fabriques du Ponant, nous n'avons pas vraiment quelque chose à observer, ni à expliquer.
Vous aimerez aussi
Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.