Transformer une Arduino UNO en pseudo Makey Makey

Img 20170309 191729

Difficulté:

Je vous propose de transformer votre Arduino Uno en pseudo Makey Makey ! Pourquoi pseudo ? Car pour réaliser une véritable Makey Makey il faut utiliser une Arduino Leonardo, qui à la différence de la Uno, peut être considéré par le PC comme une souris ou un clavier. En effet, la Uno n’est détectée par l’ordinateur que comme un port série et non comme un périphérique USB. C’est l’une des différences entre la Uno et la Leonardo. Alors à quoi peut servir cette pseudo Makey Makey ? Eh bien elle n’est pas d’utilité avec un ordinateur, mais elle peut très facilement servir de lien entre un clou et une led, ou encore une cuillère et un servomoteur, ou bien de la pâte à modeler conductrice et un moteur continu… Bref vous l’aurez compris de la même manière que l’on peut brancher tout et n’importe quoi sur l’Arduino Uno, on pourra l’activer avec presque n’importe quel objet conducteur ! Je vous propose donc comme exemple d'activer une led et un servomoteur en appuyant sur une banane !

Matériel

Mat riel n cessaire

Budget:

35 €
  • Une carte Arduino et son câble USB
  • 1 mini servomoteur 9g
  • 9 câbles / jumpers
  • 1 résistante de 1 MΩ et 1 résistance de 220Ω
  • 1 led de 5 mm
  • 2 pinces crocodiles

Etape 1 : Sources d'Inspiration

Connaissez-vous la Makey Makey ? Cette carte électronique servant d’interface entre un PC et tous objets conducteurs, leurs permet de remplacer certaines touches du clavier. Vous n’avez jamais joué du piano sur des bananes ? Ou encore jouer à Pacman avec des touches faites en pâte à modeler ?

le lien vers la vidéo officielle de présentation : https://www.youtube.com/watch?v=rfQqh7iCcOU

De nombreux sites nous annoncent que la Makey Makey et l’Arduino sont compatibles, ou encore que la Makey Makey est une dérivée de l’Arduino.

Mais même si nous trouvons quelques vidéos de personnes ayant réussi à le faire, ou à créer un shield, on ne trouve rien sur la méthode… La seule chose que nous ayons trouvé c’est cette vidéo en arabe dont mon tuto est une adaptation : https://www.youtube.com/watch?v=7rHi2XcFqgw. Les explications semblent clairs mais ne parlant pas la langue j’ai essayé de comprendre le principe, de plus une partie du code n’était pas apparent sur la vidéo, il a fallu la trouver… J’ai également modifier un peu le code supprimant certaines parties et changeant le nom des variables. Le code d’origine faisait s’allumer 3 leds. 

Etape 2 : le montage (visualisation sur Fritzing)

Il s'agit ici en fait de 3 montages distincts, le premier pour la Makey Makey (objet conducteur à toucher), le second pour le servomoteur, et le dernier (optionnel) pour une led témoin :

1) Pour obtenir le montage Makey Makey, le ground de l'Arduino doit être branché à une pince croco. 

La broche 5V, doit être connectée à une résistance de 1MΩ, qui elle-même est branchée à la fois à une pince croco et à la broche A0 de l'Arduino.(image 2)

2) Le servomoteur est branché d'un côté au ground, au 5V de l'Arduino, et à la broche 9 de l'Arduino. (image 3)

3) La led est branchée d'un côté au ground, via une résistance, ici de 220Ω, et de l'autre à la broche 13 de l'Arduino. (image 4)

Etape 3 : le code : Principe de base

L’Arduino envoie un courant de 5V qui va diminuer à cause de la résistance de 1MΩ et de la "résistance" rencontrée entre les 2 pinces crocos.

Ce qui sera donc variable en fonction des objets reliant les 2 pinces crocos. Dans notre code, on appellera cette résistance entre les 2 pinces "resistivité".

Si cette dernière est inférieure au seuil qu'on définit (c'est à dire qu'il y a suffisamment de courant qui passe) alors la led s'allumera et le servomoteur se positionnera à l'angle défini.

Par exemple :

Les différentes personnes ayant servis de cobaye avaient une résistivité variant entre 2200 et 3700.

Dans le cas d'un dessin fait à la mine de crayon gris (graphite) la valeur de "resistivité" était un peu moins de 5000, une banane également testée tournait entre 5000 et 6000.

Il est donc primordiale pour cliquer sur votre objet, donc ici la banane, de tenir dans l'autre main la pince croco reliée au ground de l'Arduino.

Etape 4 : Déclaration des variables et des constantes

1) Pour la fonction Makey Makey

     int sensorPin = A0;

     int sensorValue = 0;

     int values[10];

     int k=0;

     int resistivite=0;

Explication : on crée une variable de type "int" nommée "sensorPin" qui est affectée à la broche analogique A0 de l'Arduino.

On crée une variable de type "int" nommée "sensorValue" permettant d'y stocker la valeur que la carte détectera, elle est au départ initialisée à 0.

On crée un tableau nommé "values" contenant 10 cellules pour y stocker des variables de type "int". Les cellules sont pour l'instant vides.

On crée une variable de type "int" nommée "k", initialisée à 0, et qui va nous permettre de calculer la "résistivité".

On crée une variable de type "int" nommée "resistivite" qui symbolise en quelque sorte la résistivité électrique. Plus elle est élevée, moins le courant passe.

2) Pour la led

     int ledPin = 13;

