was successfully added to your cart.
Image de UNE pour la rentrée de SimpleDuino

SimpleDuino fait sa rentrée 2016

By | Projets | No Comments

La rentrée vient de se terminer pour vous tous, et également pour nous. Il est grand temps de se remettre au travail. Nous allons publier de nouveaux tutoriels cette année pour l’arduino et raspberry ainsi que de nombreux projets. Nous avons aussi l’ambition de participer à de nombreux salons pour développer la communauté et montrer le potentiel de la programmation liant électronique et mécanique.

Durant les congés d’été nous sommes restés présents et actifs sur le forum, nous avons continué la réalisation des projets en cours et nous nous sommes aussi lancés dans de nouveaux projets.

Comme vous le savez maintenant, l’équipe SimpleDuino a réalisé un drone qui a pour but d’être entièrement autonome. C’est-à-dire qu’il puisse gérer sa batterie, se poser seul, maintenir sa position et pouvoir être commandé à distance en lui ordonnant de se déplacer à un endroit précis. Vous avez pu nous rencontrer et discuter de ce projet lors de notre présence à la MakerFaire Paris 2016.

Nous avions également exposé notre projet de domotique SimpleDomo ainsi que la réalisation de notre première imprimante 3D totalement imprimée dont vous pouvez retrouver des informations sur le site et le forum.

Partant de ce dernier projet, nous voulions aller plus loin. Nous avons souhaité concevoir de A à Z une imprimante 3D afin de connaître parfaitement ses caractéristiques et sa façon d’être conçue. De plus nous pourrons modifier cette imprimante dans le futur afin de lui ajouter une fraise et d’en faire une CNC. La seule contrainte que nous nous sommes imposés pour la conception de cette nouvelle imprimante est de pouvoir y installer un plateau chauffant de dimension 328x328mm. Le cahier des charges étant minimaliste, nous avons libre cours à notre imagination pour sa conception.

 

Vous êtes tous créatifs ! Vous avez tous de très bonnes idées mais plus vous pensez comment la réaliser, plus vous avez peur de ne pas y parvenir. N’ayez pas peur de l’échec ! Prenez le temps de bien faire chaque partie. Restez organisé ! C’est en se trompant que nous apprenons le plus. Nous faisons tous des erreurs, l’important est de comprendre pourquoi cela ne peut pas marcher afin de trouver la solution au problème. Et pensez que vous n’êtes jamais seul ! Venez poser vos interrogations sur le forum afin qu’ensemble, nous puissions trouver des solutions.

 

Restez connecté afin de suivre l’évolution de ce nouveau projet.

 

Thomas A.

(Re)Découvrez l’Arduino

By | Débutant Arduino | No Comments

Nous allons découvrir ensemble ce qu’est l’Arduino et à quoi cela peut-il servir. Nous apprendrons ensemble les bases du langage de programmation de l’Arduino, ainsi que quelques notions de POO (programmation orienté objet) qui peuvent s’avérer très utiles lorsque vos codes commencent à être compliqués.

Bien entendu, nous apprendrons comment utiliser les capteurs les plus répandus ainsi que des bases en électroniques pures. De plus, des cours complémentaires sur des composants standards (diode, diode Zener, transistor PNP/NPN…) apparaîtront.

L’équipe de rédaction de SimpleDuino s’efforcera de mettre à jour ces cours, et en y ajoutant les liens nécessaires vers des cours et tutoriels complémentaires.

Si vous avez des questions ou remarques particulières, n’hésitez pas à entrer en contact avec nous en écrivant à [email protected] ou en posant directement votre question sur le forum.

I) L’Arduino

1°) Historique

L’Arduino est une carte programmable développée autour d’une puce AtMega328 (pour l’Arduino UNO) produite par la société Atmel. D’autres modèles de carte Arduino existent. Ces modèles vous sont décrits dans la partie suivante.

L’Arduino a été créée par Massimo Banzi en 2005. Massimo Banzi, professeur de design à, souhaitait rendre ludique et facile l’apprentissage de la programmation des microcontrôleurs à ses élèves, débutants en informatique, afin de rendre les objets intelligents. Il décida, avec ses associés, d’inventer une carte programmable fonctionnant sous un langage de programmation simple et accessible à tous.

Image du prototype Arduino

Image du prototype Arduino

2°) Tableau comparatifs des différents modèles

Tableau comparatifs des principaux modèles (non exhaustif)

Tableau comparatifs des principaux modèles (non exhaustif)

3°) Cartographie des entrées/sorties de l’Arduino UNO

Etant l’Arduino le plus utilisé par les débutants, nous allons voir ensemble la cartographie de l’Arduino UNO afin de vous expliquer comment lire un schéma électronique. La lecture des autres cartes étant similaire, je vous laisse explorer le site d’Arduino afin de savoir ce que nos chères cartes ont dans le ventre. Vous pouvez retrouver le schéma électronique de l’arduino UNO ici. Les schémas de toutes les cartes Arduino se trouvent sur leur site. N’hésitez pas à être curieux !

