dimanche 26 octobre 2014

Communication RF 433 MHz entre Raspberry Pi et Arduino

Cet article a été mise à jour le 8 janvier 2021. À cette occasion, j'ai pu faire fonctionner la communication de l'Arduino vers le Raspberry pi uniquement. Pour une raison que j'ignore, la communication du Raspberry Pi vers l'Arduino ne semble plus fonctionner.

Nous avons déjà abordé la communication entre le Raspberry Pi et l'Arduino au moyen d'un câble USB, ce qui imposait une certaine proximité entre les deux cartes.

Aujourd'hui, nous nous débarrassons du câble:  l'Arduino et le Raspberry Pi s'échangeront des informations par ondes radio, à une fréquence de 433 MHz.


Matériel nécessaire

En plus du Raspberry Pi et de l'Arduino, nous utiliserons un émetteur et un récepteur 433 MHz, le modèle ultra-économique qu'on peut trouver sur eBay pour environ 1 euro.  Une antenne constituée d'un fil conducteur d'environ 17 cm vous permettra d'augmenter considérablement la portée de votre paire émetteur-récepteur.

Émetteur
Récepteur


Installation des bibliothèques 

Du côté de l'Arduino, j'ai utilisé la bibliothèque VirtualWire même si elle n'est plus mise à jour par son auteur (je ne me suis pas encore converti à RadioHead).  Donc, si ce n'est pas déjà fait, vous devriez télécharger et installer VirtualWire dans votre IDE Arduino.

Du côté du Raspberry Pi, j'ai utilisé le module Python rédigé par Joan du Forum Raspberry Pi.  Donc vous téléchargez le fichier vw.py et vous le placez dans le même répertoire que votre script Python (voir plus loin pour les scripts).  Ce n'est pas tout:  ce module requiert la bibliothèque pigpio .  Pour installer cette bibliothèque dans votre Raspberry Pi, vous tapez ces lignes de commande dans le terminal:

wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install

Transmission de l'Arduino vers le Raspberry Pi

Branchez l'émetteur à l'Arduino de la façon suivante: 
  • Broche DATA de l'émetteur à la sortie 12 de l'Arduino
  • Broche Vcc de l'émetteur à la sortie 5 V de l'Arduino
  • Broche GND de l'émetteur à une des broches GND de l'Arduino

 Branchez le récepteur au Raspberry Pi de la façon suivante:
  • Une des broches DATA du récepteur (peu importe laquelle) à la pin GPIO 11 du Raspberry Pi.
  • Broche 5 V du récepteur à une des broches 3,3 V du Raspberry Pi
  • Broche GND du récepteur à une des pins GND du Raspberry Pi
Voici le sketch à installer dans l'Arduino (chaque message envoyé par l'Arduino sera numéroté, ce qui nous permet de vérifier si tous les messages envoyés sont reçus).



Et voici le script Python à installer dans le Raspberry Pi.  N'oubliez pas d'installer ce script dans le même répertoire que le fichier vw.py. 

Avant d'exécuter le script, vous devez mettre en marche le "démon pigpio" au moyen de cette ligne de commande:

sudo pigpiod








Transmission du Raspberry Pi vers l'Arduino 

N.B.: Lors de la mise à jour de cet article le 8 janvier 2021, je ne suis pas parvenu à faire fonctionner la transmission du Raspberry Pi vers l'Arduino.

 Branchez l'émetteur au Raspberry Pi de la façon suivante: 
  • Broche DATA de l'émetteur à la pin GPIO 25 du Raspberry Pi
  • Broche Vcc de l'émetteur à une des pins 5 V du Raspberry Pi
  • Broche GND de l'émetteur à une des pins GND du Raspberry Pi

 Branchez le récepteur à l'Arduino de la façon suivante:
  • Une des broches DATA du récepteur (peu importe laquelle) à l'entrée 11 de l'Arduino.
  • Broche 5 V du récepteur à la sortie 5 V de l'Arduino 
  • Broche GND du récepteur à une des pins GND de l'Arduino

Voici le sketch à installer dans l'Arduino (n'oubliez pas d'afficher le moniteur série, où les résultats reçus seront affichés):



Et voici le script Python à exécuter par le Raspberry Pi (n'oubliez pas d'installer ce script dans le même répertoire que le fichier vw.py). 

Avant d'exécuter le script, vous devez mettre en marche le "démon pigpio" au moyen de cette ligne de commande:

sudo pigpiod






Si vous préférez une communication 433 MHz entre deux Arduinos, référez-vous à cet article.  Et j'ai tout plein d'articles sur le Raspberry Pi qui vous plairont peut-être.

Yves Pelletier (Twitter:  @ElectroAmateur)

dimanche 19 octobre 2014

Amplificateurs Opérationnels (6): Le sommateur et le soustracteur

Nous en sommes donc au sixième article de cette série qui présente des expérimentations effectuées au moyen de l'amplificateur opérationnel.   Dans les livraisons précédentes, nous avons utilisé notre UA741en mode comparateur, suiveur de tension, multivibrateur astable, différentiateur, intégrateur et amplificateur inverseur.  C'est déjà pas mal, mais ce n'est pas terminé:  aujourd'hui, nous allons nous amuser à additionner et soustraire des signaux périodiques.

Première étape:  produire deux signaux périodiques, différents l'un de l'autre, que nous pourrons ensuite additionner ou soustraire.

Production d'un signal en créneau

Notre premier signal sera un signal en créneau (signal carré).  Pour ce faire, nous construisons à nouveau le multivibrateur astable de l'article numéro 3.

 Sans surprise, nous obtenons ce signal à la sortie:



Production d'un signal triangulaire

