Outils pour l'électronique

Graphisme

La documentation est un élément prenant beaucoup de temps à mettre au point, parfois plus que le programme ou circuit sur lequel on travaille. Elle est très importante car elle va permettre à des personnes de prendre connaissance de votre projet, mais également de vous souvenir de ce que vous avez fait et pourquoi vous l’avez fait, et du contraire.

Une documentation nécessite des images, pas parce que ça fait cool mais parce que ça aère le texte, rend la lecture plus facile –même si certains prétendent que ça casse le rythme– et parce qu’un dessin vaut souvent plus qu’un long discours.

Dès que vous le pouvez, générez des fichiers SVG. L’image en SVG ne fera pas d'« escalier » ou devenir floue parce que l’intégration dans un document nécessitera son redimensionnement. Si vous ne pouvez pas générer du SVG alors choisissez le format PNG en prenant soin de choisir des dimensions qui éviteront le redimensionnement –sortir plusieurs versions si nécessaire. Il ne faut surtout éviter le format JPG car sa compression destructrice entraîne l’apparition de blocs hideux le long des traits. Oubliez le BMP, sauf si vous tenez à ce que votre document comportant 3 images fasse 10 mégaoctets.

Généralités

Inkscape est un logiciel passe-partout permettant de réaliser des diagrammes ou des illustrations. Il existe des extensions pour faire des présentations (sozi ou JessyInk), d’autres pour dessiner des afficheurs 7 segments (SevenSegmentDigits). On peut pratiquement tout faire avec.

On peut aussi faire de jolis ronds.

Exemple avec Inkscape

Son utilisation peut cependant devenir chronophage pour certaines tâches. C’est pourquoi, à quelques occasions, nous nous tournerons vers d’autres outils plus adaptés.

Diagramme de machine d'état (FSM)

Grahpviz est le logiciel qui va vous faire gagner du temps et éviter de perdre des cheveux à placer les éléments dans votre diagramme.

La définition de la machine d'état s’effectue à l’aide d’un simple fichier texte.

Exemple d’une montre-chronomètre

    digraph finite_state_machine {
        rankdir="LR"       // left to right drawing
        size="8"
        node [shape = point ]; start
        node [shape = doublecircle]; "heure";
        node [shape = circle, height=0.1];
        start -> "heure" [label="Start"]
        "heure" -> "chrono" [label="mode"]
        "heure" -> "reg heure" [label="set"]
            "reg heure" -> "reg min" [label="set"]
            "reg min" -> "reg date" [label="set"]
            "reg date" -> "heure" [label="set"]
        "chrono" -> "heure" [label="mode"]
        "chrono" -> "ch.count" [label="set"]
            "ch.count" -> "ch.count"
            "ch.count" -> "heure" [label="mode"]
            "ch.count" -> "ch.stop" [label="set"]
            "ch.stop" -> "chrono" [label="set"]
    }

Je ne me suis pas embêté pour faire cet exemple : il s’agit du squelette d’un FSM existant auquel ont été apporté les modifications relatives à la machine d'état à traiter.

On transforme la définition en image (ici en SVG) avec la commande : dot -Tsvg fsm.gv > fsm.svg (fsm.gv étant le fichier plain texte), ce qui donne :

fsm.svg

Pas mal pour un travail qui a demandé 5 minutes de réalisation et dont la reprise est quasi instantanée.

Chronogrammes

Dia

Je n’ai pour l’instant pas trouver de programmes satisfaisant pour tracer des chronogrammes. Un des choix les plus pertinant semble être Dia. Il y est possible de définir le signal à l’aide de commandes simples et d'éviter de devoir dessiner ses différents états.

Commande Effet
@<num> aller au temps absolu num
( dessine un front montant
) dessine un front descendant
<num> temps d’attente

Par exemple, pour créer un front montant au temps 35 (le type de l’unité n’est pas spécifiée, cela peut être des secondes ou des millisecondes) et conserver l'état haut pendant 3 unités de temps, on utilisera : @35(3).

Plus de détail sur l'utilisation de Dia pour dessiner des chronogrammes.

Timink

Un extension pour Inkscape permet de définir l'état de différents signaux et les tracer automatiquement : Timink.

Drawtiming

Un programme en ligne de commande permet également la même chose : Drawtiming. La dernière version ne compile plus sans apporter une légère modification. Voici le patch à appliquer :

--- timing.cc.old   2013-07-19 16:08:09.996720129 +0200
+++ timing.cc   2013-07-19 16:08:27.296434967 +0200
@@ -23,6 +23,7 @@
 #include "timing.h"
 #include <map>
 #include <fstream>
+#include <strings.h>
 using namespace std;
 using namespace timing;
 using namespace Magick;

Probablement pas le meilleur patch du moment avec du C dans des déclarations C++. Cependant, it works@home.

Wavedrom

Il existe aussi un éditeur en ligne Wavedrom

Éditeur de schémas

À faire

Liste d'éditeurs :

Modules

Capteurs

DHT11

Accéléromètre 3 axes - GY-61

VCC : de 1,8 à 5,5 V, le module possède un régulateur de tension XC6206P332MR (662K).

Récepteur IR

Détecteur de son

VCC : de 2 à 36 V (selon datasheet du LM393). On s’arrêtera avant les 36 V.

AOP LM393 utilisé en comparateur. Lorsque la membrane du micro vibre, la tension émise par celui-ci est comparée à une tension de référence réglable (potar). Si la tension émise est plus haute que celle de référence, la sortie out est mise à 1.

