Vendredi, février 19 2010

Tuner son hélico ou comment relier 2 batteries LiPo en parallèle

Le SanHuan Copter 6020-1 MAX-Z aussi nommé le Copter V-MAX Hypersonic est un hélicoptère co-axial ridiculement petit disposant de 2 rotors de 17cm de diamètre stabilisé par balancier.

Hélicoptère SanHuan Copter

Il ne dispose pas de plateau cyclique mais un rotor vertical à l'arrière lui permet d'avancer ou de reculer en le faisant basculer, imitant alors un cyclique longitudinal, bien évidemment, aucun moyen de faire le moindre mouvement cyclique latéral sauf en pivotant de 90° sur l'axe vertical, suis-je clair ? ;) Non ?, pour faire court, pas de déplacements latérals avec cet engin.

Ce modèle réuni maniabilité et stabilité et on se prend réellement au jeu. Sa principale faiblesse est son autonomie de 5 minutes, plutôt limite, d'autant plus que d'origine la batterie ne se change pas facilement...

Nous allons donc modifier cet objet volant afin de le doter d'une autonomie un peu meilleure, pour cela, nous allons procéder en 3 étapes et ce sera l'occasion de faire un peu d'électronique :

  1. Suppression des circuits de protection
  2. Mise en parallèle des éléments
  3. Ajout d'un seul circuit de protection

L'article est consultable sur le wiki à la page Sanhuan Copter Max-Z.

Voici une très courte vidéo de la bête (non, pas le félin...)

Lundi, décembre 21 2009

Librairie Arduino pour afficheur Oled : Oled4d

Voici une librairie libre de gestion d'afficheur OLED de la société 4D Systems pour Arduino.

Comme leur nom l'indique très bien, ils utilisent la technologie OLED avec tous les avantages de cette technologie : pas besoin d'un rétroéclairage, ils ont un angle de vue de 180°, bonne consommation, très bon contraste, vous pouvez les trouver entre autres chez Lextronic ou encore chez Sparkfun.

Le jeux d'instructions n'est pas toujours très logique mais est assez complet, le principal défaut de ces afficheurs sont leur prix, à 65€ l'unité, j'imagine mal comment espérer faire de la petite série à un tel prix...

Ces afficheurs sont pilotables directement par le biais d'une connection série dans lequel on envoie directement des commandes assez hauts niveaux :

  • Set Background Color
  • Put Pixel
  • Erase Screen
  • Draw Rectangle
  • Place String of ASCII Text
  • ...

Ils disposent également d'un port microsd permettant ainsi de charger des images ou encore des bouts de programmes, attention, cependant car n'espérez pas mettre des images jpg dans la microsd ou autre et les afficher comme ça, d'un coup, ça ne fonctionnera pas, tout d'abord, car le chip de 4D ne gère pas les images compressées mais uniquement des champs de bits et surtout car il n'y a aucune gestion de FAT gérée par le controleur, ainsi, il est possible d'accéder au contenu de la microsd depuis votre programme mais en brut : à vous de gérer la couche du système de fichiers...

Tester la libraire

Voici la marche à suivre pour tester cette librairie avec Arduino (la librairie peut parfaitement fonctionner hors du projet Arduino...) :

  1. Créer un dossier Oled4d dans le dossier Libraries de votre installation Arduino et copiez dedans le fichier Oled4d.h.
  2. Créez un nouveau projet Arduino et copiez le contenu du fichier oled4d.pde dedans.
  3. Compilez le source, envoyez dans la cible et voilà, vous devriez avoir quelque chose de ce genre s'afficher :

Oui, il s'agit bien de Tux ! ;)

Comment ça fonctionne ?

Voici un petit bout de code :

// Créer l'objet en interface série logiciel
Oled4dSoft oled = Oled4dSoft(serial, 8);

// Pour utiliser l'uart « hardware », procéder ainsi :
//Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);

// Initialise l'écran
oled.init();

