Catégorie : arduino

Reviving old wire-guided buggy

Bonjour, un article un peu spécial, puisqu’il s’agit d’un copie colle d’un article (assez ancien) fait dans le cadre d’un club maker dont je fais parti:

Goal is to present a bit what we did, what we have, what we’re aiming at in the short term..

Our first project

One of the toy attracted us, this one:

Our goal was clear, reviving this buggy and making it autonomous using an arduino.

First, after taking it apart, we tried to understand the original – simple – design:

But also that many wires were corroded making the car useless in its current condition.

Turned into this hand-made drawing schematics:

First, we tried to control the 6V 250ma DC motor via the TTL voltage given by arduino outputs using the only transistor we had,at this time an IRF520N (here).

Which we hooked to a 12V battery + DC motor:

But we didn’t get the results we expected,indeed motor was running very weakly, plus the transistor was getting very hot.

After some thoughts, we concluded looking at specs (page 3, characteristics graph on bottom left) that even if the graph is based on Vds = 50V, the Vgs we put is too low, as a consequence transistor is not « fully » in court circuit state (« passant ») => big internal resistance => big voltage. Also, current at this regime is low, thus low rpms. We needed 10V on the gate to have it working in its nominal regime, that’s much more than TTL arduino levels (5V).

So we ordered another transistor better suited for our low activation voltage.

At some point, we wanted to control both front motor (for steering) and rear motor (to move forwards/backwards).

So we ordered a LS293 component, containing 2 H bridges, but only after one of us reinvented H bridge principle.

We wanted to jump from breadboard prototyping to PCB soldering prototyping cards..

As we lacked experience in PCB prototype board usage at this point, our first attempt was a bit laborious and not the cleanest imaginable (from now on we’ll avoid soldered tracks):

But was functional!

… until the LS293 exploded..

We were a bit too excited to test the whole thing, that we bypassed basic checks such as how much current motors were asking for, and LS293 temperature.

It happened that an adhoc repair we did for the steering prevented the front motor from moving freely, and additional torque made the motor take more current than preliminary tests.

=> we went well beyond internal LS293 h-bridges max current specs

Consequence:

  • we modelised and 3d printed the broken part to have cleaner repair:

  • we realised our original schematics could be improved by enlarging ground plane, also used to dissipate heat
  • maybe we should use a DC motor with max current usage within our LS293 specs (sourire)
  • maybe we should use a servo/step motor, much better suited for steering than original DC motor

and here we are now, we’ll be back with latest updates!

Next steps

Once we have all basics working for our car, we want to plug one of the many sensors we have (ultrasonic, rgb, we have wide angle camera with RF transmission..), put basic AI (fitting in arduino’s atmel cpu), then using advanced controller (possibly configured via openpilot) and more advanced stuff (remote control via reinforcement learning running on PC..).

 

Bar Di Re Arduino : ze french connection

L’objectif de ce premier billet est de :

– présenter ce qu’on souhaite faire in fine

– commencer la partie technique très doucement, avec présentation de la photorésistance et comment l’exploiter

 

Un objectif

L’idée de départ est venue d’un vieux frigo, qui se ferme avec réticence.

Je souhaite savoir quand le frigo est mal fermé, pour pouvoir faire des choses sensées en conséquence. Par exemple, me notifier d’une manière ou d’une autre, mettre à jour un statut dans un dashboard accessible depuis le net, ou soyons fou un moteur qui prendrait le soin de fermer la porte à ma place.

Le Comment

Quelques minutes de recherche sur le web ont suffit à orienter sur la plateforme Arduino.

Il est très simple d’aborder le monde Arduino. Déjà, l’environnement de développement logiciel est ultra simplifié (on verra plus tard) et surtout entièrement centralisé.

Physiquement, l’Arduino est une petite carte tout en un, alimenté par câble USB standard, on branche les capteurs et les trucs qui bougent / font de la lumière sur les trous déjà présent et c’est fini. Du vrai plug&play! Pas besoin de programmateur hardware, pas besoin de régulateurs de tension et autre soudure.

Un lego électronique, en (beaucoup!) moins cher.

On adore.

Mais encore?

Suite du programme: il faut ensuite trouver les bons éléments à brancher dessus, faire un petit programme et s’enorgueillir du résultat.

  • que brancher dessus : capteur
  • comment faire marcher tout ça ensemble : le programme