Voici une vue d’ensemble de l’arduino UNO :

Schema_Arduin_UNO_explicatif

Schema Arduino UNO explicatif

Vous pouvez remarquer qu’il se trouve deux puce AtMega. Une AtMega 16u2 qui permet de convertir les données USB en données série, et la puce AtMega 328p qui est le microcontrôleur.

Sur les Arduino, quel que soit la carte, deux types d’entrées/sorties sont à différencier. Les entrées/sorties numériques et les entrées analogiques.

  • 1: Régulateur de tension 12V-5V DC
  • 2: Quartz
  • 3: Entrées analogiques
  • 4 et 5: Entrées/Sorties numériques
  • 6: Pins d’alimentations

Les parties précédemment énoncées désignent les éléments indispensables au fonctionnement d’un arduino. Grâce à ces éléments, il est possible de refaire soit même un arduino afin d’en minimiser la taille ou d’en optimiser les performances. Vous pouvez aller visiter le tutoriel suivant http://simple-duino.com/realiser-arduino-maison/ pour apprendre à réaliser un arduino.

II) Le langage Arduino

1°) Installation et découverte de l’IDE Arduino

L’IDE Arduino est un logiciel permettant de générer un code et de l’implémenter sur le microcontrôleur. Vous pouvez télécharger le logiciel Arduino IDE sur le site officiel d’Arduino.

Une fois téléchargé, lancez l’assistant d’installation, et suivez les instructions.

a) Décomposition de l’environnement de travail

L’IDE Arduino se décompose en 5 zones.

  • Zone 1: Bouton de téléversement
  • Zone 2: Bouton de lancement du port série. En cliquant sur ce bouton le port série va s’ouvrir. De cette fenêtre vous pourrez lancer des actions via des commandes envoyées sur l’Arduino par l’ordinateur.
  • Zone 3: Zone de code. C’est dans cette zone que vous allez écrire le code à implémenter sur l’Arduino.
  • Zone 4: Console de débogage. La console vous permet de visualiser où se situent les erreurs et quels sont les types d’erreurs.
  • Zone 5: Information de la configuration de l’IDE. Vous avez une vue d’ensemble de la carte que vous avez sélectionné et du port auquel vous vous êtes rattachés.
IDE Arduino explicatif

IDE Arduino explicatif

b) Le code Arduino

Le code Arduino est basé sur le langage C. Il est cependant arrangé pour qu’il soit plus simple à utiliser et par conséquent il demande moins de temps pour l’apprendre. Seul la logique de programmation est commune à tous les langages, que ce soit du Java, du C#, du C++, etc… Mais n’ayez pas peur, ce n’est pas très compliqué.

Nous allons énoncer les principales fonctions que vous devez connaître. Des explications supplémentaires se trouvent dans les tutoriels du site.

1
pinMode(pin, INPUT/OUTPUT);

Cette fonction permet de définir les pins comme étant des pins d’entrée ou de sortie.

1
digitalWrite(pin, etat);

« etat » peut être « HIGH/LOW », ou un nombre compris entre 0 et 255 pour les PWM reconnaissable avec le ~.

1
digitalRead(pin);

Récupère l’information (0 ou 1) d’un pin numérique.

1
analogRead(pin);

Récupère l’information d’un pin analogique.

III) Notions d’électroniques

1°) Loi d’Ohm, loi des Mailles, loi des Noeuds

Toute l’électronique, ou électricité en général, repose sur trois loins fondamentales qui sont la loi d’Ohm, la loi des Mailles et la loi des Noeuds.

a) Loi d’Ohm

La loi d’Ohm est la loi qui lie l’intensité, la tension et la résistance.

Loi d'Ohm

Loi d’Ohm

Avec:

  • U: Volt
  • R: Ohm
  • I: Ampère

Vous pouvez manipuler cette loi dans le sens que vous voulez, permettant ainsi de déduire des valeurs de résistances à mettre en série avec une LED par exemple. Cette loi va également beaucoup vous servir pour résoudre vos problèmes de dimensionnement de composant en complément des lois des mailles et des nœuds.

b) Loi des Mailles

La loi des mailles est une loi permettant d’établir des équations d’une maille fermée.

La loi des Mailles assure:

Loi des Mailles

Loi des Mailles

c) Loi des Noeuds

La Loi des nœuds dans un circuit est présente dès lors que votre montage comporte plusieurs branches. Le lieu de rencontre de ces « branches » s’appelle un « nœud ».

La loi des noeuds assure:

Loi des Noeuds

Loi des Noeuds

2°) Les entrées-sorties numériques

Les entrées et sorties numériques (digitales) se traitent de manière similaire. Il s’agit d’un signal binaire (0-5v). Dans un cas l’arduino est capable de générer un signal carré d’amplitude 5v, et dans l’autre l’arduino est capable d’interpréter un signal reçu en créneaux de 5v.

Vous pouvez trouver plus d’informations sur ce tutoriel expliquant les entrées et sorties numériques.

3°) Les entrées analogiques