// Efface l'écran
oled.clear();

// Dessine un cercle
oled.drawCircle(64, 64, 20, RGB(255, 255, 0));

// Affiche du texte
oled.drawText(1, 3, SMALL, GREEN, "Hello world !");

Voilà, je pense que l'exemple est assez explicite et logique...

Vour remarquerez qu'il est possible de passer par l'uart intégré à l'Atmel ou de passer par l'uart logiciel avec la libraire NewSoftSerial (cette librairie dispose de fonctions avancées et est bien supérieure à la librairie d'uart fourni par défaut dans le projet Arduino).

Démo

Voici une petite démo affichant en vrac des lignes, des triangles, des cercles, des polygones, des rectangles...
La vidéo reflète assez mal les couleurs de l'écran qui sont bien vives en réel.

Écran Oled de 4D System piloté par Arduino

Futures évolutions

Actuellement, cette librairie supporte uniquement les instructions standards (General Command Set), les autres (Extended Command Set), qui permettent entre autre un accès au contenu de la microsd, ne sont pas encore gérées mais le plus gros du travail est fait...

Téléchargement

Cette librairie est mise à disposition sous license GPL.
Vous pouvez télécharger la toute dernière version de cette librairie depuis mon compte GitHub à l'adresse suivante : http://github.com/hugokernel/Oled4D

Je mettrai à jour également la page sur le wiki : http://www.digitalspirit.org/wiki/projets/oled4d.

Mercredi, décembre 16 2009

Conditionnement de signal piezo

(an english translation for this article is available here)

Les transducteurs Piezo sont très courants, ne coutent rien, et peuvent se révéler d’excellent capteurs : son, choc, vibrations; tant que quelque chose « bouge » suffisamment ou fait du bruit, un capteur piézo peut être intéressant.

En revanche, le signal généré par ces petites bêtes n’est pas très amical pour l’amateur d’électronique digitale : en gros, c’est une sinusoïde qui s’aplatit avec le temps. Par ailleurs, le signal se promène souvent dans les quartiers mal fréquentés des tensions négatives, ce qui n’est pas très agréable pour la plupart des chips et µcontrolleurs utilisés en électronique digitale. Par exemple, la datasheet de l’ATMega 168 (et c’est pareil pour la plupart des µ 8 bits d’atmel) indique que la tension appliquée à n’importe quelle patte doit se trouver entre -0.5V et VCC+0.5V. Les transducteurs piézo peuvent allègrement dépasser ces limites.

Dans la capture ci-dessous, la tension lue aux bornes du piézo descend jusqu’à -52V et monte jusqu’à 9.2V. Ca fait plus de 60V crête à crête. Si on ne fait rien, le µ peut rapidement en faire une jaunisse… :

Raw signal from piezo (2)

Signal brut du piezo

Dans la capture suivante, le signal descend d’abord à -20V, puis s’envole au dessus de 35V. Presque 60Vpp (crête à crête) ici aussi :

Raw signal from piezo

Signal brut du piezo (bis)

Ce ne sont que des exemples. Je n’ai pas torturé ou frappé au marteau sur le piezo. Tapotez le juste avec un ongle et vous vous retrouverez en général avec des valeurs crête à crête énormes. L’autre problème c’est que ces valeurs sont imprévisible (les piézos le sont, mais pas la manière dont on les brutalise) : ça peut commencer par monter, puis descendre, puis monter, qui sait…

Un petit coup de zoom montre l’effet « sinusoïde qui s’aplatit » que l’on observe en général après les plus gros pics de tension :

Piezo signal close up

Agrandissement du signal piezo

Le conditionnement de signal est donc une étape obligatoire si l’on travaille en digital avec des piézos.

Récapitulons ce que nous devons faire au signal pour le dompter :

  1. rendre le signal positif : la plupart du temps, les piezos sont lus par des CAN (convertisseurs analogiques/numériques), on veut donc des tensions positives
  2. restreindre son amplitude entre 0 et VCC, pour éviter que la tension n’affiche des valeurs effrayantes pour des µcontrolleurs et des CAN.
  3. modifier la forme du signal pour éviter les bosses, et le rendre plus propre et prévisible

Tout cela n’est pas très compliqué à obtenir en fait. On va y aller en trois étapes, traitant respectivement les trois points ci-dessus :

  1. ajouter un redresseur simple alternance, pour garder la partie positive du signal
  2. ajout d’une diode zener pour éviter que les valeurs de signal soient supérieure à la tension d’avalanche de la zener
  3. ajouter un couple RC afin de filtrer les vaguelettes du signal

Redresseur simple alternance

En premier lieu, nous voulons rectifier le signal piezo, c’est à dire le rendre toujours positif. Pour cela, nous allons utiliser des diodes Schottky. Les diodes Schottky sont plus intéressantes car elles ont un seuil de tension directe (Vf) très bas (par comparaison avec des diodes standard), aux alentours de 0.3V.

Piezo signal as seen after a full-wave rectifier

Signal du piezo vu derrière un pont redresseur complet

On peut se demander : pourquoi ne pas utiliser un pont redresseur complet à base de Schottky et rendre le signal tout entier positif (comme si l’on prenait la valeur absolue du signal) au lieu d’ignorer les tensions négatives ?

Regardons les premières captures de signal brut à l’oscillo. Lorsque le signal change de signe, il le fait plutôt violemment, et son amplitude peut même être plus importante après le croisement du zéro qu’avant. Maintenant essayons d’appliquer la fonction mathématique ‘abs’ sur la courbe. On va se retrouver avec une courbe erratique : faible amplitude, plus haute, puis faible, etc… Même avec un filtrage poussé, ça sera difficile d’arriver à quelque chose de propre, et on aura toujours une coube sautillante, moins sauve que l’originale et complètement positive certes, ais difficilement exploitable.

L’idée consiste donc à sacrifier la partie négative de la courbe pour obtenir un résultat plus lisse (le bug Agilent est offert gracieusement).

Piezo signal rectified by only one Schottky diode

Signal du piezo signal rectifié seulement par une diode Schottky

En fait, on va faire un peu plus qu’un redresseur simple alternance. Si on ne met qu’une diode Schottky en série on se retrouvera avec une courbe ressemblant à elle de gauche. Nous pouvons voir qu’il reste une partie non négligeable du signal sous 0V, et dans notre circuit, ce n’est pas censé se produire.
Même dans l’éventualité ou l’ADC s’en accommoderait, il ne ferait pas vraiment d’étincelles en mesurant une tension négative.

Il y a surement une bonne raison pour que le signal se comporte de la sorte, mais je ne la connais pas. N’hésitez pas à commenter si vous avez la réponse.

On doit donc se débarrasser de ce reliquat négatif et pour cela, nous allons utiliser une deuxième Schottky entre la masse et le signal. On ne garde que le signal positif, ca sera nettement plus simple comme ça.

Piezo signal rectified by two Schottky

Signal piezo rectifié par deux diodes Schottky

Notre signal rectifié par les deux Schottky ressemble à la courbe de gauche (la courbe à éét décalée vers le bas pour des raisons esthétiques). On a encore quelques tensions négatives qui apparaissent, mais c’est presque négligeable maintenant. On peut se demander si ces -400mV ont un rapport avec le Vf de la diode.

Même si l’échelle est différente, les vaguelettes semblent avoir disparues. C’est peut être du à la capacitance de la Schottky (14pF), qui, même si elle est faible, peut impacter les vaguelettes haute fréquence. Je n’ai pas eu le temps de vérifier.

Maintenant nous devons limiter la tension maximale dans notre circuit, histoire de ne pas martyriser notre CAN.
Diode Zener

Comme vu plus haut, l’amplitude en tension est importante et on peut rapidement atteindre des valeurs inadaptées pour de l’électronique digitale. On doit donc dompter cette tension générée par le piézo. Les diodes Zener peuvent le faire : elles peuvent limiter la tension dans un circuit à une valeur fixe : quand la tension dans le circuit est supérieure à la tension d’avalanche de la Zener, elle devient passante, aidant ainsi à maintenant la tension sous ce seuil.

Piezo signal, after Schottky rectifiers and Zener

Signal du piezo signal, après les redresseurs Schottky et la Zener

En général, on doit ajouter une résistance en série avec la Zener afin de limiter le courant traversant la diode. Mais avec un piezo, ce n’est pas nécessaire, dans la mesure ou les courants en jeu sont très faibles.

Après avoir ajouté notre Zener de 5.1v dans le circuit, la tension le sur le piézo ressemble à la capture de gauche.

Vous pouvez torturer le piezo autant que vous voulez, vous ne pourrez pas dépasser le tension d’avalanche de la Zener.

Si l’on en reste là, on aura pas mal de difficulté à savoir si le pizeo a été actionné une ou plusieurs fois. Nous allons devoir filtrer les pics afin d’obtenir une courbe plus docile.

Filtrage du signal

Ce signal peut être filtré par une cellule RC. Nous avons juste besoin de savoir combien de temps nous voulons voir la courbe durer afin d’ajuster les valeurs de R et de C. Pour mon application (batterie électronique), je voulais que le signal s’estompe en 10ms maximum. Comme l’on sait que le voltage descend à 10% de sa valeur initiale après Error: http://leucos.lstilde.org/wp/wp-content/plugins/wpmathpub/phpmathpublisher/img/ must have write access Read the official wpmathpub plugin FAQ for more details, on peut trouver le bon condensateur en fonction de la résistance ou vice-vesa.

Imaginons que nous utilisons une résistance de 1MΩ, on devra utiliser un condensateur d’approximativement Error: http://leucos.lstilde.org/wp/wp-content/plugins/wpmathpub/phpmathpublisher/img/ must have write access Read the official wpmathpub plugin FAQ for more details.

Au final, on se retrouve avec ce circuit plutôt simple :PiezoFinalCircuit

Et avec cette ravissante courbe :

Finaly, a clean, ADC friendly signal

Enfin, un signal propre, agréable en bouche pour le convertisseur analogique/digital

J’espère que ce petit article vous aura aidé à dompter ces petite bêtes sauvages que sont les piézos. Attention toutefois, les piézos sont tous différents, et la taille compte. Alors expérimentez sur ces bases avant de graver en me croyant sur parole.

Lundi, novembre 30 2009

cats : un ‘cat’ pour le port série

(an english version of this post is available here)

Pour un futur projet, j’avais besoin de faire quelquechose du genre ‘cat /dev/leportserie’.

Bien sur, avec cat, ça ne marche pas terrible. Alors voici ‘cats’, un ‘cat’ spécial port série.

Ca a été écrit en 30 minutes, pas vraiment testé, mais à priori ça marche plutôt pas mal pour des opérations de lecture et d’écriture pas trop tordues.

Par défaut, cats fonctionne en 9600 bauds.

Compilation :

gcc cats.c -o cats

Exécution :

./cats /dev/ttyUSB0

Example d’utilisation : attraper votre altitude depuis le GPS qui envoie des trames NMEA sur le port série :

./cats /dev/ttyUSB0 | grep GGA | cut -f 10 -d','

cats habite chez  GitHub : http://github.com/leucos/cats

Les retours, remarques et les engueulades sont les bienvenues.

EDIT : nouvelle option pour cats (timestamping).

Mardi, novembre 24 2009

Télécommande V0.2

L’intégration de la nouvelle télécommande est finalisée (temporairement :p) … Niveau fonctionnalité, je suis très proche de ce que j’avais dans la V0.1, la différence principale réside dans le LCD graphique et les commandes et menus s’y affichant.

J’ai adopté aussi un look très industriel années 70 … je dois encore modifier le potentiomètre numérique blanc qui va sans doute passer au noir un pour être plus assorti aux boutons.

Je me suis fait plaisir aussi en ajoutant un détecteur infrarouge qui permet d’allumer automatiquement la backlight du LCD quand j’approche la main … la preuve en image :

J’ai un peu ramé pour le déclenchement de la backlight, elle tire quand même 500ma et les PCF8574 que j’utilise sont assez limités de ce côté-là … dans un premier temps j’ai utilisé un relais, mais il générait un problème aléatoire qui faisait passer toutes les entrées du PCF8574 à haut. Finalement, le vendeur de mon magasin d’électronique m’a proposé d’utiliser un Mosfet IRLZ34N qui s’avère fonctionner parfaitement … et en plus j’évite le bruit du relais.

Du point de vue menu/boutons , j’ai un changé d’approche: La rangée supérieure active la commande reprise sur le bas du LCD (XBOX 360, Bureau …), la rangée du bas permet de changer la commande active.

J’ai donc sur la première colonne la possibilité de changer l’entrée active de mon ampli et du switch DVI : Xbox, PC, ON ou OFF. En pratique, le ON ne sert à rien puisque le passage à PC ou Xbox allume l’ampli aussi. La deuxième colonne me permet de basculer l’éclairage du bureau ou de la salle de bain adjacente. La dernière colonne sert de menu de configuration et ne contient pas grand chose pour le moment, mis à part un reset forcé du LCD.

Le boitier est un peu plus grand que la version précédente, mais le LCD est bien plus lisible et va me permettre d’ajouter quelques informations comme la date, l’heure, la température … etc.

En parallèle à la finalisation du boitier, j’ai commandé quelques “gadgets” chez http://www.sure-electronics.com/, le choix et surtout les prix sont carrément bluffants. Je dois dire que je suis très satisfait de la qualité de leur matériel, c’est très professionnel surtout si l’on considère le prix de revient. J’ai, entre autre, commandé des affichages leds 16x24 (11.64$ !!!) afin d’en faire une horloge murale … mais ce sera l’objet d’un futur billet.

Samedi, octobre 31 2009

Les lenteurs d'I2C ...

Après quelques essais, je me suis rendu compte que I2C fonctionnait bien … mais … TRES lentement. J’affiche des éléments graphiques sur mon LCD et quand il est brnaché en direct sur l’Arduino, c’est quasi instantané, mais quand je passe par I2C pour les lignes de contrôle, on peut clairement voir la façon dont il remplit les rectangles.

J’abandonne donc l’idée du I2C pour le contrôle du LCD, par contre, je vais toujours l’utiliser pour lire l’état des boutons de la nouvelle version de l’interface ainsi que pour avoir quelques pins de sorties en plus vu que la majorité des pins sont maintenant réservés pour le LCD.

J’ai donc une fois de plus changé la répartition des pins de ma librairie LCD pour tout mettre sur les pins de 2 à 13. J’ai figé le reset qui n’est pas nécessaire pour mon LCD (Je ne sais pas si c’est le cas pour tous les 6963) et le font select vu qu’une fois pour toute j’utilise l’espacement le plus faible.

J’ai bien trouvé le moyen d’augmenter la vitesse de l’i2C de 100khz à 400khz, mais ça reste franchement faible par rapport à une connexion directe.

J’ai une autre solution mais que je n’utiliserai que si il n’y a pas moyen de faire autrement: utiliser un deuxième arduino (j’ai 3 pro en réserve) pour en faire un controlleur graphique … j’enverrais juste les commandes haut niveau d’affichage et l’arduino pro lui servirait de ‘carte graphique’. Le concept me plait assez bien, mais je le trouve un peu ‘overkill’ pour une simple télécommande.

J’espère avoir une version 2 bientôt fonctionnelle pour poster quelques photos.

Mardi, octobre 20 2009

Sources t6963c

Pour ceux que ça intéresse, voici les liens vers la librairie t6963c modifiée … C’est toujours la version ‘full pins’, pas encore la version I2C.

Les connections sont les suivantes

Data : 0->7 : digital pins 2->9

Ctrl : WR : analog pin 0

Ctrl : RD : analog pin 1

Ctrl : CE : analog pin 2

Ctrl : CD : analog pin 3

Ctrl : RESET : analog pin 4

Ctrl : FS : analog pin 5

http://www.mediafire.com/file/4uyyj54yo1u/GDt6963c.h

http://www.mediafire.com/file/dwj2mqztloy/GDt6963c.cpp

En I2C, j’ai la partie contrôle qui fonctionne, par contre, impossible pour le moment d’avoir les datas qui passent. Je continue mes investigations …

Vendredi, octobre 16 2009

La saga des LCDs

Désolé de ce long silence, ce n’est pas que je n’ai rien fait, c’est plutôt que j’avais la flemme de rédiger. Mais je vais me rattraper, promis …

Je ne suis pas très content de mon poste remote actuel, l’affichage de 2 lignes est très limité vu que je compte afficher des infos supplémentaires telles que la température et éventuellement l’humidité des pièces connectées ainsi que proposer des menus un peu plus ergonomiques.

Dans un premier temps, j’ai cablé un affichage 4 lignes que j’avais depuis quelques temps. Il est en fait reconnu comme 2 affichages de 2 lignes et la partie supérieure ou inférieure est activée via un pin dédié, le reste des connecteurs (data, reset …) sont communs. Pas mal, mais pas de backlight, c’est un gros problème pour moi, et les angles de visions sont quand même assez pourris.

Donc, je me suis rabattu sur un autre affichage graphique LCD, mais qui utilise un controlleur t6963c … Plusieurs problèmes ici, pas de librairie officielle 6963, et beaucoup de pins utilisés : 8 data, et 6 de controle … en gros, il ne reste rien de libre sur l’arduino. J’ai quand même tenté le coup et modifié la librairie non arduino qui est ici : http://en.radzio.dxp.pl/t6963/. La principale modification consistait à répartir les connections data sur 2 ports vu que je voulais garder les pins 0 et 1 libres. Mais ce n’était pas le plus gros problème … il m’a fallut pas mal de temps pour me rendre compte que ce LCD demandais un voltage négatif pour être correctement alimenté, j’ai donc cherché un peu et trouvé un générateur de voltage négatif basé sur un NE555 : http://sound.westhost.com/project95.htm.

Voila le résultat sur un petit circuit maison :

Et ça marche en plus :-) … :

Je suis assez content du résultat, l’écran est énorme, bien lisible sous des angles larges et m’a couté 10€ chez www.pollin.de (décidément une bonne adresse). Le fait qu’il soit graphique ouvre pas mal de possibilités d’un point de vue interface. Reste le problème du cablage …

Je n’avais pas envie de passer à un mega (même si c’est la solution la plus simple), je me suis donc penché vers une solution i2C, qui va me permettre de jouer un peu avec ce bus avant de tenter de le généraliser dans ma solution. J’ai donc étendu le nombre d’entrées/sorties avec 2 PCF8574AP. Chacun ajoute 8 entrées ou sorties digitales. Après quelques tests, les chips répondaient bien à mes attentes :

J’ai cablé le tout et réécrit hier soir la libraire pour qu’elle passe par de l’I2C et non plus du direct. Ca ne marche toujours pas pour le moment, mais j’avoue n’avoir pas trop cherché, l’heure étant déjà fort avancée hier soir … Je m’y recolle ce week-end.

Dès que j’ai avancé la dessus, je vous tiens au courant. Je re viendrai aussi sur les essais que j’ai fait avec des capteurs de température et détecteur de présence (PIR) et d’autres choses que j’ai prototypé à l’occasion.

- page 1 de 8