Explication : crée une variable de type "int" nommée "ledpin" et affectée à la broche 13 de l'Arduino.

3) Pour le servomoteur

     #include <Servo.h>

     Servo monservo;

Explication : on fait appel à la bibliothèque Servo.

On crée une constante appelée « monservo » utilisable par la bibliothèque Servo.

Etape 5 : Void Setup

1) Pour la fonction makey

Serial.begin(9600);                    

Explication : on définie le taux de transfert de donnée à 9600 bauds.

2) Pour la led

pinMode(ledPin, OUTPUT);              

Explication : on définit la broche connectée à la variable "ledPin" comme étant une sortie 

(donc ici la broche 13).

3) Pour le servomoteur

monservo.attach(9);                     

Explication : on utilise une commande de la bibliothèque Servo, qui consiste à « attacher » le 

servomoteur à la PIN 9.

Etape 6 : Void Loop

1) Pour la fonction makey

sensorValue = analogRead(sensorPin);   

  for (k=0;k<10; k++){                   

    values[k]      = values[k+1]; }      

    values[9]      = sensorValue;       

    resistivite = 0;                     

 

for (k=0; k<10; k++) {                 

resistivite = resistivite + values [k]; } 

 

 Serial.println(resistivite);           


Explication : on définit la valeur de la varaible "sensorValue" comme étant ce que l'on lit sur la broche analogique où sensorPin est affectée (donc ici A0).

On crée une fonction for, où la variable "k" est initialisée à la valeur 0, et où si elle est inférieure à 10, elle est incrémentée (augmentée) de 1 en 1.

On y stocke dans le tableau "values" les valeurs de la variable "k", chaque cellule du tableau 

prenant la valeur suivante de "k".

La dernière cellule du tableau, la cellule 9, prendra la valeur de la variable "sensorValue, donc de ce que la carte détecte sur la broche A0.

On initialise la variable "resistivite" à 0.

On relance la boucle for pour déterminer la valeur de la variable "resistivite".

   

La variable "resistivite" aura comme valeur "resistivite" + la valeur présente dans les cellules 

du tableau "values".

On affiche dans le moniteur série la valeur de la variable "resistivite". Plus la valeur est basse, plus l'objet est conducteur. Lorsqu’on fait toucher les 2 pinces crocos, le courant passe 

normalement, il n'y a pas de résistance la valeur de la variable "resistivite" est à 0.

Dans mon cas, lorsque rien ne touche les pinces crocos, donc seul l'air ambiant fait passer 

l'électricité entre les 2 pinces, le moniteur série affiche une valeur d'environ 10 200.

Si je touche les 2 pinces crocos, donc seul mon corps sert de conducteur, "resistivite" est à 

environ 3600, pour d'autres personnes l'ayant testé, cela varie entre 2200 et 3700.

Dans le cas d'un dessin fait à la mine de crayon gris (graphite) la valeur de "resistivite" est un peu moins de 5000, une banane également testée tourne entre 5000 et 6000. Il faudra donc peut être modifier la valeur dans la condition if en fonction de l’objet à « cliquer ».

2) Pour la led et le servomoteur

if (resistivite < 5000){  

     digitalWrite(ledPin, HIGH);         

     }

  if (resistivite < 5000){              

     monservo.write(90);                

     delay(500);                         

     monservo.write(0);                  

     }

  else{                                  

digitalWrite(ledPin, LOW);          

     }

Explication : si la valeur de la variable "resistivite" est inférieure à 5000 (cette valeur peut être changée pour améliorer la sensibilité), alors on allume la led.

De même, si la valeur de la variable "resistive" est inférieur à 5000, on positionne le servo à 

l’angle choisit ici 90°.

On crée un délai de 2 secondes avant de refaire la boucle. Attention durant ce délai la led 

reste allumée.

On repositionne le servomoteur à l’angle choisit ici à 90°.

Sinon, c'est à dire que la valeur de la variable "resistive" est supérieure à 5000, on éteint la led.

Etape 7 : Adapter, modifier et vous l’approprier !

Finalement ce code et ce montage sont facilement adaptables en fonction de vos besoins et de vos envies.

Vous pourrez vous en inspirer et les modifier à foison, car dans le code disponible en téléchargement il vous suffira de remplacer dans les différentes zones (déclaration des variables et constantes, dans le setup et le loop) les parties dédiées au servomoteur et/ou la led témoin par celles correspondantes à ce que vous souhaitez mettre à la place.

D’autres exemples sur mon site https://ardwinner.jimdo.com/arduino/ :

Et biens d’autres choses encore sur le site de notre fablab : https://fablab-clermont.jimdo.com/

Et encore merci à Nicolas mon stagiaire pour m'avoir ouvert les portes de ce tuto et à qui j'espère avoir transmit une partie de ma passion pour l'Arduino ^^.

Vous aimez ce tutoriel ?


WadiBenarbia

06 avr. 2017 à 20:23

Du très bon boulot gg

Ardwinner.JPaul

10 avr. 2017 à 15:48

merci ^^


Recevez une fois par mois les meilleurs tutoriels Technologie dans votre boîte mail




Champion

Gagnant du Concours Concours DIY Arduino


Oh ça buzz

+ de 1 000 vues pour Transformer une Arduino UNO en pseudo Makey Makey


S'inscrire:



En cliquant sur s'inscire, vous acceptez de respecter les conditions générales d'utilisation de Oui Are Makers.

  • Vues: 1206
  • J'aime: 21