Contrairement aux broches numériques, les broches analogiques ne fonctionnent qu’en entrée.  Il est impossible de générer un signal analogique (signal dont les variations sont continues dans les temps) à l’aide d’un arduino. Vous en avez sans doute tous déjà utilisé, les GBF permettent de générer de tel signaux, qu’ils soient sinusoïdaux, en créneaux ou en triangles.

Une donnée analogique va être, dans la quasi-totalité des cas, générée par un capteur (température, luminosité, humidité…). En effet, le capteur va fournir une image de la tension en fonction du temps. La fonction permettant de récupérer cette valeur avec l’arduino est :

1
analogRead(analog_pin);

Vous pouvez trouver plus d’informations sur ce tutoriel expliquant les entrées analogiques.

4°) La fonction PWM (Pulse Width Modulation)

La fonction Pulse Width Modulation (PWM) est un signal dont on fait varier le rapport cyclique afin que la fréquence varie.

Définition du rapport cyclique

Définition du rapport cyclique

Le rapport cyclique est défini comme:

Formule Rapport Cyclique

Formule Rapport Cyclique

Avec:

  • ton: temps à l’état haut
  • T: Période du signal
  • a: Nombre compris entre 0 et 1 (souvent on parle en %)

Imaginez que vous avez devant vous une diode. Plus le rapport cyclique est grand, plus l’intensité lumineuse de la diode sera importante. Le temps à l’état haut correspond au temps auquel la diode va s’allumer, puis le temps à l’état bas correspond au temps auquel la diode va s’éteindre. C’est cet enchainement d’état qui fait varier la fréquence et donc l’intensité lumineuse pour une LED, ou la vitesse de rotation pour un moteur par exemple.

La fonction PWM permet de faire varier ce rapport cyclique, et donc la fréquence de l’état haut. Pour se faire, nous utilisons la fonction « digitalWrite(nomPin, pwm) », où « pwm » désigne un nombre compris entre 0 et 255 qui correspond au rapport cyclique du signal.

Explication PWM

Explication PWM

On pourrait faire l’amalgame avec une entrée « analogique », mais gardez à l’esprit que nous ne travaillons qu’avec des signaux binaires, donc avec une amplitude fixe.

5°) Les fonctions delay(), millis()

La gestion du temps est une chose très délicate et difficile à assimiler. Vous allez souvent (tout le temps ?) être confronté à la manière dont vous allez gérer le temps. Faut-il que mon programme puisse faire quelque chose pendant une attente ? Comment puis-je simuler une horloge ?

La fonction que vous allez utiliser va dépendre de la tâche que vous souhaitez réaliser. La fonction « delay() » fait une pause dans le programme, et il est impossible de demander au microprocesseur de faire une action pendant cette pause. On « gèle » le déroulement du programme.

Nous préférerons utiliser la fonction « millis() » bien qu’elle soit beaucoup plus difficile à comprendre. Cette fonction va compter, sans jamais s’arrêter, le temps d’exécution du programme. C’est pourquoi il faut utiliser des conditions pour savoir quand vous souhaitez réaliser une action.

Vous pouvez donc vous demander comment détecter qu’une seconde c’est bien écoulée !

Pour cela il faut se repencher un peu dans les mathématiques et se rappeler la notion de la division euclidienne. La division euclidienne est une division qui a deux entiers appelés dividende et diviseur, associe deux entiers nommés quotient et reste. Justement, nous allons utiliser cette propriété mathématique. L’outil mathématique « modulo » (%) va effectuer cette opération.

1
2
Reste = millis() % 10000;
if(Reste == 0) {Serial.println("BOUM");}

Quand millis() est égal à 10000, 20000, 30000, etc… le « reste » sera égal à zéro. Ce qui signifiera que 10 secondes se seront écoulées. Si millis() n’est pas égal à 10000 ou un multiple de 10000, alors « reste » ne sera pas égal à zéro. Donc la boucle « if » ne sera pas exécutée.

Bien entendu, vous n’êtes pas obligé d’utiliser la fonction millis() uniquement pour cette utilisation. Mais grâce à ça, vous pouvez effectuer des actions pendant ces « attentes ».

IV) Les protocoles de communication

1°) La liaison série

La liaison série, aussi qualifiée de « UART » en anglais pour « Universal Asynchronous Receiver Transmitter », est un protocole essentiel dans la programmation Arduino. En fait, vous ne le savez peut-être pas mais chaque fois que vous appuyez sur « Téléverser », l’IDE Arduino va transmettre une série d’instruction à la puce (Atmega328P dans le cas d’un UNO) afin de la reprogrammer.

L’un des avantages majeurs de la liaison série, c’est sa simplicité de mise en œuvre. En effet, puisque l’Arduino embarque directement une librairie dédiée, il n’y a absolument aucune difficulté à initier une telle communication. Cela permet de « débuger » rapidement des programmes en visualisant à l’écran des variables que nous aurons auparavant demandé à l’Arduino d’afficher sur le port série. Cependant, la liaison série ne se limite pas seulement à des opérations de débogage et son utilisation peut être bien plus poussée. C’est le cas notamment lors de l’utilisation du module SM130, un lecteur RFID, qui fonctionne via le protocole série. Vous retrouverez un tutoriel sur notre site à l’adresse suivante: http://simple-duino.com/utilisez-les-datasheets-et-decouvrez-le-module-sm130/

