Draw me silly
Sommaire
Résumé de notre projet
Draw me silly est un projet qui se base sur les jeux pour enfants "ardoises magiques" et pictionnary. Le but principal de cet objet est de dessiner à l'aide d'un joystick qui va guider un crayon dont la mine ne se décollera jamais de la feuille.
Le matériel utilisé
- matériel
- 2 lecteurs CD récupérés sur un vieil ordinateur
- 2 moteurs - 2 élastiques
- 1 carte arduino + câble d'alimentation
- 1 joystick
- Des plaques fines de bois
- 1 règle
- 1 équerre
- 1 crayon
- Des vis
- 1 embout de compas pour maintenir le crayon
- Du ruban adhésif
- Outils et machines à commande numériques
- 1 soudeuse
- 1 pistolet à colle
- 1 découpeuse laser
- Tournevis
- 1 scie
- 1 lime à bois
- 1 perceuse
Création du mécanisme
Récupérez 2 lecteurs CD d'une vieille tour d'ordinateur. Démonter les mécanismes qui les contrôle et ne garder que les moteurs et le bati qui contrôlent l'entrée/sortie du lecteur.
Connecter les moteurs à la carte arduino par des fils. Cette dernière va donner les ordres aux moteurs selon les informations qu'elle va recueillir à partir du joystick.
Création de la structure
La structure est en réalité une boîte et des soutiens pour sécuriser le lecteur CD qui maintien le crayon. Cette dernière est créée à l'aide d'une découpeuse laser.
- Création de la boîte
Nous avons récupéré les plans d'une boîte sur le site suivant (en utilisant les dimensions que nous avions besoin): Nous avons ensuite transféré ses plan sur le logiciel inksape. Nous avons mis en rouge les tracés que nous souhaitions découper (si nous les laissions noir, la découpeuse laser n'aurait fait que les graver). De plus, nous avons supprimé une face de la boîte pour le lecteur CD qui fait bouger la feuille, ainsi que le fil d'alimentation puissent sortir de la structure. Une fois ces instructions envoyées à la découpeuse laser, il ne nous restait plus qu'à assembler la boîte et la sécuriser en utilisant un pistolet à colle (de la colle à bois ou de la colle forte aurait pu faire l'affaire).
- Création du support de lecteur CD
Pour réaliser le support, nous avons récupéré les plan d'une boîte sur le même site que ci-dessus. Nous y avons mis les dimensions que nous souhaitions, puis transféré au logiciel inkscape. Nous n'avons gardé que deux faces (longueur et largeur) et nous les avons mis en rouge pour les mêmes raisons que précédemment. Nous avons transmis les consignes à la découpeuse laser et notre support était créé!
- Assemblage
Pour l'assemblage entre la boîte et le support, nous avons tout d'abord fixé le lecteur CD qui maintient le crayon à la boîte, le plus proche de l'ouverture, à l'aide d'un pistolet à colle. Puis nous avons réajusté le support du lecteur CD à l'aide d'une lime à bois pour que tout s'emboîte parfaitement. Nous avons finalement fixé ce dernier sur la boîte et le lecteur CD déjà fixé à l'aide (une fois encore) d'un pistolet à colle.
Code arduino
// Nous utilisons 2 pins pour chaque commande du moteur, car l'intensité du signal de sortie d'un pin // est de 40Ma. Pour plus d'info voir la partie sur le cablage. int xMotorA1 = 10,xMotorA2 = 11,xMotorB1 = 12,xMotorB2 = 13; //moteur X sens A et B int yMotorA1 = 6,yMotorA2 = 7,yMotorB1 = 8,yMotorB2 = 9; //moteur Y sens A et B void setup() { // On défini les pins de controle du moteur en sortie pinMode(xMotorB1,OUTPUT); pinMode(xMotorB2,OUTPUT); pinMode(xMotorA1,OUTPUT); pinMode(xMotorA2,OUTPUT); pinMode(yMotorB1,OUTPUT); pinMode(yMotorB2,OUTPUT); pinMode(yMotorA1,OUTPUT); pinMode(yMotorA2,OUTPUT); Serial.begin(9600); } void loop() { double sensorValueX = analogRead(A1)/100.0; //recupération des données fournies par le joystick sur les pins A1 et A2 double sensorValueY = analogRead(A2)/100.0; //Serial.println(sensorValueX); //l'affichage dans la console permet de debuger et peut être placé en commentaire ensuite //Serial.println(sensorValueY); // SensorValue va de 0 a 10.23, on défini que entre 4.5 et 5.5 le moteur ne tourne pas // Il faut un espace suffisant pour etre sur que le moteur se soit éteint avant de changer de sens if (sensorValueX>4.5 && sensorValueX<5.5) //remise a zéro de la puissance en X { digitalWrite(xMotorA1,LOW); digitalWrite(xMotorA2,LOW); digitalWrite(xMotorB1,LOW); digitalWrite(xMotorB2,LOW); } if (sensorValueY>4.5 && sensorValueY<5.5) //remise a zéro de la puissance en Y { digitalWrite(yMotorA1,LOW); digitalWrite(yMotorA2,LOW); digitalWrite(yMotorB1,LOW); digitalWrite(yMotorB2,LOW); } if (sensorValueX>6) { digitalWrite(xMotorB1,LOW); //On met les pins contrôlant l'autre sens de rotation au cas où nous digitalWrite(xMotorB2,LOW); //passons trop vite d'un sens à l'autre que nous sautons l'intervalle 4.5-5.5 digitalWrite(xMotorA1,HIGH); //Alimentation de 2 pins pour avoir plus de courant digitalWrite(xMotorA2,HIGH); // on fais varier x dans le sens A } else if (sensorValueX<4) { digitalWrite(xMotorA1,LOW); digitalWrite(xMotorA2,LOW); digitalWrite(xMotorB1,HIGH); // on fait varier x dans le sens B digitalWrite(xMotorB2,HIGH); } if (sensorValueY>6) { digitalWrite(yMotorB1,LOW); digitalWrite(yMotorB2,LOW); digitalWrite(yMotorA1,HIGH); // on fait varier y dans le sens A digitalWrite(yMotorA2,HIGH); } else if (sensorValueY<4) { digitalWrite(yMotorA1,LOW); digitalWrite(yMotorA2,LOW); digitalWrite(yMotorB2,HIGH); // on fait varier y dans le sens B digitalWrite(yMotorB1,HIGH); } delay(10); // delay }