Le signal de sortie du multivibrateur astable est ensuite acheminé à l'intégrateur de l'article numéro 4.



Nous retrouvons, à la sortie de cet intégrateur, un signal de forme triangulaire.


Essayez maintenant d'imager à quoi pourra ressembler l'addition et la soustraction de ces deux signaux...



Addition des deux signaux

Voici le circuit sommateur qui permettra d'additionner les deux signaux (hé oui, il s'agit d'un troisième amplificateur opérationnel).  Reliez la sortie du multivibrateur à l'entrée 1 du sommateur, et la sortie de l'intégrateur à l'entrée 2 du sommateur.


Si le potentiomètre est réglé au maximum, le signal de sortie devrait être égal à l'addition des deux signaux sans la moindre atténuation, mais l'amplitude de ce signal entraînera probablement une saturation de l'amplificateur opérationnel (signal déformé).  Si le potentiomètre est réglé à une position intermédiaire, le signal de sortie présentera une version atténuée de l'addition des deux signaux.

Et voici ce que ça donne:



En remplaçant les résistances de 10K par des potentiomètres, ce circuit devient un mixeur audio rudimentaire.


Soustraction des deux signaux

Construisons maintenant un circuit à la sortie duquel on retrouvera la soustraction de nos deux signaux:  un tel circuit s'appelle soustracteur, ou amplificateur différentiel.  Ici encore, vous reliez la sortie du multivibrateur à l'entrée 1 du soustracteur, et la sortie de l'intégrateur à l'entrée 2 du soustracteur.



Et voici ce qu'on obtient, cette fois.  Ça ressemble un peu au signal obtenu à la sortie du sommateur, sauf que l'inclinaison est dans l'autre sens.



Continuez d'expérimenter!   Par exemple, vous pourriez produire deux signaux en créneau de fréquences différentes, et voir ce que ça donne quand vous les additionnez.

Article suivant:  Amplificateurs opérationnels (7):  source de courant

Article précédent: Amplificateurs opérationnels (5):  amplificateur inverseur

Yves Pelletier (Twitter:  @ElectroAmateur)

samedi 18 octobre 2014

Transmettre les données de l'Arduino vers un tableur (Excel ou Libre Office Calc)

Ce n'est pas la première fois que je vous parle de data logging au moyen de l'Arduino: il y a quelques mois, nous avions vu comment procéder pour que l'Arduino enregistre ses mesures sur un fichier CSV situé sur une carte SD.  Ce fichier CSV pouvait ensuite être lu par Excel.  L'inconvénient de cette méthode, c'est qu'on ne voit pas les données pendant qu'elles sont enregistrées:  on doit interrompre l'acquisition des données pour retirer la carte SD de l'Arduino,  et l'insérer dans un ordinateur muni d'Excel.

Nous avions ensuite expérimenté la transmission de données de l'Arduino (muni d'un shield Ethernet) vers le service en ligne carriots.com, ce qui nous permettait de visualiser un graphique qui se mettait à jour en temps réel.

Mais dans bien des cas, on préférerait pouvoir transmettre les données en temps réel à un ordinateur situé tout près de l'Arduino, pour que celui-ci les affiche sous forme de graphique.  Si on n'a pas besoin d'accéder à ces données à partir d'un autre ordinateur, pourquoi se donnerait-on la peine de les expédier sur internet avec un shield Ethernet ou Wi-Fi?

Pour ce faire, on peut écrire notre propre programme en Processing ou en Python, mais on peut aussi utiliser un tableur comme Excel ou LibreOffice Calc. Et vous savez quoi? Ce n'est pas seulement possible, c'est même plutôt facile!


PLX-DAQ et Excel

Pour utiliser PLX-DAQ, vous aurez besoin d'un ordinateur muni du logiciel Excel. Vous n'avez pas Excel?  Avant de vous précipiter vers les employés de Bill Gates pour leur offrir une partie substantielle de votre argent, lisez plutôt la partie de cet article qui parle de l'utilisation de Libre Office Calc, qui est totalement gratuit.

PLX-DAQ est une macro pour Excel mise au point par la société Parallax pour permettre aux microcontrôleurs qu'elle commercialise d'envoyer des données vers Excel.  C'est gratuit, et ça fonctionne avec n'importe quel microcontrôleur capable de communication série, ce qui inclut bien sûr l'Arduino!

Le circuit

Pour faire un premier essai rapide, un potentiomètre achemine un signal analogique à l'entrée A0 de l'Arduino.  C'est ce signal qui sera envoyé à Excel pour être mis en graphique. Évidemment, l'Arduino doit être relié à un des ports USB de l'ordinateur.

Le sketch Arduino

Le sketch à téléverser dans l'Arduino est plutôt simple:  il consiste en gros à lire la valeur de l'entrée A0, et de la transmettre par liaison série (donc Serial.Print et Serial.Println, comme quand on veut afficher quelque chose dans le moniteur Série).  Chaque fois que la macro PLX-DAQ reçoit la commande DATA suivie d'une liste de données séparées par des virgules, elle place ces données sur la prochaine ligne du tableur.

TIME (en majuscules) est une instruction qui indique à la macro d'insérer l'heure (ce sera l'heure telle que réglée dans l'ordinateur qui exécute Excel).
.

.

Installation et utilisation de la macro

Par défaut, Excel est plutôt paranoïaque en ce qui concerne les macros:  en mode "Niveau de sécurité élevé", il refuse de les exécuter, par crainte qu'elles contiennent des virus.  Pour vérifier le niveau de sécurité de votre exemplaire d'Excel (et pour le modifier s'il n'est pas adéquat), choisissez "Options" dans le menu "Outils".