Que brancher dessus?

Dans le cadre du premier projet, il s’agit de détecter une porte de frigo ouverte. Par chance, mon frigo moderne dispose d’une lampe, qui -oh miracle technique-  s’allume quand la porte est ouverte.

Il aurait été dommage de ne pas en profiter.

Ainsi, une photorésistance va faire l’affaire. Ce petit composant ressemble à ceci:

DSC_6842

Sa résistance varie en fonction de l’intensité de la lumière qui lui parvient.

DSC_6843_2

1.7 Kohms sous lumième ambiante,2 MOhms dans la quasi obscurité, un peu moins de 190 ohms à 2 cm sous une lampe philips donnée à 741 lumen. La mesure est faite avec un multimètre lowcost (le gentil facteur devrait prochainement apporter un instrument un peu plus précis, et original, surprise réservée aux fidèles lecteurs).

Histoire de ne pas répéter « photorésistance » moults fois dans ce blog, parce que je n’ai pas envie de répéter ce mot, et que j’ai la prérogative de mettre ce que je veux dans ce blog, je l’appellerai Brigitte.

Pour brancher la chose à l’Arduino, une pin de Brigitte sera à la masse (voltage 0V de référence), et on va souhaiter mesurer le potentiel sur l’autre pin.

On va ainsi mesurer la différence de potentiel entre la 2ème pin et la 1ère, ce qui est exactement la même chose qu’une tension.

On remarque que la seule chose que l’on peut mesurer avec un Arduino sur une de ses pins, c’est une tension. Et c’est tout.

Heureusement pour nous, il existe une loi facile à retenir en électronique (peut être la seule à connaitre par cœur): U = R * I, aussi connue comme la loi d’Ohm (oui, le même ohm qui mesure les résistances et on s’en doute, ce n’est pas une coïncidence).

U, c’est la tension entre 2 points. R c’est la résistance entre ces deux points. I, c’est la quantité de courant qui passe entre ces deux points. Pour les puristes, la réalité est plus complexe, car il faut aussi prendre en compte des comportements capacitifs, inductifs et autres joyeusetés non linéaires mais oublions ceci pour l’instant.

Nous disions, U = R * I. Donc la tension mesurée aux bornes de Brigitte est proportionnelle à la résistance de celle ci. Bingo, on va pouvoir mesurer ça avec l’Arduino.

J’en entends certains s’interroger à pensée haute.

Très bien, nous savons que l’on peut mesurer une tension au niveau d’une pin de l’Arduino et qu’il existe une tension aux bornes de Brigitte proportionnelle à la quantité de lumière qu’on souhaite mesurer, mais comment relier tout ça?

Il nous manque une dernière notion essentielle en électronique, en fait dérivée de la loi d’Ohm. Regardons un peu l’image suivante:

250px-Pont_diviseur_tension.svg2

 

La loi d’ohm donne : U = (R1+R2)*I, car c’est la même intensité qui passe dans un circuit donné (les choses se corsent quand le chemin se sépare en deux, mais on n’aura pas à se poser ce genre de questions avant très longtemps). Oh lecteur, si tu insistes pour avoir le pourquoi du comment de cette affirmation, alors Mario entrera en jeu (sans mauvais jeu de mot, bien entendu).

Bref, U = (R1+R2)*I. Nous avons aussi U=U1+U2 (c’est le même Mario que nous appellerons à la rescousse pour justifier ceci, si tu l’exiges). Quelques savantes opérations mathématiques plus tard (si tu ne vois pas lesquelles, alors tu ne lis probablement pas ces lignes), nous obtenons U2=(R2/(R1+R2))*U ou son sombre maléfique, U=(R1/(R1+R2))*U (on voit bien la symétrie, non?).

Lecteur, si tu me permets de continuer à te tutoyer, tu es invité à imaginer que le point en bas de l’illustration est à la masse, qui par définition/construction est le point dans un circuit au potentiel de référence « 0 V ».

Voilà, maintenant tu peux imaginer que le point en haut est fixé à une tension fixe, mettons 5 V. Elle même ne se comprend que par rapport à l’existence du potentiel 0 V, qui lui même, on le comprend aisément, est relié à la source d’énergie, l’alimentation du circuit, étiqueté soit masse (bien trouvé comme nom), soit dans les cas des piles familières (AA, AAA et cie) est appelé « – » par opposition au « + » qui est à 1.5 V, 9 V, 3.6 V selon le type de pile).