Luminosité - GY-68

Addresse I²C : 0x23

BMP180 Pression, température - GY-302

Addresse I²C : 0x77

Clavier capacitif 8 touches

Piloté par un TTP226.

La sortie DV génère un pulse lorsqu’une touche a été appuyée. Possibilité d’accéder à plusieurs pins supplémentaires en soudant des connecteurs

Capteur humidité (moisture sensor)

Le capteur est livré avec un module comportant un APO en comparateur; n’importe quel élement résistif peut être utilisé par le module. la sortie A0 permet la lecture de la tension (pont diviseur ?), la sortie D0 est mise à 1 si la tension relevée est supérieure à la tension de référence, la sortie est couplée à une LED.

Capteur mouvement IR (PIR)

Le PIR émet un pulse lorsqu’il y a mouvement (détection réalisée suite à la comparaison de deux « images » thermiques ). Le capteur a besoin d’un calibrage avec le moins de mouvements possibles.

Le potar Sx est utilisé pour régler la sensibilité, celui Tx permet de régler le temps pendant lequel le capteur est activé (triggered).

Utilisation avec un ESP8266

local pir = 3
gpio.mode(pir,gpio.INT,gpio.PULLUP)

function motion()
        print("Motion Detected!", tmr.now())
        tmr.delay(2000000)
        print("delay off")
end

--calibration
print("calibration")
tmr.delay(30000000) -- 30 s
print("done")

gpio.trig(pir,"up",motion)

Remarque : la réaction du PIR est « moins précise » lorsqu’alimenté en 3,3 V (alors que la datasheet indique une plage de fonctionnement de 3,3 V à 5 V).

Module # 1 node.info() 0 9 6 10486772 1261768 512 0 40000000

Datasheet

MCU

ATtiny 85 (DIP)

ATTiny 85 (Digispark)

Voir connecting digispark. Sous Archlinux, il faut recompiler le programme micronucleus et installer la règle udev 49-micronucleus présente dans la doc et sur le repo.

Pour faire clignoter la LED présente sur la carte

int led = 1;
int wait = 500;

void setup() {
    pinMode(led, OUTPUT);
}

void loop() {
    digitalWrite(led, HIGH);
    delay(wait);
    digitalWrite(led, LOW);
    delay(wait);
}

Utilisation du détecteur infrarouge avec interruption matériel

int led = 1;
int wait = 1000;

void setup() {
    pinMode(led, OUTPUT);
    digitalWrite(led, LOW);
    attachInterrupt(0, blink, RISING); // PIR Output on PB2 (INTO)
}

void blink() {
        digitalWrite(led, HIGH);
        delay(wait);
        digitalWrite(led, LOW);
}

void loop() { // keeps IDE happy
}

Schematics de la carte digispark

Informations complémentaires

Le convertisseur 5 V peut fournir jusqu'à 100 mA en sortie, ce qui est largement suffisant pour le microcontrôleur mais peut être insuffisant pour plusieurs périphériques. Il est possible d’utiliser la broche 5 V pour alimenter directement la carte (test réalisé avec une batterie 3,7 V).

Connexions pour flasher le tiny85 de la carte avec la méthode Arduino as ISP:

Arduino digispark Pin Att85
5 V 5 V 8
GND GND 4
13 PB2 7
12 PB1 6
11 PB0 5
10 PB5 1

Le tiny85 de la carte digispark fonctionne à 16 MHz pour pouvoir utiliser V-USB. L’utilisation de cette fréquence peut poser des problèmes lorsqu’on utilise une tension d’alimentation plus basse, par exemple 3,7 V.

Cartes Arduino

Uno Rev. 3

Pas grand chose à dire sur cette carte, le classique.

Pinout

DCcduino UNO

sku<sub>340374</sub><sub>1</sub>.jpg

Moins cher que l’original, avec plus de connecteurs disponible. La carte dispose également d’un convertisseur 3,3 V exploitable, un AMS1117-3.3 de 1 A au lieu de 150 mA pour celui de l’original.

ESP8266

Voi esp8266

Communication

Émetteur 413 MHz (FS1000A)

Récepteur 413 MHz (XY-MK-5V)

Je reçois sans arrêt une trame alors que je n’ai pas connaissance d’avoir un appareil communiquant sur la fréquence des 413 MHz. :D

Module I²C -> Parallèle

Adresse I²C : 0x27

Utilisé pour communiquer avec l’afficheur LCD en I²C, peut servir de manière plus générale, par exemple pour piloter un afficheur 7 segments.

USB -> RS232

FTDI

Affichage

Matrice LED (MAX7219)

LCD 16×2.

8 LED RGB (K84501)

Alimentation

Alimentation pour breadboard YwRobot 545043

Fournit une tension de 3,3 V et de 5 V

LM2596

step-down. VIN de 4.5V à 40V, VOUT de 1,23 V à 30 V (à vérifier)

Step up -> 5V

Sortie sur une prise USB. Idéal pour alimenter/charger un péripérique USB à partir d’une batterie lithium recyclée.

VIN min. : 2,5 V

Régulateur 3,3 V

HK1117 (3.3)

Divers

Modules RTC (ZS-042)

Comporte une RAM de 32 kbits et un IC pouvant mesurer la température (précision ± 3°C), générer un signal carré (de 1 kHz, 1.024 Hz 4.096 Hz ou 8.192 Hz), un signal d’horloge de 32 kHz. Le circuit comporte deux alarmes.

Adresse I²C : 0x57 (EEPROM) et 0x68 (RTC))