Dans la continuité, l’utilisation des modules tels que les ESP8266 permettant la transmission/réception d’information par wifi requiert une bonne connaissance du protocole série. Vous trouverez un premier tutoriel sur ces modules en suivant le lien suivant: http://simple-duino.com/decouvrez-la-communication-wifi-low-cost-avec-arduino/

Il est essentiel de comprendre que la liaison série constitue un excellent outil de développement tout autant qu’un protocole de communication à part entière. Une fois que cette notion est maitrisée, on gagne largement en temps de développement puisqu’on peut alors localiser bien plus facilement les points critiques de notre programme.

2°) Les liaisons SPI et I2C

Parfois, la liaison série ne permettra pas d’interagir avec des circuits intégrés ou des modules bien spécifiques. En fait, c’est une situation qui est assez récurrente même. Généralement, ces modules utilisent la communication I2C plus que SPI. Un exemple concret de communication SPI (Serial Peripheral Interface) pourrait être le shield officiel Arduino. Il utilise en effet les six pins situés absolument à droite de votre Arduino UNO (ceux qui sont regroupés au-dessous de la vis de fixation).

Pour l’I2C, les applications sont bien plus courantes et les exemples d’utilisations bien plus nombreux. En fait, nous nous sommes très souvent retrouvé face à des circuits à contrôler via I2C, c’est le cas notamment de convertisseurs Analogiques/Numériques ou encore de circuits RTC (Real Time Clock).

Un protocole I2C, pour Inter-Integrated circuit, fonctionne en fait sur le principe de maitre/esclave. On a un module maitre, dans notre cas l’Arduino, et plusieurs modules esclaves dont les adresses sont différentes. Bien souvent, l’adresse I2C du circuit est spécifiée dans la documentation et n’est pas modifiable. Il arrive cependant que certains pins aient été prévus sur les circuits pour modifier quelques bits de l’adresse. Le protocole I2C utilise deux fils, SDA (Serial Data Line) et SCL (Serial Clock Line). Vous le comprendrez donc aisément, on a une ligne de donnée et une ligne d’horloge. Pour faire simple, à chaque fois que la ligne SCL passe à l’état Haut, l’état actuel de la ligne SDA est transmis au circuit intégré. Si SDA est à 0, le circuit reçoit donc 0 et si SDA est à 1, le circuit reçoit un 1.

Bien entendu, le protocole n’est pas aussi simple que ça. Vous vous souvenez qu’il est question d’adresse mais aussi d’acquittement des données, de bit de Start, de Stop, etc… Heureusement, Arduino va nous permettre de simplifier grandement le travail grâce à la librairie Wire.h dont vous pourrez retrouver un exemple d’application en suivant le lien suivant: http://simple-duino.com/module-ds1307-chez-sparkfun/.

V) Composants et modules

1°) Les diodes, LED

a) Diodes et diodes Zener

Les diodes sont des semi-conducteurs permettant de protéger un circuit. En effet, ce composant ne laisse passer le courant que dans un sens, le bloquant dans l’autre jusqu’à ce que la tension du circuit soit supérieure à la tension de claquage de la diode auquel cas la diode se détruit.

Schéma diode

Schéma diode

La diode Zener est quant à elle faite pour ce type d’utilisation. Cette diode, souvent montée en parallèle du composant auquel elle lui est rapportée,  va faire office de coupe circuit lorsque la tension parcourant le circuit est trop importante et risque de détériorer le composant à protéger. La diode Zener, va, à ce moment-là « claquer » et le courant va ainsi passer à travers elle plutôt que le composant monté en parallèle.

Schéma diode Zener

Schéma diode Zener

Une des utilisations intéressantes est la mise en place d’une diode Zener de 5v en parallèle d’un fils branché à un Arduino afin d’éviter des « retours » de courant supérieurs à 5v risquant de détériorer la carte.

b) LED

Une LED (DEL en français, diode électroluminescente) est un semi-conducteur capable d’émettre de la lumière lorsque d’un courant la parcourt. La LED ne laisse passer le courant que dans un sens.

Les LED fonctionnent souvent avec des courants faibles. C’est pourquoi l’utilisation de résistance est obligatoire. La valeur de la résistance nécessaire est obtenue grâce à la loi d’Ohm énoncé auparavant. Les datasheets des constructeurs fournissent les informations nécessaires au calcul de cette résistance.

Schéma diode électroluminescente

Schéma diode électroluminescente

2°) Les résistances et potentiomètres

a) Les résistances

Une résistance est un composant passif permettant de protéger un composant en abaissant la tension ou le courant le traversant.

Chaque résistance est référencée grâce à sa valeur qui peut être lue en observant ses bandes de couleurs.

Code couleur résistance

Code couleur résistance