Ainsi, si mettons R2 est la résistance de Brigitte, qui rappelons le est notre inconnue, il ne reste qu’une inconnue dans l’équation, R1.

Fixons arbitrairement R1 à 20 Kohms, par exemple.

Il n’y a plus d’inconnue: si on mesure U2, on mesure R2.

Ca tombe bien, c’était exactement notre but.

Un dernier point maintenant.

Tentons de glorifier un peu son rôle, à cette fameuse résistance R1, qui semble jouer un rôle fort ingrat, celui d’être l’intermédiaire à la relation entre Brigitte et Arduino.

Elle peut être explicitement ajoutée par le créateur pas forcément omniscient mais clairement omnipotent du circuit. Elle peut aussi être cachée par les tripes de notre Arduino. En effet, quand on programme l’Arduino, la première chose (ou quasi) que l’on fait, c’est dire pour chacune de ses pins utilisée si on souhaite le configurer en entrée (INPUT pour les francophones coincés) ou en sortie (OUTPUT). Dans notre cas, on aura compris que l’on souhaite configurer la pin de l’Arduino reliée à Brigitte en INPUT, et même à vrai dire en INPUT_PULLUP.

Lorsqu’une pin est configurée en INPUT_PULLUP, tout se passe comme si une résistance était placée entre la pin physique en question et la ligne d’alimentation 5V.

En INPUT_PULLDOWN, tout se passe comme si une résistance était placée entre la pin physique en question et la masse.

D’ailleurs, dans un article à venir, j’aimerais mesurer cette impédance interne pour valider ces propos.

Dans les deux cas, il s’agit de limiter le courant qui passe par cette pin, mais aussi de pouvoir faire un pont diviseur de tension « implicite ».

Si on peut ainsi théoriquement brancher Brigitte directement sur l’Arduino, on va quand même intercaler une résistance entre les deux. Comme on ne sait pas toujours ce qui se passe dans ces cas là (un court circuit est si vite arrivé), on s’assure qu’il y a un minimum de résistance entre les deux loustics.

Mettons 10 Kohms, parce que c’est plus que peu, et moins que beaucoup.

Maintenant, place à une petite galerie d’images pour confronter attentes théoriques et expérimentations.

DSC_6848

 

DSC_6846

 

DSC_6844

 

 

 

 

 

DSC_6850

Incroyable, on retrouve bien les 0.4 mA calculés 🙂

Pour référence, voici le code arduino qui fait tourner notre exemple:

int pinLecture = A0;
void setup()
{
 Serial.begin(9600); 
 pinMode(pinLecture, INPUT); 
}
void loop()
{
 int valeurLue = analogRead(pinLecture); 
 Serial.println("Valeur lue: ");
 Serial.println(valeurLue);
 delay(1000);
}

Conclusion

Si vous trouvez que cet article n’est pas très homogène, c’est normal. C’est mon premier article, que je trouve beaucoup trop long, trop ambitieux à tout vouloir décrire.

Se voulant exhaustif, son écriture s’est étalée sur une trop longue période.

Je n’oublie pas l’objectif initial de l’article, à savoir faire une alarme de frigo. Cependant, j’aimerais poursuivre ce blog avec des articles plus courts, et pas forcément dans une continuité.

Une bonne dizaine de thèmes trottent actuellement dans ma tête pour faire de prochains articles:

– tentative de réparation de matériels divers

– essayer de « vérifier » des principes élémentaires en électronique (mesurer charge/décharge d’un condensateur, mesure d’impédances internes)

– reverse engineering dans un premier temps simpliste de choses et d’autres (contrôleur, bus, protocoles)

– des mesures concrètes des transmetteurs RF low cost rRFL01 (j’en ai reçu une bonne dizaines dernièrement, de types différents), mesures de consommation, de portée

– faire de l’apnée en consommation du microcontrôleur au coeur de l’Arduino (dans un premier temps avec des astuces software, dans un deuxième temps en faisant subir une cure de régime à l’Arduino)

– finir le projet d’alarme de frigo, et en initier d’autres!

– et plein d’autres choses

 

N’hésitez pas à laisser vos messages/commentaires, je débute dans le petit monde des blogs et je prends tout ce qui pourrait améliorer le bonheur de toi, lecteur.