De plus, il est possible de monter en série et en dérivation un ensemble de résistance permettant ainsi d’obtenir de nouvelles valeurs.

  • En série: La valeur de la résistance équivalente des résistances montées en série s’additionne:

Req_Serie

  • En parallèle: La valeur de la résistance équivalente des résistances montées en parallèles s’obtient de la manière suivante:

Req_Parallele

b) Les potentiomètres

Les potentiomètres sont des résistances variables. Il en existe deux sortes, les linéaires et les rotatifs.

Les deux potentiomètres fonctionnent sur le même principe. Un curseur, dont nous définissons sa position, se déplace sur une piste en carbone. La distance du fil entre la broche d’entrée et le curseur défini une valeur de résistance que l’on va noter R1, et une seconde valeur de résistance R2 est définie entre le curseur et la broche de sortie. Il ne resta plus qu’à appliquer un pont diviseur de tension.

Schéma potentiomètre rotatif

Schéma potentiomètre rotatif

Eh oui !  Un potentiomètre est un pont diviseur de tension variable !

3°) Quelques composants utiles

a) Les condensateurs et bobines

b) Les transistors et relais

Les transistors sont des semi-conducteurs à jonction PN qui, lorsqu’il est commandé, permet d’être utilisé comme interrupteur. Il existe deux types de transistors, les PNP et les NPN. Les plus utilisés sont les transistors NPN, c’est pourquoi nous expliquerons essentiellement le fonctionnement de ce type de transistor.

Chaque transistor possède trois broches.

  • B: Base
  • C: Collecteur
  • E: Emetteur
Schéma des transistors

Schéma des transistors

En appliquant un courant sur la base, le passage entre le collecteur et l’émetteur s’effectue.

c) Les AOP (Amplificateur Opérationnels)

d) Capteur de température

e) Capteur de luminosité (photorésistance, photodiode)

Les capteurs de luminosité sont des composants électroniques permettant de générer une grandeur physique (résistance, intensité) en fonction de son exposition à la lumière. Les deux grandes familles de capteur de luminosité sont :

  • Les photorésistances
  • Les photodiodes

La photorésistance est une résistance variable en fonction de son exposition à la lumière.

Si vous souhaitez découvrir comment utiliser dans un projet une photorésistance, je vous encourage à aller visiter ce tutoriel.

La photodiode est un semi-conducteur capable de générer une intensité en fonction de son exposition à la lumière. L’intensité générée par la photodiode est souvent de l’ordre du µA ou mA. Vous le savez très bien maintenant, la seule grandeur physique que l’arduino est capable de mesurer est une tension. C’est pourquoi il est nécessaire de convertir l’intensité générée par la photodiode en tension. Pour réaliser cette action on utilise généralement un montage à transimpédance (convertisseur courant-tension).

Montage à transimpédance avec photodiode

Montage à transimpédance avec photodiode

De plus, ce montage à transimpédance permet d’amplifier le signal afin qu’il puisse être interprété par l’arduino.

Remarque : L’AOP à besoin d’être alimenté en 5v (Vcc) et -5v (Vdd). La tension de -5v n’est pas naturelle. Il est néanmoins possible de l’obtenir en utilisant un composant « lmc7660 ».

4°) Des modules intéressants

Lors de la réalisation de vos projets, vous serez souvent confronté au choix technologique à utiliser pour transmettre des données. Par exemple lors de l’utilisation d’un pupitre, manette de commande pour contrôler votre mécanisme. Nous allons voir ensemble les avantages et inconvénients de chacune des technologies suivantes.

a) Modules Wifi

Grâce à la miniaturisation et à la diminution du coût des composants, la technologie wifi est devenue quelque chose de relativement simple à mettre en œuvre, notamment grâce aux modules ESP8266. Ce sont des modules qui coûtent entre 1$ et 3$ et qui sont pilotables via liaison série en transmettant simplement des commandes « AT », un standard en communication série. La porte du signal est de l’ordre d’une quinzaine de mètres mais dépend fortement de l’agencement des pièces.

L’utilisation de tels modules se révèle être un peu complexe au début mais devient rapidement simplissime face à la complexité de plus gros modules et plus coûteux comme le wifi shield officiel d’Arduino.

Vous pourrez retrouver un premier tutoriel sur les modules wifi ESP8266 sur notre site.

b) Module Bluetooth

L’avantage majeur du Bluetooth, c’est que presque tout le monde possède aujourd’hui un smartphone capable d’échanger des données en Bluetooth. L’un des inconvénients cependant, c’est la faible portée du signal Bluetooth (qui est cependant gage de sécurité dans certains cas).

Tout comme pour le wifi, il existe des modules low-cost et qui fonctionne par liaison série grâce à des commandes « AT ». L’un de ces modules serait alors le HC-05.

c) Module RF (radiofréquence)

Bien souvent, la radiofréquence se révèle être le moyen de communication le plus simple et rapide à mettre en œuvre. Un détail peut-être qui pourrait pourtant avoir un intérêt important, le signal radio est l’un des seuls capables d’évoluer dans un milieu aquatique. On trouve des kits émetteur/récepteur radiofréquence pour quelques euros sur internet et leur utilisation reste relativement simpliste comme en témoigne ce tutoriel disponible sur notre site.

 

L’Arduino n’a pas de limite, il répond à votre imagination.


Voilà ! Vous voici prêt pour concevoir et développer vos propres systèmes électroniques, domestiques ou autres. N’hésitez pas à laissez vos commentaires mais aussi à partager vos connaissances sur le forum.


Grégoire A., Thomas A., Fabien A.

Arduino et radiofréquence

Découvrez la radiofréquence avec Arduino

By | Débutant Arduino | No Comments

1- Introduction au concept de Radiofréquence

Lorsque, pour un projet quelconque, on a besoin de faire communiquer deux Arduinos sans utiliser un seul fil les liants l’un à l’autre, on se retrouve souvent confronté au choix plus ou moins difficile du type de communication à mettre en place. Alors, on pourrait penser au bluetooth, au wifi ou encore à la radiofréquence. Si les deux premières options semblent intéressantes à première vue, ces technologies nécessitent une certaine prise en main avant d’être en mesure d’en utiliser toutes les possibilités. Cependant, ce n’est pas le cas de la radiofréquence qui se détache alors rapidement de ses deux « concurrents ». En effet, la radiofréquence constitue sans doute l’un des moyens les plus simples et rapide de faire communiquer deux Arduinos ensemble. Au travers de ce tutoriel, je vous propose d’avancer pas à pas afin de comprendre en détail le fonctionnement puis l’utilisation de tels modules.

2- Fonctionnement des modules Radiofréquence

Tout d’abord, et avant d’aller plus loin dans ce tutoriel, il est nécessaire de faire un point sur le matériel que nous avons entre nos mains. Pour ma part, j’avais un kit émetteur/récepteur FS1000A comme celui-ci :

Photographie émetteur/récepteur RF

Photographie d’un kit émetteur / récepteur radiofréquence de type FS1000A

Qui trainait dans un tiroir, je baserai donc mon tutoriel sur ce kit. En plus de cela, j’ai simplement eu besoin d’un Arduino, de quelques fils et d’une résistance de 10kohms (qui n’est pas forcément utile, nous verrons plus tard)
Bien, si vous avez les même que moi, vous devriez alors avoir, au-dessus des pins, une sérigraphie qui indique GND, Vcc et Data. Détaillons d’abord ce que signifient ces indications. Pour le GND, c’est évident, cela signifie « Ground », « Masse » en anglais. Pour Vcc, c’est la valeur de niveau logique haut. Pour faire simple, puisque notre Arduino fonctionne en niveau logique 5v, on va connecter la broche Vcc du module au 5v et il saura donc que lorsqu’il reçoit 0v, cela correspond au niveau logique 0 et lorsqu’il reçoit 5v, cela correspond au niveau logique 1. Quant au Data, justement, c’est là que nous allons appliquer un niveau logique 1 ou 0 sur l’émetteur et que nous lirons un niveau logique 1 ou 0 sur le récepteur.
Pour la partie théorique seulement, le principe de fonctionnement d’un émetteur/récepteur radiofréquence est relativement simple à appréhender. En effet, lorsqu’on applique un niveau logique haut (je dirai 1 dans la suite du tutoriel) sur l’émetteur, le récepteur lira ce même niveau logique 1. Idem pour le niveau logique 0. Ainsi, on comprend la force des modules radiofréquence. Puisqu’ils transmettent directement les niveaux logiques auxquels ils sont soumis, on peut imaginer les utiliser pour faire de la transmission d’informations via la liaison Série et tout cela sans fil. Si cette notion vous semble encore floue, sachez qu’elle n’est de toute manière pas forcément très fiable. Vous découvrirez dans la suite du tutoriel qu’un signal émis par radiofréquence est perturbé pour un rien et même, que dans votre maison, vous devriez recevoir de nombreuses perturbations à la lecture des signaux, cela est notamment dû aux nombreuses ondes électromagnétiques qui nous entourent.
Pour résumer, on ne peut envoyer que des 1 ou des 0 via la radiofréquence. Lors d’un envoie, si on « donne » 1 sur le Data de l’émetteur, le Data du récepteur « Donnera » un 1, idem pour 0. Ce type d’échange permet d’envisager l’utilisation de protocoles plus complexes par radiofréquence mais ce n’est pas le sujet de ce tutoriel.

3- Premier script: Gestion du récepteur

Si vous avez, jusqu’ici, été en mesure de comprendre l’intégralité du tutoriel, alors vous devriez avoir compris que nous pouvons gérer l’émetteur « à la main », sans Arduino dans un premier temps. Ainsi, dans ce premier script concernant l’utilisation de la radiofréquence, je vous propose de nous concentrer sur l’utilisation du récepteur. Comme nous l’avons vu, ce dernier ne peut recevoir que des 0 ou des 1 et nous allons donc le câbler sur une entrée numérique, digitale donc, de notre Arduino.
Ainsi, je vous propose le câblage suivant:

ArduinoRécepteur

5v Vcc
GND GND
D2 Data

Schématiquement, cela donne le câblage suivant:

Câblage du récepteur RF sur l'Arduino

Capture d’écran du câblage entre le récepteur radiofréquence et l’Arduino effectué sur le logiciel Fritzing

Pour le script, je vous propose le code suivant que j’ai intégralement commenté:

void setup() {
  Serial.begin(9600);        // On initie la communication série sur le débit de 9600 bauds
  pinMode(2, INPUT);         // On déclare la broche D2 comme étant une entrée
}

void loop() {
  Serial.println(digitalRead(2));          // On affiche la valeur de la broche D2 dans le port série (et on saute une ligne à chaque affichage)
  delay(50);                               // On attend 50ms, cela diminue les erreurs de lecture
}

Ensuite, vous pourrez brancher votre émetteur de la manière suivante:

ArduinoEmetteur

5v Vcc
GND GND
————————— Data

Cette fois ci, schématiquement on a le câblage suivant:

Câblage de l'émetteur RF en contrôle manuel

Capture d’écran du câblage entre l’émetteur radiofréquence et son contrôle par bouton poussoir sur le logiciel Fritzing

Dans le tableau, vous remarquez que je n’ai rien spécifier pour la connexion de la broche Data de l’émetteur. C’est normal, je vous propose de brancher un fil « volant » sur le Data de l’émetteur et de simplement le relier manuellement au 5v lorsque vous souhaiterez simuler l’envoie d’un bit par radiofréquence.
Vous remarquerez que nous observons des « impulsions » sur le port série du récepteur. C’est-à-dire qu’il ne reçoit 1 que lorsque l’on connecte manuellement le Data de l’émetteur au 5v. Si on laisse connecté le Data au 5v, le récepteur ne recevra plus de données particulières et affichera donc 0. Vous comprenez alors à cet instant que nous allons travailler avec des signaux carrés. Si cette dénomination vous semble barbare, pas de panique ! Nous n’allons pas générer des signaux complexes. Un signal carré, c’est un simple passage de l’état 0 à l’état 1 puis de l’état 1 à l’état 0. En somme, c’est ce que vous venez de faire manuellement en connectant la broche Data de l’émetteur au 5v !

Vous noterez que sans aucune intervention de votre part, il est possible que vous visualisiez des valeurs de 1 sur le récepteur. C’est la manifestation des perturbations dont je vous parlais tout à l’heure.

4- Utilisation de l’émetteur et du récepteur par Arduino

Finalement, on arrive enfin à votre objectif depuis le début de ce tutoriel: Gérer l’émission et la réception d’un signal radiofréquence via Arduino. Si vous avez bien compris la partie précédente, vous devriez être en mesure d’écrire vous-même le code de cette partie.
Dans cette partie du tutoriel, nous vous proposons de réutiliser les câblages précédents ainsi que le script. Cependant, nous allons utiliser un second Arduino et y connecter notre émetteur sur D3 afin d’être en mesure de transmettre des données au récepteur. Nous procédons de la même manière que dans la partie précédente en commentant intégralement le script.

On a donc le câblage suivant:

Câblage de l'émetteur RF sur l'Arduino

Capture d’écran du câblage entre l’émetteur radiofréquence et l’Arduino sur le logiciel Fritzing

Avec le script suivant:

 

void setup()
{
	pinMode(3, OUTPUT); //On déclare la broche D3 de l'Arduino comme une sortie
}

void loop()
{
	digitalWrite(3, HIGH); //On passe la sortie D3 à l'état haut pour que l'émetteur transmette un "1" au recepteur 
	delay(250); //On attend un peu (250ms)
	digitalWrite(3, LOW); //On passe la sortie D3 à l'état bas pour que l'émetteur transmette un "0" au recepteur 
	delay(500); //On attend un peu (500ms)
}

Là, il n’y a pas grand-chose à rajouter. En mettant simultanément en route le montage émetteur et le montage récepteur, vous devriez observer des séries de 0 et de 1 plus ou moins régulières. N’oubliez pas les perturbations, elles sont omniprésentes autour de vous et peuvent perturber le signal reçu d’une manière plus ou moins prononcée. D’ailleurs, pour en éliminer une partie, on peut rajouter une résistance de 10kOhms entre le Data du récepteur et le GND de l’Arduino.

5- Conclusion

Dans ce tutoriel, nous avons eu l’occasion de voir ensemble que la communication par radiofréquence n’était pas si complexe qu’elle le semblait. Elle constitue une réelle alternative low-cost au bluetooth ou au wifi. Il faut cependant tenir compte de deux paramètres: La perturbation du signal et la sécurité de la transmission. Pour le premier paramètre, vous avez eu l’occasion de la découvrir par vous-même, les perturbations sont omniprésentes et l’une des solutions pour contrer cela constitue en la conception d’un réel protocole d’échange en radiofréquence avec des bits de début et de fin par exemple. Pour le second paramètre, celui de la sécurité, il n’est pas forcément évident d’y remédier. L’une des solution consisterait encore une fois en la création d’un protocole d’échange. Une autre solution pourrait être de modifier la plage de fréquence utilisée pour la transmission, certaines plages de fréquences sont moins sensibles aux perturbations. Attention cependant, la réglementation est assez stricte sur les plages autorisées et sur la puissance d’émission.
Un dernier point, dans ce tutoriel, nous avons proposé l’utilisation de modules radiofréquence via l’Arduino. Pourtant, et comme vous l’aurez sans doute imaginé, l’Arduino n’est absolument pas obligatoire. C’est justement pour cela que nous vous avons proposé de travailler manuellement sur le premier exemple de ce tutoriel. Si vous pouvez contrôler manuellement la transmission via un simple bouton poussoir, il n’y a aucun doute que vous pouvez faire de même avec un circuit intégré tel Attiny ou grâce à des portes logiques directement.

Le kit presse de cet article est disponible en cliquant sur ce lien

Retour sur la MakerFaireParis 2016

By | Non classé | No Comments

Ce week-end la MakerFaireParis à donné rendez-vous aux Makers pour « changer » le monde. Un record de visite a été franchi puisque ce sont 65 000 visiteurs qui ont fait le déplacement, comparé aux 35 000 visites l’année dernière.

Nous y étions afin de vous rencontrer mais aussi pour parler programmation, Arduino et Raspberry.

Stand SimpleDuino MFP16

Stand de Simple-Duino dans le hall Maker Faire de la Foire de Paris 2016 à Paris Expo

Comme vous le savez maintenant, nous venons de terminer le drone. Il est fonctionnel et nous permet de filmer grâce au stabilisateur de GoPro®. Une caméra FPV a été ajoutée afin d’avoir un retour en temps réel et de pouvoir faire des vols en immersion.

Maintenant, il ne nous reste plus qu’à rendre ce drone autonome. Nous avons d’abord pensé réaliser les actions suivantes :

  • Coder la carte de contrôle avec son système de stabilisation
  • Coder un système de positionnement GPS
  • Coder un système de gestion d’obstacle
  • Coder un système de triangulation permettant de déterminer si un sol est suffisamment plat pour se poser
  • Coder un système de gestion de batterie
  • Réaliser une interface web ou un logiciel afin de le commander à distance

Bien évidemment, nous gardons le système de commande actuel afin de pouvoir récupérer la main en cas de problème.

Nous souhaitons rendre open-source ce système afin qu’il puisse être ajouté sur vos propres réalisations.

Nous allons réaliser un tutoriel par capteur et module que nous allons utiliser puis nous expliquerons la mise en commun de tous ces modules afin de répondre au cahier des charges que nous nous sommes imposés.

Bien entendu, la MakerFaireParis a été l’occasion pour nous de vous rencontrer mais aussi de rencontrer des partenaires. Nous avons notamment rencontré les équipes de eMotion Tech, une entreprise Française et toulousaine qui développe et propose à la vente des imprimantes 3D à des prix raisonnables. Nous avons rencontré les responsables du TechShop de Paris, de la créathèque à Nogent sur Oise, des ingénieurs de TxRobotic ou encore des responsables de la communauté Oui Are Makers.

Certains d’entre vous sont venus nous faire part du plaisir qu’ils prenaient à nous lire régulièrement, ces compliments nous vont droit au cœur, nous continuerons ce que nous faisons, cela nous motive encore plus, encore merci !

Rédacteurs et rédactrices de presse papier, nous ne vous oublierons plus ! Vous nous avez fait part de votre déception de voir nos images d’articles être disponibles seulement en 72dpi, la résolution largement répandue sur le web alors que vos formats nécessitaient des images en 300dpi. Sachez que l’équipe Simple-Duino s’appliquera désormais à proposer des « kits presse » en format .zip à la fin de chaque tutoriel. Ces « kits presse » contiendront les images de l’article en 300dpi. Cette mesure n’est pas rétroactive mais vous pourrez cependant demander des images d’articles antérieurs à cette décision en 300dpi en contactant l’équipe via l’adresse [email protected].

La MakerFaireParis nous a permis de présenter nos travaux tant en impression 3D, en modélisme ou en domotique. De nombreuses personnes ont été très étonnées de découvrir la totale gratuité de nos cours, c’est pourtant bel et bien le cas et cela le restera. Certains se sont inquiétés de notre modèle de financement. Pas d’inquiétude ! Si nous sommes là et que nous continuons de l’être, c’est avant tout parce que nous sommes passionnés. SimpleDuino continuera de proposer ses articles en accès libre, gratuit et sans inscription, c’est notre priorité.

L’équipe Simple-Duino s’est déjà remise au travail en préparant les tutoriels que nous avons promis lors de la MakerFaire. Pas plus d’infos pour l’instant, vous découvrirez d’autres nouveautés petit à petit.

Vous avez été nombreux à nous rendre visite et nous tenons tous à vous en remercier.


L’équipe de SimpleDuino