Professional Documents
Culture Documents
INTRODUCTION
1. VOUS AVEZ DIT ARDUINO ? 2. HISTORIQUE DU PROJET ARDUINO 3. EXEMPLES D'USAGES 4. INSTALLATION 5. PRISE EN MAIN RAPIDE 6. PROPOS DE CE LIVRE
MATRIEL
La carte Arduino repose sur un circuit intgr (un mini ordinateur appel galement microcontrleur) associe des entres et sorties qui permettent l'utilisateur de brancher diffrents types d'lments externes : Ct entres, des capteurs qui collectent des informations sur leur environnement comme la variation de temprature via une sonde thermique, le mouvement via un dtecteur de prsence ou un acclromtre, le contact via un bouton-poussoir, etc. Ct sorties, des actionneurs qui agissent sur le monde physique telle une petite lampe qui produit de la lumire, un moteur qui actionne un bras articul, etc. Comme le logiciel Arduino, le circuit lectronique de cette plaquette est libre et ses plans sont disponibles sur internet. On peut donc les tudier et crer des drivs. Plusieurs constructeurs proposent ainsi diffrents modles de circuits lectroniques programmables et utilisables avec le logiciel Arduino 1. Il existe plusieurs varits de cartes Arduino. La figure ci-dessous montre par exemple, la dernire version de la carte Arduino : la Uno , sortie en 2010.
Cette carte lectronique peut tre autonome et fonctionner sans ordinateur ou servir d'interface avec celui-ci.
LOGICIEL
L'environnement de programmation Arduino (IDE en anglais) est une application crite en Java inspire du langage Processing 2 . L'IDE permet d'crire, de modifier un programme et de le convertir en une srie d'instructions comprhensibles pour la carte.
Lorsque l'Arduino est connect un ordinateur, il est capable de communiquer avec diverses applications, notamment :
Processing
Conu par des artistes, pour des artistes, Processing 3 est un environnement de cration frquemment utilis pour gnrer des uvres multimdias partir d'un code informatique sur ordinateur. L'attrait de ce logiciel rside dans sa simplicit d'utilisation et dans la diversit de ses applications : image, son, applications sur Internet et sur tlphones mobiles, conception d'objets lectroniques interactifs. Processing fdre une forte communaut d'utilisateurs professionnels et amateurs : artistes, graphistes, vidastes, typographes, architectes, web designers et designers en gnral. Il est galement utilis par des enseignants en arts qui souhaitent familiariser leurs tudiants avec les potentialits artistiques de la programmation, les concepteurs du logiciel l'ayant pens ds l'origine comme un outil d'apprentissage. Un exemple de code Processing est utilis dans le projet Oscilloscope (voir section Projets , chapitre Oscilloscope )
Pure Data
Pure Data 4 (souvent abrg Pd) est un logiciel de cration multimdia interactive couramment utilis dans les domaines artistique, scientifique et pdagogique. Sa popularit rside dans ses possibilits de programmation en temps rel. Plutt qu'un langage de programmation textuel, Pure Data propose un environnement de programmation graphique dans lequel l'utilisateur est invit manipuler des icnes reprsentant des fonctionnalits et les brancher ensemble. Un exemple de programme Pure Data est utilis dans le projet Texte brillant (voir section Projets , chapitre T exte brillant )
Supercollider
Supercollider 5 est un environnement et un langage de programmation pour la synthse audio en temps rel et la composition algorithmique. Il est disponible pour toutes les plates formes et distribu sous licence GPL. Sa particularit de permettre la modification de code la vole en fait un des principaux langages de live coding. SuperCollider est un logiciel gratuit. La version la plus rcente (3.4) est sortie en juillet 2010. S4A (Scratch For Arduino) Scratch For Arduino (S4A) est une modification de l'application Scratch qui permet de programmer simplement, facilement et intuitivement des instructions tlverser sur la carte Arduino. T out comme Arduino et Scratch, S4A est un logiciel libre donc tlchargeable gratuitement et volue avec les participations communautaires. S4A comme Scratch sont d'abord conus des fins pdagogiques et destins des enfants, adolescents, mais aussi des adultes dbutants. Ainsi, chacun peut approcher la programmation informatique pour mieux comprendre notre socit numrique . S4A peut encore tre utilis comme prototypage rapide d'un projet. 1. Seul le nom Arduino n'est pas utilisable librement, de telle sorte toujours pouvoir identifier le projet de ses drivs.^ 2. http://processing.org/^ 3. http://fr.flossmanuals.net/Processing ^ 4. http://fr.flossmanuals.net/Puredata^ 5. http://fr.wikipedia.org/wiki/SuperCollider^
3. EXEMPLES D'USAGES
Plate-forme logicielle et matrielle de cration d'objets numriques, Arduino permet de programmer des circuits lectroniques qui interagissent avec le milieu qui les entoure. Connects notamment des capteurs sonores, thermiques, de mouvement, ces circuits lectroniques peu coteux, dnomms micro-contrleurs, peuvent en retour gnrer des images, actionner un bras articul, envoyer des messages sur Internet, etc. Des dizaines de milliers d'artistes, de designers, d'ingnieurs, de chercheurs, d'enseignants et mme d'entreprises l'utilisent pour raliser des projets incroyables dans de multiples domaines : prototypage rapide de projets innovants utilisant l'lectronique, Arduino facilitant l'exprimentation en amont de la phase d'industrialisation ; production artisanale d'objets numriques et de machines-outils faible cot dans la perspective d'une culture d'appropriation technologique favorisant le bricolage et la dbrouille ; captation et analyse de donnes scientifiques (environnement, nergie, etc.) des fins ducatives, de recherche ou d'appropriation citoyenne ; spectacle vivant, grce aux nombreuses fonctions d'interaction offertes par Arduino, il est possible de crer des performances de VJing, utiliser le mouvement des danseurs pour gnrer en temps rel des effets sonores et visuels dans un spectacle ; installations d'arts numriques, Arduino permettant de raliser des uvres d'art interagissant de manire autonome avec le public ; Mode et design textile, plusieurs stylistes et designers investissant ce domaine cratif en exploitant les possibilits offertes par l'intgration de l'lectronique notamment dans des vtements (e-textile) ; projets pdagogiques destination d'tudiants, de professionnels ou du grand public selon les porteurs de ces initiatives : coles suprieures, centres de formation spcialise ou des Media Labs. La suite de ce chapitre va vous prsenter quelques exemples de travaux raliss avec l'aide d'Arduino dans diffrents contextes.
Frida V
Fix sur un vlo, Frida V prend la forme dun botier contenant un ensemble de capteurs qui analysent et compilent les informations rcoltes durant le parcours du cycliste : pollution atmosphrique (capteurs de gaz), wifi ouvert dans la ville (routeur wifi), position gographique (GPS), documentation audiovisuelle des parcours (camra et microphone). Lensemble est assembl dans une coque rsistante et portable adaptable sur tout type de vlos. Les donnes recueillies sont archives sur un serveur et reprsentes graphiquement sur une carte, la MeTaMap. Ces informations peuvent tre annotes par les participants en direct grce aux contrleurs de la Frida. La Frida est constitue notamment dun routeur Linux embarqu et d'un systme de micro-Arduinos. Les logiciels sont dvelopps en libre et adaptables sur de nombreuses autres plates-formes matrielles de type ordiphones. Production de 16 botiers prototypes raliss en 2009 par Luka Frelih, iga Kranjec, Jure Lozi, Rok Hlavaty, Miha T uri, Igor Krianovskij (Slovnie) dans le cadre d'une rsidence de cration la Galerie Ars longa (Paris, France) en partenariat avec Ljubljana Laboratory for Digital Media and Cultur (Ljubljana, Slovnie) l'occasion du festival Futur en Seine (France, 2009) : www.arslonga.fr/archives/262/
Fraiseuse numrique
Arduino peut agir comme un automate de commande pour piloter une machine commande numrique fabrique maison, qui cote bien moins cher qu'un modle achet, comme cette fraiseuse, inspire du modle canadien Oomloot , adapt aux mesures mtriques et ralise durant le bootcamp Make ta machine Nantes au printemps 2011. Cette machine peut raliser des gravures, des dcoupes et des usinages dans divers matriaux (bois, aluminium, circuits lectroniques, etc.). Photographies et plan de cette machine outil : http://www.booki.cc/bootcamp-make-ta-machine
Imprimante 3D Reprap
RepRap est une imprimante de bureau 3D libre capable de fabriquer des objets en plastique. Comme la plupart des pices de la RepRap sont faites de cette matire et que la RepRap peut les crer, cette machine est considre comme auto-rplicable . RepRap s'inscrit dans le mouvement du matriel libre et de la fabrication de machines-outils faible cot. L'absence de brevet et la mise disposition gratuite des plans offrent la possibilit quiconque de la construire avec du temps et un minimum de matriel. Cela signifie galement que si vous avez une RepRap, vous pouvez raliser beaucoup de choses utiles, voire crer une autre RepRap pour un ami. Projet en constante amlioration, la RepRap existe en plusieurs modles. L'lectronique de pilotage de la RepRap est base sur Arduino. Initi en 2005 par Adrian Bowyer (Royaume-Uni) : http://reprap.org
Adoptant une approche originale o les rayons du soleil remplacent la technologie laser et le sable divers produits chimiques utiliss par certaines imprimantes 3D, Solar Sinter est une machine nergie solaire permettant de fabriquer des objets en verre. Dans les dserts du monde, deux lments dominent : le soleil et le sable. Le premier offre une source d'nergie potentielle immense, le second un approvisionnement presque illimit en silice sous forme de sable. Le sable de silice, lorsqu'il est chauff son point de fusion puis refroidi, se solidifie en formant du verre opaque. L'Arduino sert suivre le soleil dans son dplacement et positionner les rayons concentrs par des lentilles optiques sur une surface de sable en fonction de la forme de l'objet dsir. Ralis en 2011 par Markus Kayser (Allemagne) : www.markuskayser.com/work/solarsinter/
Solnodes midi lors des rencontres multimdias LabtoLab (Nantes, 2011) Solnodes midi est une performance de percutions numriques qui joue sur la rsonance des matriaux : un Arduino quip d'un module midi actionne des petits lectro-aimants qui percutent les surfaces sur lesquelles ils sont installs au rythme d'une partition ralise sur un squenceur musical. Selon la nature du support o les lectro-aimants sont placs (arbres, sonnettes de vlos ou structures mtalliques d'un btiment tel un balcon), les sons produits sont transforms et amplifis. Ralis en 2011 par Antoine Bellanger (France) : http://gratuitmusic.com/solenoides.html
La Chorale roulettes
10
La Chorale roulette prsente la Galerie Pierre-Franois Ouellette art contemporain lors de l'exposition collective Encodeurs (Montral, 2007). La Chorale roulettes est une installation sonore utilisant Arduino qui met en scne des tlphones cadran, symboles de la communication moderne. Chaque appareil a conserv sa sonnerie originale. Additionnes et composes, celles-ci gnrent un rpertoire tendu o des timbres joyeux et entranants peuvent rpondre des sons dune infinie tristesse. La Chorale roulettes propose une gamme de timbres allant de la sonnerie mlodieuse au clic peine audible dun ronron mtallique assourdi. Ralis en 2007 par Darsha Hewitt et Alexandre Quessy (Canada-Qubec) : http://alexandre.quessy.net/? q=rotarianchoir
11
tre aux anges prsent l'occasion du festival panOramas (Bordeaux, 2010) Alliant lments rtro et composants lectroniques, cette uvre numrique se nourrit des rseaux sociaux d'Internet pour sanimer potiquement au passage des anges : des danseuses, prisonnires de bouteilles de verre, entament leur ballet accompagn d'une petite mlodie lorsque le flux de messages publics de T witter contient les mots ange, tre ange ou trange. Un angelino est plus prcisment compose d'une danseuse contenue dans une bouteille musicale de type Lucas Bols utilise comme un ready-made et connecte internet via un Arduino. Chaque angelino ragit un mot particulier. Lors du ballet, le spectateur ou l'internaute peut agir distance sur l'angelino de son choix en publiant un message sur twitter comportant l'un des mots choisis . Ralis en 2010 par Albertine Meunier (France) : www.albertinemeunier.net/etre-aux-anges/ Bountou Kheweul
12
Bountou Kheweul au 8e Forum des arts numriques de Martinique (Fort de France, 2011) Bountou Kheweul, qui signifie Porte de toutes les grces en wolof, est le rsultat d'une rsidence d'artiste de Armin Kane en Martinique dans le cadre d'un projet d'essaimage de pratiques artistiques numriques en Afrique de l'Ouest et dans les Carabes (projet Rose des vents numriques). Mixant illustrations au fusain et technologies interactives, Bountou Kheweul interroge les racines des cultures martiniquaises et sngalaises en reprant des similitudes observes et mises en scne sous forme de squences vidos et sonores. Ralis en 2011 par Armin Kane (Sngal) avec l'appui technologique de Roland Kossigan Assilevi (T ogo) : http://ker-thiossane.org/spip.php? article7 4
Ecologia
uvre minimaliste, Ecologia illustre graphiquement l'tat de la dforestation dans 12 pays du monde de 1990 2007 . A chaque anne correspond une suite de lignes traces sur les sillons de la coupe d'un arbre, leur frquence et leur longueur variant en fonction de l'intensit et de la surface en km2 du processus de dforestation.
13
Le trac des lignes a t obtenu en utilisant les capacits de calcul de l'ordinateur connect via Arduino une machine de pyrogravure spcialement conue pour graver des objets de forme circulaire. Ralis en 2010 par Lucien Langton (Suisse).
Back
Back au festival Afropixel (Dakar, 2010) Ralis dans le cadre d'un projet d'essaimage de pratiques artistiques numriques en Afrique de l'Ouest et dans les Carabes (projet Rose des vents numriques), Back est une installation numrique sur le thme de la reconstruction et de la capacit de rsilience de l'art. C'est l'interaction du public qui la fois brise une poterie et la reconstruit en remontant dans le temps. Back repose sur l'utilisation d'Arduino connect des capteurs de prsence et de pression, un ordinateur ainsi qu'un cran : le spectateur en s'approchant de l'installation enclenche une squence vido o l'on voit une poterie traditionnelle africaine en suspension chuter et se briser. En soufflant sur une feuille place dans un vase, le sens de droulement de la vido s'inverse et la poterie brise se reconstruit. Ralis en 2010 par Charles Seck (Sngal), Samba T ounkara (Sngal), Said Afifi (Maroc) et Roland Kossigan Assilevi (T ogo) pour la partie technologique : www.ker-thiossane.org/spip.php? article26
Zahra-Zoujaj (Fleur-Verre)
14
Zahra-Zoujaj expose au Al-Riwaq Art Space Doha (Qatar) Aprs avoir t invit pntrer dans la Hojra, une structure de forme octogonale se rtrcissant vers le haut l'instar des pyramides, le spectateur dcouvre un ensemble de 7 7 fleurs en verre souffl suspendues au plafond, tte en bas . Chaque fleur est unique et symbolise l'une des 7 7 rgles de convivialit tires du Coran. Leurs curs sont forms d'une boule rouge identique lintrieur desquels palpite une douce lumire rouge dont lintensit baisse et augmente en des rythmes diffrents. Exprience contemplative, ce nest quaprs quelques minutes dattention que la quinzaine de spectateurs que peut contenir la Hojra, parvient distinguer les vritables nuances colores de chacune des fleurs disposes en coupole autour de 7 cercles concentriques. Utilisant notamment Arduino, cette uvre monumentale gnrative a t ralise en 2010-2011 par l'artiste Youns Rahmoun (Maroc) avec l'appui technique du Centre International dArt Verrier de Meisenthal et de Maurin Donneaud (France) pour la partie lectronique : Prsentation de l'installation interactive sur le site internet de Youns Rahmoun : www.younesrahmoun.com/FR/T ravaux/T ravaux.html Code source et plan lectronique de l'installation : http://maurin.donneaud.free.fr/? Zahra-zoujaj
Diffractions transmutatoires
15
L'installation Diffractions Transmutatoires expose la Galerie L'Espace d'en Bas dans le cadre du Festival Mal au pixel (Paris, juin 2011) / Crdits photographiques : Galerie Espace d'en Bas la frontire de la science et de la para-science, Diffractions T ransmutatoires, rvle dans un de ses modules, la vie secrte d'une plante et ses interactions subtiles avec le monde environnant. Cette installation, fruit des travaux mens depuis 2006 par les artistes Horia Cosmin Samola et Marie-Christine Driesen, requestionne la notion de perception primaire dveloppe par Cleve Baxter dans les annes 1960. Arduino a servi prototyper ce module-vgtal, en interfaant le dispositif plus ancien qui repose sur un dtecteur de mensonges. La version finalise de cette installation utilise prsent des circuits lectroniques spcifiques et davantage performants pour analyser les signaux biologiques provenant de la plante. Ralis en 2010 par Horia Cosmin Samola (Roumanie) et Marie-Christine Driesen (France) : www.ghostlab.org/Diffractions-T ransmutatoires-2 (vido de l'installation expose l'Abbaye de Noirlac, Noirlac, 2011). BeamBall
16
Au croisement de l'installation et du jeu vido, cette cration numrique simule le fonctionnement d'un flipper gant l'aide d'une balle lumineuse pilote par le spectateur. L'animation visuelle de la balle et des champignons du flipper est projete sur les structures en relief de l'espace de jeu. Arduino sert d'interface entre les gros boutons poussoirs de la console utilise par le public et la partie informatique de l'installation. Ralis par Sigmasix en partenariat avec Lumens 8 : vido de l'installation : http://vimeo.com/30084908 Site de Sigmasix : www.sigma.ch
mots cousus
Carte interactive sur tissu de mots cousus prsente l'exposition Renum (Nantes, 2011) mots cousus est le rsultat d'une rsidence d'artiste dans lequel des femmes retraites ont t invites tmoigner de la relation aux lieux dans lesquels elles ont travaill ainsi qu' participer la cration d'une uvre collective numrique. Quelles ont t leurs activits avant de se retrouver la retraite ? Comment imaginent-elles le travail dans une ville utopique ? Quels sont les obstacles pour y arriver ? partir dinterviews, les artistes et les participantes ont ralis ensemble deux cartographies sonores urbaines, lune physique, sur une matire textile, lautre virtuelle, en ligne. La carte sur tissu possde des points ractifs, cousus des fils conducteurs relis des cbles lectroniques et une carte Arduino. Le spectateur entend le tmoignage associ un lieu de son choix en piquant simplement l'aide d'une aiguille coudre la surface de la carte. Cration de Nicolas Malev, Wendy Van Wynsberghe, Peter Westenberg et An Mertens du collectif Constant (Belgique) avec la participation de femmes de la ville de Nantes (France) : www.constantvzw.org/site/ReNUM,1295.html et www.amotscousus.constantvzw.org
17
Arduino suscite l'intrt de nombreux chercheurs et professionnels de la mode et du design textile en offrant la possibilit d'insrer des circuits lectroniques miniaturiss dans les vtements.
Crdit photographique : Dominique Lafond Ying Gao est designer de mode et professeure l'Universit du Qubec Montral. travers sa recherche, elle remet en question la notion de vtement tel qu'on le connat en alliant le design urbain, l'architecture et le multimdia. En incorporant des lments technologiques ses crations, elle explore la construction du vtement et le dploiement de sa forme. L'Arduino est ici utilis pour modifier la structure des vtements en contrlant moteurs, valves pneumatiques et lments lumineux qui se trouvent cachs sous la surface du tissu, mais aussi pour analyser l'environnement immdiat qui les entoure. Ralis en 2006 et 2008 par Ying Gao (Canada-Qubec) en collaboration avec Simon Laroche (Canada-Qubec) pour le design interactif : www.yinggao.ca Climate Dress
18
Climate Dress au Salon Tech Textile (Francfort, 2011) Climate Dress est une robe faite de broderie conductrice, de plus d'une centaine de minuscules diodes lumineuses, d'un dtecteur de gaz carbonique (CO2) et de cartes Arduino Lylipad trs fines conues pour s'intgrer facilement dans un tissu. Cette robe climatique s'illumine de diffrents motifs et change de rythme de pulsation selon le niveau de concentration de C02 dans l'air, permettant ainsi la personne qui la porte comme son entourage d'tre davantage conscients des problmes environnementaux. Ralis en 2011 par Hanne Louise Johannesen et Michel Guglielmi (Danemark) avec le soutien de l'Alexandra Institute : www.diffus.dk/pollutiondress/intro.htm
Textile XY
19
Textile XY lors de l'exposition Futurotextiles 2006 Lille (France, 2006) la rencontre du tissage et de l'lectronique, le textile XY est un textile capteur qui permet de localiser la position d'un contact sa surface. N de la volont de repenser l'ergonomie des interfaces numriques, cette recherche initie en 2005 a donn naissance plusieurs dveloppements de textiles tactiles. Les premiers prototypes ont t raliss en utilisant Arduino et ont permis d'imaginer des usages dans de nombreux domaines tel que la mode, les jeux pour enfants, etc. Dvelopp depuis 2005 par Maurin Donneaud et Vincent Roudaut (France) : http://xyinteraction.free.fr/wiki/pmwiki.php/FR/T extileXY/
20
Ralis dans le cadre d'un projet d'essaimage de pratiques artistiques numriques en Afrique de l'Ouest et dans les Carabes (projet Rose des vents numriques) , la Valise pdagogique cration interactive est un ensemble matriel, logiciel et documentaire pour l'apprentissage des technologies d'Interaction T emps Rel dans la cration contemporaine, tous champs artistiques confondus (arts plastiques, danse, thtre, musique, architecture, design, etc). quipe de deux cartes Arduino, la valise peut servir aussi bien de plate-forme d'apprentissage dans le cadre d'un atelier de dcouverte de l'interaction en art que d'outil de cration pour artiste en permettant d'inventer, de simuler puis de raliser des milliers de dispositifs interactifs diffrents. Ralis en 2010-2011 par Jean-Nol Montagn (artiste plasticien), Jrme Abel (artiste dveloppeur) et les lectroniciens africains de ENDA Ecopole en partenariat avec Kr T hiossane (Sngal) et le CRAS (France) : www.ker-thiossane.org/spip.php? article6
Illustration des priphriques et dispositifs contenus dans la Mallette Interactive Artistique Multimdia Destine tre tant un outil pdagogique quun instrument/systme vocation artistique, la Mallette Interactive Artistique Multimdia (MIAM) est constitue dun ordinateur quip des priphriques les plus couramment utiliss dans les dispositifs et instruments interactifs (capteurs divers, webcam, joystick, wiimote, carte Arduino, etc.). Elle offre aux enseignants et formateurs de nombreuses ressources numriques et multimdias "prtes l'emploi" et destines un large public pour un dcryptage et une approche de lhistoire de lart numrique et interactif de faon didactique et illustre. Le projet de la Mallette Interactive Artistique Multimdia a reu le soutien financier du Ministre de la Culture et de la Communication (France). Ralis en 2010-2011 par les associations Labomedia et Ping (France) en collaboration avec la Fabrique du Libre : http://lamiam.fr
21
Gros plan sur une des fleurs interactives ralises par des jeunes de la Commune de Grand Yoff Dakar (Sngal, 2011). Avec lobjectif de rflchir sur la qualit environnementale des villes dans lesquelles ils vivent, une trentaine de jeunes sngalais ont particip Dakar cet atelier de cration numrique anim par l'artiste espagnol Victor Via (www.dosislas.org). Du 19 au 30 septembre 2011, ces jeunes de 12 18 ans ont t invits construire sous une forme ludique et crative des capteurs lectroniques pour mesurer des lments de l'environnement tels que le rayonnement solaire, la temprature, la pollution, l'humidit ou le niveau sonore de la ville. Utilisant notamment Arduino pour la partie lectronique, ces artefacts sensibles au milieu qui les entoure ont t fabriqus partir d'objets obsoltes et de matriaux de rcupration comme des jouets inutiliss, du carton, du ruban adhsif, du papier journal, des bouteilles en plastique et dautres matires recyclables. Le dernier jour de l'atelier, les enfants ont analys la qualit de leur environnement en interaction avec les passants et en ralisant un jardin phmre constitu de plantes lectroniques installes dans un espace public du quartier o ils vivent. Cet atelier suivi d'une exposition ont t organiss par la structure sngalaise T rias culture avec lappui de Music et culture Vs Prod, la mairie de Grand-Yoff, les ASC (Dool, Grand-Yoff, Gangui, Rakadiou et Yaakar) , ENDA Jeunesse et Action, Jaboot, le Centre T alibou Dabo en partenariat avec l'Ambassade d'Espagne au Sngal et de Cultura Dakar (Espagne) : www.triasculture.net/AtelierVictorVina/index.html Les images des ralisations prsentes dans ce chapitre sont la proprit de leurs auteurs respectifs.
22
4. INSTALLATION
L'installation de l'interface de programmation Arduino est relativement simple et possible sur les plates-formes Windows, Mac OS X et Linux. L'environnement de programmation Arduino est crit en Java et l'interface est inspire de Processing, un compilateur avr-gcc (pour le processeur du micro-contrleur) ainsi que d'autres logiciels libres. Puisque Arduino s'appuie sur Java, il est ncessaire que la machine virtuelle Java soit installe sur votre systme d'exploitation (ou mise jour). Elle l'est normalement sur Mac OS X mais il est possible que sous Windows ou Linux, il soit demand de l'installer au cours du processus d'installation d'Arduino. Une documentation en ligne existe pour vous aider dans l'installation du logiciel Arduino l'adresse suivante : http://arduino.cc/fr/Main/DebuterInstallation Cette aide supplmentaire peut vous tre utile pour adapter la mthode d'installation selon votre systme d'exploitation et le type de micro-contrleur Arduino que vous possdez. La suite de ce chapitre reprend les tapes principales et gnrales pour l'installation de cette application. Pour tlcharger le fichier d'installation, il vous suffit de vous rendre sur la page : http://arduino.cc/en/Main/Software Pour slectionner une version, cliquez sur le nom qui correspond votre systme d'exploitation et sauvegardez sur votre ordinateur le fichier correspondant. Il est noter que dans le cadre de ce manuel, la version anglaise sera utilise puisqu'elle contient habituellement des mises jour plus rcentes que la version franaise. Pour la suite de ce chapitre, dans les noms de fichiers et dossiers, l'appendice xxxx annex Arduino fait rfrence la version de l'application Arduino utilise.
SOUS WINDOWS
Il vous faut d'abord tlcharger le fichier arduino-xxxx.zip. Une fois le tlchargement termin, vous dcompressez l'archive et dplacez la de prfrence dans le dossier C:\Program Files\ . En utilisant un cble USB, branchez votre carte Arduino votre ordinateur. Lorsque vous connectez une carte d'interfaage Arduino pour la premire fois, Windows devrait dmarrer le processus d'installation du pilote (driver). Quand il est demand si Windows doit se connecter Windows Update pour rechercher le logiciel, choisir NON, pas maintenant puis Suivant . Slectionnez l'installation depuis une liste ou un emplacement spcifique et cliquez sur Suivant . Assurez-vous que Rechercher le meilleur pilote dans ces emplacements est coch ; dcochez Rechercher dans les mdias amovibles ; cochez Inclure cet emplacement dans la recherche et ouvrir le sous-rpertoire /drivers/FT DI_USB dans le rpertoire arduino-xxxx tlcharg prcdemment (au besoin, la dernire version des pilotes peut-tre trouve sur le site FT DI). Cliquez sur Suivant . L'assistant va ensuite rechercher le pilote et vous dire que le USB Serial Converter a t trouv. Cliquez sur T erminer . L'assistant de Nouveau Matriel devrait apparatre nouveau : rptez la procdure nouveau. cette tape de l'installation, l'assistant devrait indiquer USB Serial Port a t trouv . Cliquez sur T erminer .
23
Rendez-vous ensuite dans le dossier C:\Program Files\arduino-xxxx et excutez le fichier arduino.exe pour lancer l'application.
SOUS MAC OS X
Il vous faut d'abord tlcharger le fichier arduino-xxxx.dmg. Une fois le tlchargement termin, l'image disque devrait se monter automatiquement. Si ce n'est pas le cas, double-cliquez dessus. Placez l'application Arduino de prfrence dans le dossier Applications de votre ordinateur. Dans le cas o votre carte Arduino n'est pas de type Uno ou Mega 2560 (donc pour tous les modles plus anciens), il faudra galement installer les pilotes FT DI (au besoin, la dernire version des pilotes peut-tre trouve sur le site FT DI 1 ). Pour ce faire, il faut simplement cliquer sur l'icne FTDIUSBSerialDriver_xxxxxxx.mpkg. Suite cette installation, redmarrez votre ordinateur. Branchez la carte Arduino votre ordinateur avec le cble USB. Dans le cas o votre carte Arduino est de type Uno ou Mega 2560, une fentre apparat indiquant qu'une nouvelle interface rseau a t dtecte. Slectionnez Prfrences rseau et l'ouverture cliquez sur Appliquer . Mme si les cartes Uno ou Mega 2560 sont dcrites comme Non configur , l'installation devrait aboutir. Quittez les Prfrences systme . Vous pouvez maintenant lancer l'application Arduino partir de votre dossier Applications ou encore de votre dock si vous y avez install un alias (icne de raccourci) de l'application Arduino.
SOUS GNU/LINUX
La procdure d'installation sous GNU/Linux dpend de la distribution utilise et l'excution du programme dpend galement de l'installation d'autres pilotes ou logiciels. Pour les utilisateurs de Linux, il est conseill de visiter la page suivante (en anglais) pour connatre la marche suivre : http://www.arduino.cc/playground/Learning/Linux 1. http://www.ftdichip.com/FT Drivers.htm^
24
25
1. 2. 3. 4. 5.
un menu ; une barre d'actions ; un ou plusieurs onglets correspondant aux sketchs ; une fentre de programmation ; une console qui affiche les informations et erreurs de compilation et de tlversement du programme.
LMENTS DU MENU
Les diffrents lments du menu vous permettent de crer de nouveaux sketchs, de les sauvegarder, de grer les prfrences du logiciel et les paramtres de communication avec votre carte Arduino.
Dossier de travail
Dans les prfrences (File > Preferences), il vous est possible de spcifier votre dossier de travail. Il s'agit du dossier o seront sauvegards par dfaut vos programmes et les bibliothques qui pourront y tre associes. Lorsqu'un programme est sauvegard, un dossier portant le nom du programme est cr. Celui-ci contient le fichier du programme portant le nom que vous lui aurez donn suivi de l'extension .pde ainsi qu'un dossier intitul applet qui contient les diffrents lments crs et ncessaires lors du processus de compilation du programme et de tlversement vers la carte.
Exemples
Une srie d'exemples est disponible sous File > Examples. Ces exemples peuvent vous aider dcouvrir et comprendre les diffrentes applications et fonctions d'Arduino.
BARRE D'ACTIONS
Bouton Verify (Vrifier) : il permet de compiler votre programme et de vrifier si des erreurs s'y trouvent. Cette procdure prend un certain temps d'excution et lorsque est termine, elle affiche un message de type Binary sketch size : ... indiquant la taille du sketch tlvers. Bouton Stop : arrte le moniteur sriel (certaines plates-formes seulement).
Bouton New (Nouveau) : ce bouton permet de crer un nouveau sketch. Bouton Open (Ouvrir) : il fait apparatre un menu qui permet d'ouvrir un sketch qui figure dans votre dossier de travail ou des exemples de sketchs intgrs au logiciel.
26
Bouton Save (Sauvegarder) : il permet de sauvegarder votre sketch. Bouton Upload (T lverser) : ce bouton permet de compiler et tlverser votre sketch sur la carte Arduino. Bouton Serial Monitor (Moniteur sriel) : ce bouton fait apparatre le moniteur sriel (voir ci-bas). Bouton Onglet : il permet de basculer entre les sketchs.
MONITEUR SRIEL
Le moniteur sriel est utilis pour afficher l'information qui est envoye par la carte Arduino vers l'application (habituellement par le cble USB). Il permet aussi d'envoyer de l'information la carte Arduino. Pour ce faire, il suffit d'crire du texte dans le champ situ en haut de la fentre et d'appuyer sur le bouton Send . Bien videmment, avant de pouvoir faire ceci il vous faut coder un programme appropri, prt recevoir cette information. Il est galement possible de rgler le baudrate du moniteur sriel, qui prcise quelle vitesse le transfert des donnes s'effectuera. Il est galement possible d'tablir une communication srielle entre la carte Arduino et d'autres priphriques ou logiciels. Nous verrons plus en dtails cette fonction dans les projets T exte brillant et Oscilloscope .
27
6. PROPOS DE CE LIVRE
Les valeurs du libre ont inspir la rdaction et la diffusion de ce manuel d'initiation Arduino, l'objectif tant la fois : d'offrir un public professionnel ou amateur francophone les bases d'utilisation d'Arduino ; de valoriser la communaut des dveloppeurs et experts francophones de Arduino impliqus dans la rdaction et la mise jour de ce manuel en franais ; de fdrer plus largement la communaut francophone d'Arduino autour d'un projet commun de documentation (tant au niveau des co-auteurs que des commentateurs), sachant que l'ouvrage dans sa forme accessible en ligne (wiki) peut tre amlior et comporter de nouveaux chapitres, notamment l'occasion de la parution d'une nouvelle version d'Arduino.
UN OUVRAGE COLLECTIF
Ce livre sous licence libre est une production originale en franais ; plusieurs co-auteurs francophones de diffrents pays ont particip sa rdaction. Le cur de l'ouvrage de plus de 120 pages a t ralis en 5 jours dans le cadre d'un BookSprint qui s'est tenu Dakar (Sngal) du 19 au 23 octobre 2011, grce l'initiative et avec le soutien de l'Organisation internationale de la Francophonie (www.francophonie.org) en partenariat avec Ker T hiossane (www.ker-thiossane.org), le Collectif Yeta (www.collectifyeta.org), Main d'oeuvres (www.mainsdoeuvres.org) et Ping (www.pingbase.net).
28
Kossigan Roland ASSILEVI (T ogo) : Formateur numrique (Arduino, PureData...) et personne ressource sur des projets artistiques utilisant les technologies. Il fait partie de l'quipe de Kr T hiossane, Villa pour l'art et le multimdia Dakar. Mamadou COULIBALY (Mali) : Formateur numrique (Arduino, PureData...) et personne ressource sur des projets artistiques utilisant les technologies. Il fait partie de l'quipe du Collectif Yeta qui anime notamment un Media Lab Bamako. Maurin DONNEAUD (France) : Designer dinteraction, programmeur dobjets physiques notamment avec Arduino, intervenant au Centre de Ressources Art Sensitif (Cras) et dans des coles de design textile (ENSCI Paris, ENSAAMA Paris, CSM London) sur des projets e-textiles. Cdric DOUT RIAUX (France) : Artiste multimdia et formateur (Arduino, etc.). Il travaille actuellement avec lassociation Nantaise PING, association ressource et ppinire de projets innovants, au dveloppement de machines-outils commandes numriques pour louverture dun FabLab. Il a galement particip en tant qu'intervenant au projet Rose des vents numriques, initiative d'essaimage de pratiques artistiques utilisant le numrique en collaboration avec Kr T hiossane et le Collectif Yeta. Simon LAROCHE (Canada-Qubec) : Artiste, enseignant et designer interactif, spcialis dans les installations audiovisuelles et la robotique. Il travaille galement comme concepteur vido et robotique en arts vivants, cinma et mode. Simon Laroche est membre fondateur du Projet EVA. Florian PIT T ET (Suisse) : Designer interactif au sein de la socit SIGMASIX cre en collaboration avec Eric Morzier, et enseignant en nouveaux mdias la Haute cole d'arts appliqus de Lausanne (Ecal). Marie-Paul UWASE (Rwanda) : Secrtaire du Rseau Africain des utilisateurs des logiciels libres (RAL), Prsidente de l'association rwandaise de promotion des logiciels libres au Rwanda et enseignante universitaire. Facilitatrice : Elisa DE CAST RO GUERRA : Prsidente de Flossmanuals francophones, facilitatrice de BookSprints et graphiste utilisant les logiciels libres. Co-rdacteurs en ligne et contributions externes : Mamadou DIAGNE (dit Genova) Guillaume FOUET Pascale GUST IN Corinne LAURENT Christian AMBAUD
UN OUVRAGE VIVANT
Ce manuel est vivant : il volue au fur et mesure des contributions. Pour consulter la dernire version actualise, nous vous invitons visiter rgulirement le volet francophone de Flossmanuals sur le site http://fr.flossmanuals.net et plus particulirement sur la page d'accueil du manuel Arduino. N'hsitez pas votre tour amliorer ce manuel en nous faisant part de vos commentaires dans la liste de diffusion francophone de Flossmanuals, ou, si vous avez des talents de rdacteur et une bonne connaissance d'Arduino, vous inscrire en tant que contributeur pour proposer la cration de nouveaux chapitres. Vous trouverez en fin d'ouvrage la liste complte des personnes ayant particip jusqu' ce jour la co-rdaction du manuel.
29
30
LECTRONIQUE
7. LES BASES DE L'LECTRONIQUE 8. CAPTEURS ET ACTIONNEURS 9. MICRO-CONTRLEUR 10. PRCAUTIONS D'UTILISATION
31
Pour bien comprendre les lments de mesure de base de l'lectricit, il est pratique d'utiliser l'analogie d'un systme hydraulique. Imaginez un systme hydraulique compos de deux rservoirs d'eau connects ensemble via un rseau de tubes.
32
Le courant (Ampres)
Dans notre systme, la pression gnre par le dnivel provoque un certain dbit d'eau dans le rseau de tuyaux. Le dbit correspond au courant. En lectronique, le courant est exprim en Ampres (A ou not I ou i).
La rsistance (Ohms)
Lorsque le tube se rtrcit dans notre exemple (4), une moins grande quantit d'eau peut circuler la fois. Ce rtrcissement cre ce qu'on appelle une rsistance. La pression du systme (ou la force avec laquelle l'eau circule) n'est pas change ; c'est plutt le dbit qui change. En lectronique, la rsistance est exprime en Ohms ( ou not R). L'quation gnrale qui lie ces trois units de mesure est : U = RI Soit le voltage (U) est gal la rsistance (R) multiplie par le courant (I).
AC/DC
Ces deux abrviations ne reprsentent pas seulement un groupe de rock. Un courant lectrique DC, parfois not CC, signifie Direct Current en anglais soit Courant Continu .C'est un courant qui ne varie pas dans le temps. Il peut tre gnr par une pile, une batterie ou un circuit d'alimentation qui redresse un courant alternatif.Le courant DC est le type de courant habituellement utilis en lectronique. Par exemple, votre carte Arduino est alimente par ce courant.
33
Le courant AC signifie Alternating Current ou Courant Alternatif . Il s'agit d'un courant qui change de direction continuellement. Il peut tre priodique, c'est--dire que sa frquence est constante. La forme la plus utilise est le courant sinusodal. Il est caractris par sa frquence note f et exprime en Hertz, qui correspond au nombre d'aller-retour par seconde. Dans certains calculs, il peut arriver que l'on ait besoin de sa pulsation souvent note omga minuscule (w) = 2 x PI x f. Le courant lectrique utilis la maison est AC.
Multiples
En lectronique, les valeurs sont parfois trs petites ou trs grandes. Pour simplifier leur notation, on rencontre souvent des prfixes qui expriment des multiples des valeurs. Multiple 10e6 / 1 000 000 10e3 / 1 000 10e-1 / 0.1 10e-2 / 0.01 10e-3 / 0.001 10e-6 / 0.00000 10e-9 / 0.000000001 Prfixe mgakilodcicentimillimicronanoNotation M k d c m n Nom million millier dixime centime millime millionime milliardime
Par exemple, une valeur de 0.001 Ampres pourrait tre crite de plusieurs manires : 1 mA = 1 milliampre = 1.10-3 A = 0.001 A
LES COMPOSANTS
Les composants sont des lments de base en lectronique qui, une fois assembls, constitueront un circuit lectronique. Chacun de ces lments a un comportement bien particulier, dpendant de ses caractristiques et de ses conditions d'utilisation. Pour le choix et le dimensionnement des composants les plus complexes, il est utile de consulter leur fiche technique ( datasheet en anglais). Voici une description de quelques-uns de ceux-ci.
Rsistance
Les rsistances sont utilises dans de nombreux cas, pour rduire une tension (voir plus loin le pont diviseur de tension), pour provoquer un courant, ou associes d'autres composants pour des circuits plus complexes (exemple : filtre RC). Sa valeur est note R et exprime en Ohms. En srie, les rsistances s'additionnent : Req = R1 + R2 + R3 En parallle, c'est diffrent : 1 / Req = ( 1 / R1 ) + ( 1 / R2 ) + ( 1/R3 ) La formule associe la rsistance est : U = RI En lectronique, la valeur d'une rsistance est code par des anneaux de couleurs :
34
Dans l'exemple ci-haut, la rsistance est de 220 kOhms, ou 220 000 Ohms. Le premier anneau est rouge. Dans le tableau ci-bas, le chiffre qui correspond la couleur rouge est 2. Le second anneau est galement rouge, donc notre chiffre est galement 2. Le chiffre que l'on obtient en combinant la suite les deux anneaux est donc 22. Finalement, le multiplicateur est jaune, correspondant 100 000. Donc, 22 x 100 000 nous donne 220 000, ou 220 k.
Condensateur
Le condensateur ( capacitor en anglais) est constitu de plaques de conducteurs, lments qui permettent l'change d'lectricit, spares par un isolant. Un condensateur est capable d'emmagasiner une tension lectrique, un peu la manire d'un rservoir. Sa valeur caractristique est la capacit, note C et exprime en Farad (F). Il est souvent utilis pour filtrer, c'est--dire lisser une tension (car il agit un peu comme un amortisseur) et il ne conduit l'lectricit que si le courant change, par exemple lors de la mise sous tension ou l'extinction du circuit. Les rgles d'association sont l'inverse de celles des rsistances : En parallle, les condensateurs s'additionnent : Ceq = C1 + C2 + C3 T andis qu'en srie : 1 / Ceq = ( 1 / C1 ) + ( 1 / C2 ) + ( 1 / C3 ) La formule associe au condensateur est : i = C ( dU / dt ) Remarque : plus la tension change, plus le courant ses pattes sera fort. Il faut parfois se mfier de ces pics de courant l'allumage et l'extinction du circuit.
Bobine ( Coil )
La bobine est un enroulement de fil conducteur. La bobine est souvent utilise pour filtrer un courant, gnrer un champ magntique (lectroaimant) ou amplifier un signal (radio). Sa valeur caractristique est l'inductance note L et exprime en Henry (H). La formule associe la bobine est : U = L ( di / dt ) Remarque : plus la tension change, plus le courant ses bornes sera fort. Pour cette raison, il faut prendre quelques prcautions lorsqu'on commute une bobine dans un montage : utiliser par exemple une diode de roue libre (voir Diode ) qui vacuera la surtension l'allumage et l'extinction.
Transistor
35
Le transistor est une association de trois couches de semi-conducteur et dont la couche du milieu sert contrler le passage du courant dans les deux autres. Il s'agit d'un composant actif qui est souvent utilis comme interrupteur ou amplificateur, la manire d'un relais. Il existe diffrents types de transistor au comportement diffrent, les NPN et PNP, les transistors effet de champ, ou MOSFET . Pour plus de dtails, consultez http://fr.wikipedia.org/wiki/T ransistor
Diode
La diode est compose de deux couches de semi-conducteur et ne laisse passer le courant que dans un sens : de l'anode vers la cathode ; du (+) vers le (-). Elle peut servir bloquer des retours de courants non dsirs ou construire un pont redresseur pour passer d'un courant alternatif un courant continu. Le trait prsent sur le composant indique la cathode c'est-dire la borne ngative (-).
On utilise galement la diode pour liminer la surtension qui apparat dans une bobine lors de l'allumage et de l'extinction. Il suffit de placer la diode en parallle avec l'inductance (la bobine).C'est ce qu'on appelle une diode de roue libre . (voir projet La cigarette ne tue pas les machines ).
LED ou DEL
La LED est une diode lectroluminescente : elle s'allume lorsqu'un courant passe dedans. Sa cathode (-) est plus courte que son anode (+). C'est un composant trs pratique pour visualiser rapidement les tats de certains circuits, car elle est facile mettre en uvre et consomme trs peu de courant (en gnral 6 20 mA). Une LED se caractrise par sa tension de seuil qui exprime la tension ses bornes lorsqu'elle est alimente. Quelques valeurs titre d'exemple Couleur rouge jaune Tension de seuil (Vf) 1,6 V 2 V 1,8 V 2 V Consommation (If) 6 20 mA 6 20 mA Longueur d'onde 650 660 nm 565 57 0 nm
36
vert bleu
6 20 mA 6 20 mA
585 590 nm 47 0 nm
Il n'est pas bon d'alimenter une LED directement en 5 V (via une carte Arduino) car elle est en surtension : mme si elle fonctionne elle brlera rapidement. Pour la protger, il faut utiliser le principe du pont diviseur de tension (expliqu plus loin) en la cblant en srie avec une rsistance, dont la valeur se calcule de la manire suivante : R = ( tension d'alimentation - tension de seuil ) / courant Ainsi pour une LED rouge par exemple : R = ( 5 - 1,6 ) / 0,02 = 17 0 Ohms Remarque : la broche 13 de la carte Arduino est dj quipe d'une rsistance qui permet d'y brancher une LED directement.
Potentiomtre
Le potentiomtre est en fait un composant rsistance variable, qui se rgle avec un bouton ou une glissire. On change la rsistance du potentiomtre par une manipulation physique ; c'est une interface humain/machine.
Interrupteur
L'interrupteur ouvre ou ferme un circuit. Il est lui aussi une interface humain/machine. Il peuttre monostable (il revient sa position initiale quand on le lche) ou bistable (il garde sa dernire position). Il peut tre NO (ouvert au repos) ou NF ou NC (ferm au repos). Il existe des interrupteurs combinant ces deux fonctions.
Relais
Le relais est un interrupteur lectromcanique, ce qui signifie qu'il change de position ou d'tat grce un lectroaimant. Il peut donc tre command par un signal lectrique dans un circuit. Le relais est utilis pour relayer une commande sur un circuit de plus forte puissance (voir chapitre Prcautions d'utilisation ). Comme l'lectroaimant contient une bobine, il est ncessaire d'utiliser une diode de roue libre .
Pizolectrique
37
Le pizolectrique est un composant rversible qui gnre une tension quand il est dform et qui se dforme lorsqu'il est soumis une tension. Il prend souvent la forme d'une pastille qui peut alors servir la fois de micro-contact et de haut-parleur. Il peut ainsi servir d'interface humain/machine. Le signal sortant d'un pizo est assez erratique.
Cellule photolectrique
La cellule photolectrique, ou photorsistance, est un semi-conducteur rsistance photovariable. Elle permet de dtecter et/ou mesurer la lumire.
Thermistance
La thermistance est une rsistance qui varie avec la temprature. La correspondance n'est pas linaire, c'est pourquoi il est utile de se rfrer la fiche technique du composant utilis.
Moteur
image manquante Le moteur lectrique est un dispositif lectromcanique qui fonctionne grce l'lectromagntisme gnr par des bobines.
Servomoteur
Le servomoteur est un petit moteur asservi c'est--dire qu'un circuit interne contrle en permanence sa position. Il a souvent une plage de libert rduite (moins d'un tour) mais peut atteindre coup sr une position et la maintenir avec force. Il existe de nombreux modles. Les plus petits peuvent tre actionns directement avec une carte Arduino (voir chapitre Prcautions d'utilisation ).
Circuits intgrs
38
Ce sont des circuits (donc des assemblages de composants) qui sont intgrs dans un mme botier. Il en existe de nombreux types aux fonctionnalits et complexits diverses, du simple rgulateur de tension au processeur d'ordinateur. La puce AT MEGA qui est au cur de la carte Arduino est un circuit intgr. Ces composants sont trs utiles pour raliser des montages complexes en un minimum de place. Ils sont identifis par une rfrence visible sur leur botier. ette rfrence permet d'accder leur fiche technique (en anglais datasheet), en gnral facile trouver sur internet [rfrence du composant + datasheet ] dans un moteur de recherche.
Ce circuit est trs utile pour rduire une tension. Dans un pont diviseur, la tension aux bornes de la seconde rsistance est proportionnelle au rapport de celle-ci par rapport la rsistance globale du circuit. Dans la mtaphore de l'eau, les deux rsistances constituent un escalier ou une cascade. Sa fonction est : U2 = U X ( R2 / ( R2 + R1 ) ) Si l'on veut mesurer, par exemple, une tension qui oscille entre 0 et 15 V avec une carte Arduino qui ne supporte que 0-5 V, il faut utiliser un pont diviseur de tension constitu de deux rsistances dont la premire vaut le double de la seconde.La tension entre les deux rsistances oscillera entre 0 et 5 V. La valeur totale des deux rsistances dterminera la consommation lectrique du circuit (voir Rsistance ). Exemple : avec 1 MOhm et 2 MOhms, U2= 15X(1000/(1000+2000)) = 5 V On utilise ce modle pour limiter la tension aux bornes d'une LED lorsqu'on l'alimente avec une carte Arduino (voir plus haut).
39
Ce circuit est le pendant du pont diviseur de tension. Lorsqu'on branche deux rsistances en parallle, le courant se partage entre les deux branches proportionnellement au rapport des valeurs des rsistances. Sa fonction est : I1 = I X ( R2 / ( R1 + R2 ) )
LE MULTIMTRE
Le multimtre est un ensemble d'appareils de mesure comprenant habituellement un voltmtre, un ampremtre et d'un ohmmtre, pour mesurer la tension, le courant et la rsistance de composants ou de circuits. Il comporte deux broches, habituellement rouge et noire, correspondant la polarit (positive et ngative) du multimtre. Il faut faire bien attention respecter cette polarit pour certaines mesures et de s'assurer chaque fois que la base de chaque broche est connecte la bonne entre du multimtre.Bien videmment, il faut spcifier la grandeur mesurer l'aide du slecteur du multimtre. Par exemple, pour mesurer une tension qui devrait se situer entre 0 et 5 V, on place le slecteur la barre des 20 V (si disponible). Pour un voltage de plus petite chelle, entre 0 et 1 V par exemple, il faudrait mettre le slecteur sur le symbole 2 V. Un multimtre comporte habituellement quatre entres gnralement identifies par 10 A ou 20 A, mA, COM et V ou . La base de la broche noire est toujours connecte la broche COM qui correspond au ple ngatif ou au Gnd (Ground) sur la carte Arduino ou la masse. En fonction de la grandeur que l'on veut mesurer, le connecteur de la broche rouge se branche aux autres entres : Entre Utilisation 10 A ou 20 A pour mesurer un courant lev T ableau Entre 10 A ou 20 A mA V, , diode pour mesurer un courant lev pour mesurer un courant faible pour mesurer une tension, une diode, rsistance et continuit Utilisation
La tension se mesure en parallle et entre deux points d'un circuit, c'est--dire qu'il faut crer une nouvelle branche avec les broches du multimtre. Le circuit doit tre sous tension pour effectuer la mesure.
40
Le courant se mesure en srie, c'est--dire qu'il faut insrer le multimtre dans le circuit ou une branche.Le circuit doit tre sous tension pour effectuer la mesure. Attention ! Lorsqu'on mesure le courant d'un circuit, il faut s'assurer de brancher la base de la broche positive (rouge) dans l'entre approprie du multimtre (souvent identifie par mA ou A) en fonction de la puissance. Si ceci n'est pas fait de manire correcte, il est possible d'endommager le multimtre. La rsistance se mesure sans tension. Pour mesurer la rsistance d'un composant, il suffit de connecter les deux broches du multimtre chacune des pattes du composant que l'on souhaite mesurer. Pour vrifier la continuit d'un circuit et pour voir s'il n'est pas ouvert , si une connexion n'est pas interrompue ou encore si il n'y pas de court-circuit, il est possible d'utiliser la fonction continuit du multimtre. On prend cette mesure en connectant les broches du multimtre chacune des extrmits du composant ou du circuit. Il est noter que, par exemple, un circuit comprenant des rsistances ne prsente pas de continuit complte. Pour la ralisation de circuits lectroniques, plusieurs outils sont essentiels.Nous aborderons les principaux d'entre eux au chapitre Mthodologie, section Mise en uvre.
41
8. CAPTEURS ET ACTIONNEURS
L'lectronique est une branche de la physique applique qui traite de la gestion de signaux lectriques. La carte Arduino est un circuit lectronique qui peut tre programm et qui permet de faire le pont entre le monde virtuel de la programmation informatique (concepts formels et logiques) et le monde physique (interaction lectromcanique des objets). Nous abordons ciaprs les notions de capteurs et actionneurs ainsi de quelque sous catgories de ces deux grandes familles.
LES CAPTEURS
Les capteurs sont des composants matriels, qui une fois correctement connects votre carte Arduino, peuvent fournir des informations sur le monde extrieur. Ceux-ci ont comme rle de saisir une grandeur physique et de la convertir en information numrique. Il est ainsi possible de capter la plupart des phnomnes physiques comme le vent, la pression, la temprature, la lumire, la torsion, la distance, etc. L'on peut classifier l'ensemble des capteurs en trois familles suivant le type d'informations qu'ils renvoient.
Courbe linaire
Pour un capteur, une courbe linaire signifie que la progression de sa valeur suit une progression constante et rgulire. Une courbe non linaire appartient une fonction plus complexe dont la valeur ne progresse pas galement dans le temps.
LES ACTIONNEURS
Les actionneurs sont des composants matriels qui, une fois correctement connects votre carte Arduino, permettent d'agir sur le monde extrieur. Ceux-ci ont comme rle de convertir une valeur lectrique en action physique. Il existe une infinit de types d'actionneurs diffrents et certains sont plus ou moins faciles utiliser avec Arduino. Comme pour les capteurs, il existe une multitude de phnomnes physiques sur lesquels il est possible d'agir par le biais d'actionneurs comme les moteurs lectriques, lectroaimants, lumires, LEDs, lments chauffants utiliss pour concevoir une multitude d'objets et applications comme des hautparleurs, valves hydrauliques et pneumatiques, ventilateurs, pompes, grille-pain, canon photon (un bon vieux tlviseur !), etc.
42
Beaucoup de machines et objets qui nous entourent comportent la fois des capteurs et des actionneurs. Ils sont tous bass sur les principes de base de l'lectronique que nous avons vus dans le chapitre prcdent.
43
9. MICRO-CONTRLEUR
Un micro-contrleur est un petit processeur informatique reli des entres et des sorties numriques (0 ou 1) ou analogiques (tension variable). Il est capable de mmoriser et dexcuter un programme visant interprter les entres pour agir sur les sorties. Il se programme en gnral l'aide d'un ordinateur mais peut fonctionner de manire autonome. En milieu industriel, les automates programmables qui servent grer et piloter des machines en sont une illustration. Ce type de machine intervient sur la commande d'un systme mais ne peut dlivrer beaucoup de puissance. Pour cela, on relaye ses commandes avec des transistors ou des relais. Il existe de nombreux types et tailles de micro-contrleurs avec plus ou moins d'entres /sorties et d'interfaces. petite chelle, les PIC (produits par la socit Microchip) sont des circuits intgrs bien connus des lectroniciens depuis de nombreuses annes. De nombreuses autres marques comme AT MEL, ST Microelectronics, Parallax ou Motorola produisent galement des machines de ce type. Ils sont en gnral programms en C/C++ et ncessitent des connaissances approfondies en lectronique. La plate-forme Arduino a apport une avance majeure dans l'accessibilit de cette technologie au plus grand nombre par sa simplicit d'utilisation et son cot abordable. Depuis lmergence de cette plate-forme, de nombreux projets parallles ont t dvelopps : par exemple Pinguino 1, Beeboard 2 , Freeduino 3 , Ginsing 4 ou Comet, Hackteria bioElectronics 5 , etc.
ARDUINO
La carte Arduino est une plate-forme de prototypage base sur un micro-contrleur AT MEL quip de divers lments qui facilitent sa mise en uvre.
Micro-contrleur
La puce la plus courante qui quipe la carte Arduino est la AT MEGA328. Certains anciens modles ont une puce AT MEGA168 qui est dote d'un peu moins de mmoire. Les cartes Arduino Mega sont dotes d'une puce AT MEGA644 qui a plus de mmoire et d'entres/sorties plus nombreuses. T ous les processeurs de la famille AT MEGA se programment sensiblement de la mme manire mais des diffrences peuvent apparatre pour des fonctions plus complexes. Pour plus de dtails ce sujet, rfrez-vous la rubrique Matriel du site Arduino : http://arduino.cc/en/Main/Hardware
44
Dans l'interface de programmation, le menu T ools > Board permet de dfinir avec quelle machine l'on travaille (voir chapitre Prise en main rapide ). Le micro-contrleur traite des informations reues par ses entres pour agir sur les sorties suivant un programme dfini par l'utilisateur et ce via l'environnement de programmation Arduino.
Interface USB/srie
Cette partie permet d'tablir une communication avec un ordinateur, directement avec un cble USB, afin de programmer le contrleur ou d'changer des informations avec un programme qu'il excute. Ct ordinateur, la carte Arduino apparat au mme titre que n'importe quel priphrique USB et ncessite l'installation d'un pilote (ceci est expliqu dans le chapitre installation). Lorsqu'on utilise cette connexion, l'ordinateur assure directement l'alimentation de la carte Arduino via la liaison USB.
Alimentation
Ce circuit assure l'alimentation de l'ensemble des composants et des sorties suivant deux modes diffrents : lorsque la carte est connecte un ordinateur via USB, c'est le port USB de l'ordinateur qui fournit l'nergie (5 V) ; lorsqu'on branche une source d'nergie au connecteur de la carte (batterie, transformateur ou pile), le systme peut fonctionner de manire autonome. Ce circuit inclut un rgulateur de tension 5 V mais il doit tre aliment entre 6 et 20 V. On conseille en gnral de l'alimenter plutt entre 7 et 12 V pour garder une marge en basse tension et viter que le circuit ne chauffe trop (car le rgulateur de tension disperse toute surtension en chaleur). Sur les premiers modles de cartes Arduino, un petit slecteur permettait de choisir le mode mais depuis le modle Duemilanove , le passage de l'un l'autre mode est automatique. Il ne faut pas brancher sur le 5 V de la carte des composants qui consomment plus de 500 mA.
Entres/sorties
C'est par ces connexions que le micro-contrleur est reli au monde extrieur. Une carte Arduino standard est dote de : 6 entres analogiques. 14 entres/sorties numriques dont 6 peuvent assurer une sortie PWM (voir explication en bas dans la section Les sorties numriques ). Les entres analogiques lui permettent de mesurer une tension variable (entre 0 et 5 V) qui peut provenir de capteurs 6 ou d'interfaces diverses (potentiomtres, etc.). Les entres/sorties numriques reoivent ou envoient des signaux 0 ou 1 traduits par 0 ou 5 V. On dcide du comportement de ces connecteurs (entre ou sortie) en gnral dans l'initialisation du programme (voir chapitre Programmer Arduino ) mais il peut tre aussi chang dans le corps du programme. Lorsqu'on utilise une entre numrique, il est important de s'assurer que le potentiel de l'entre au repos est bien celui auquel on s'attend. En effet, si on laisse l'entre libre , c'est-dire cble rien, le potentiel qu'elle prendra ne sera pas ncessairement 0 V. On parle alors de potentiel flottant car l'lectricit statique ambiante ou les perturbations lectromagntiques peuvent faire apparaitre des valeurs trs fluctuantes. Pour s'assurer du bon fonctionnement, l'on utilise une liaison protge par une rsistance qui va tirer vers le haut (5 V) ou tirer vers le bas (0 V) le potentiel au repos, comme une sorte d'lastique. On utilise en gnral une rsistance de 10 kOhms.
dans un montage tir vers le haut ou pull-up , le potentiel de l'entre au repos est 5 V.
dans un montage tir vers le bas ou pull-down , le potentiel de l'entre au repos est 0 V.
45
Les sorties numriques peuvent actionner de nombreux composants (LED, transistor, etc.) mais elles ne peuvent pas fournir beaucoup de courant (40 mA pour une carte Arduino UNO). Pour piloter des circuits de plus forte puissance, il faut passer par des transistors ou des relais (voir chapitre Prcautions d'utilisation ). La puce AT MEGA n'est pas capable de sortir des tensions variables. Heureusement, 6 des sorties numriques (N 3, 5, 6, 9, 10, 11) peuvent produire un signal PWM. Ce sigle signifie Pulse Width modulation en anglais ; en franais l'on parle de MLI : " Modulation de largeur d'impulsion . Il s'agit d'un artifice permettant de produire une tension variable partir d'une tension fixe. La technique s'apparente approximativement du morse : le signal de sortie est modul sous forme d'un signal carr dont la largeur des crneaux varie pour faire varier la tension moyenne :
Tension 5V P WM ou MLI Valeur m oyenne
0V
Tem ps
ISP
ISP signifie In-circuit Serial Programming . Dans le cas o le micro-contrleur de votre carte Arduino viendrait ne plus fonctionner, il est possible de remplacer la puce dfectueuse. Ainsi le port ISP vous permet de configurer votre nouvelle puce pour la rendre compatible avec l'IDE Arduino. En effet le micro-contrleur de la carte Arduino possde un bootloader (ou bios) qui lui permet de dialoguer avec l'IDE. Il faut pour cela acheter un programmateur ISP ou il est aussi possible d'utiliser une autre carte Arduino comme programmateur ISP.
Circuit de commande
La carte Arduino est un circuit de commande qui sert principalement contrler des actionneurs et recenser les informations des capteurs. Il n'est pas conu pour alimenter les lments qui requirent un certain niveau de puissance, comme des moteurs. Dans le cas o l'on voudrait utiliser de tels actionneurs, il faudrait utiliser un circuit additionnel que l'on dsigne par circuit de puissance (voir chapitre Prcautions d'utilisation ).
CIRCUITS ADDITIONNELS
Il est possible de spcialiser la carte Arduino en lassociant avec des circuits additionnels que l'on peut fabriquer soi-mme ou acheter dj monts. Lorsqu'ils se branchent directement sur la carte, ces circuits s'appellent des shields ou cartes d'extension. Ces circuits spcialiss apportent au systme des fonctionnalits diverses et tendues dont voici quelques exemples :
46
ethernet : communication rseau ; Bluetooth ou zigbee : communication sans fil ; pilotage de moteurs (pas pas ou courant continu) ; pilotage de matrices de LEDs : pour piloter de nombreuses LEDs avec peu de sorties ; cran LCD : pour afficher des informations ; lecteur de carte mmoire : lire ou stocker des donnes ; lecteur de MP3 ; GPS : pour avoir une information de position gographique ; joystick ; etc.
une carte Arduino quipe de plusieurs cartes d'extension
1. 2. 3. 4. 5. 6.
http://www.pinguino.cc/^ http://beeboard.madefree.eu/doku.php ^ http://www.freeduino.org/^ http://www.ginsingsound.com/^ http://hackteria.org/? p=47 7 ^ voir Chapitre Introduction l'lectronique ^
47
REPRSENTATIONS GRAPHIQUES
Il vous sera utile de savoir dchiffrer les schmas techniques ou schematics, qui sont utiliss pour dcrire les circuits lectroniques. Ces schmas utilisent des symboles standardiss pour chacun des composants. Il existe deux standards en concurrence : le standard Amricain et le standard Europen (voir Les bases de l'lectronique ).
48
La plupart des composants ne peuvent pas fonctionner seuls, par exemple une LED a besoin dune rsistance approprie pour ne pas s'user ou brler . Cette rsistance permet de limiter le courant qui traverse la LED. Le courant supprim est alors dissip en chaleur par la rsistance (voir Loi d'Ohm dans le chapitre Bases de l'lectronique ).
Circuit de commande
Comme son nom l'indique, c'est dans ce circuit que sont rassembls tous les lments de contrle comme les boutons, les interfaces et le micro-contrleur. Il est aliment en basse tension : moins de 50 V, souvent 12 V, ou avec la carte Arduino 5 V. L'on pourrait l'assimiler au systme nerveux d'un organisme : c'est ici que se prennent les dcisions mais peu d'nergie y circule. La manire la plus simple de relayer les commandes mergeant de ce circuit pour les transmettre au circuit de puissance est d'utiliser des transistors ou encore des relais. Lorsque les tensions d'alimentation des deux circuits sont plus importantes ou si l'on veut protger la commande de retours accidentels de courant provenant de la puissance, des optocoupleurs (plutt que des transistors) assurent une isolation galvanique : l'information est transmise sous forme de lumire. Ainsi, les deux circuits sont compltement isols lectriquement.
Circuit de puissance
Ce circuit alimente les composants ncessitant beaucoup d'nergie (habituellement les moteurs et autres actionneurs). Sa tension d'alimentation dpend des composants en question. En fonction de cette tension et des conditions d'utilisation, les prcautions prendre sont variables : dans tous les cas, une protection contre les courts-circuits est conseille : fusible ou disjoncteur pour viter de dtruire les composants ; au dessus de 50 V, la tension peut menacer directement les humains : protger les pices nues sous tension ; le 230 V ncessite un interrupteur diffrentiel qui protge les humains des contacts accidentels (en gnral tout local est dot de ce dispositif). Ne pas manipuler de 230 V sans connaissances appropries. Il est important de noter que ces deux circuits sont monts distinctement et sont isols l'un de l'autre. T outefois, il est primordial de lier leur masse ( Gnd ) afin qu'ils partagent le mme potentiel de rfrence.
COURTS-CIRCUITS
Votre carte ne doit pas tre pose sur un support conducteur car elle possde sur son verso des zones nues qui ne doivent pas tres mises en contact afin de ne pas court-circuiter les composants entre eux. Il faut aussi ne jamais connecter directement le port not Gnd (ple ngatif) avec la broche 5 V (ple positif).
49
PROGRAMMATION
11. PROGRAMMER ARDUINO 12. BIEN CODER 13. BIBLIOTHQUE EXTERNES 14. OUTILS DE PROGRAMMATION ALTERNATIFS
50
LE LANGAGE DE PROGRAMMATION
Un langage de programmation 1 est un langage permettant un tre humain d'crire un ensemble d'instructions (code source) qui seront directement converties en langage machine grce un compilateur (c'est la compilation). L'excution d'un programme Arduino s'effectue de manire squentielle, c'est--dire que les instructions sont excutes les unes la suite des autres. Voyons plus en dtail la structure d'un programme crit en Arduino.
1. la partie dclaration des variables (optionnelle) 2. la partie initialisation et configuration des entres/sorties : la fonction setup () 3. la partie principale qui s'excute en boucle : la fonction loop () Dans chaque partie d'un programme sont utilises diffrentes instructions issues de la syntaxe du langage Arduino.
COLORATION SYNTAXIQUE
Lorsque du code est crit dans l'interface de programmation, certains mots apparaissent en diffrentes couleurs qui clarifient le statut des diffrents lments :
51
En orange, apparaissent les mots-cls reconnus par le langage Arduino comme des fonctions existantes. Lorsqu'on slectionne un mot color en orange et qu'on effectue un clic avec le bouton droit de la souris, l'on a la possibilit de choisir Find in reference : cette commande ouvre directement la documentation de la fonction slectionne. En bleu, apparaissent les mots-cls reconnus par le langage Arduino comme des constantes. En gris, apparaissent les commentaires qui ne seront pas excuts dans le programme. Il est utile de bien commenter son code pour s'y retrouver facilement ou pour le transmettre d'autres personnes. L'on peut dclarer un commentaire de deux manires diffrentes : dans une ligne de code, tout ce qui se trouve aprs // sera un commentaire. l'on peut encadrer des commentaires sur plusieurs lignes entre /* et */ .
LA SYNTAXE DU LANGAGE
ponctuation
Le code est structur par une ponctuation stricte : toute ligne de code se termine par un point-virgule ; le contenu d'une fonction est dlimit par des accolades { et } les paramtres d'une fonction sont contenus pas des parenthses ( et ) . Une erreur frquente consiste oublier un de ces lments.
Les variables
Une variable est un espace rserv dans la mmoire de l'ordinateur. C'est comme un compartiment dont la taille n'est adquate que pour un seul type d'information. Elle est caractrise par un nom qui permet d'y accder facilement. Il existe diffrents types de variables identifis par un mot-cl dont les principaux sont : nombres entiers (int) nombres virgule flottante (float) texte (String) valeurs vrai/faux (boolean) Un nombre dcimales, par exemple 3.14159, peut se stocker dans une variable de type float. Notez que l'on utilise un point et non une virgule pour les nombres dcimales. Dans Arduino, il est ncessaire de dclarer les variables pour leurs rserver un espace mmoire adquat. On dclare une variable en spcifiant son type, son nom puis en lui assignant une valeur initiale (optionnel). Exemple :
int ma_variable = 45; // int est le type, ma_variable le nom et = 45 assigne une valeur.
Les fonctions
Une fonction (galement dsigne sous le nom de procdure ou de sous-routine) est un bloc d'instructions que l'on peut appeler tout endroit du programme. Le langage Arduino est constitu d'un certain nombre de fonctions, par exemple analogRead(), digitalWrite() ou delay(). Il est possible de dclarer ses propres fonctions par exemple :
void clignote(){ digitalWrite delay (1000) digitalWrite delay (1000) } (brocheLED, ; (brocheLED, ; HIG H) ; LO W) ;
52
clignote();
Dans ce cas, l'on peut moduler leurs valeurs depuis la commande qui l'appelle :
clignote(5,1000); //la sortie 5 clignotera vite clignote(3,250); //la sortie 3 clignotera lentement
while : excute un code tant que certaines conditions sont remplies. exemple :
//tant que la valeur du capteur est suprieure 250 while(valeurCapteur>250){ //allume la sortie 5 digitalWrite(5,HIG H); //envoi le message "0" au port serie Serial.println(1); //en boucle tant que valeurCapteur est suprieue 250 } Serial.println(0); digitalWrite(5,LO W);
switch/case : fait un choix entre plusieurs codes parmi une liste de possibilits exemple :
// fait un choix parmi plusieurs messages reus switch (message) { case 0: //si le message est "0" //allume que la sortie 3 digitalWrite(3,HIG H); digitalWrite(4,LO W); digitalWrite(5,LO W); break; case 1: //si le message est "1" //allume que la sortie 4 digitalWrite(3,HIG H); digitalWrite(4,LO W); digitalWrite(5,LO W);
53
break; case 2: //si le message est "2" //allume que la sortie 5 digitalWrite(3,LO W); digitalWrite(4,LO W); digitalWrite(5,HIG H); break; }
Exemple
L'exemple qui suit montre l'utilisation de quelques lments de la syntaxe du langage Arduino.
/* Dans ce programme, un signal analogique provenant d'un capteur (potentiomtre) fait varier la vitesse de clignotement d'une LED, partir d'un certain seuil */ ////declaration des variables // selection de la broche sur laquelle est connecte le capteur int brocheCapteur = 0; // selection de la broche sur laquelle est connecte la LED int brocheLED = 13; // variable stockant la valeur du signal reu du capteur int valeurCapteur = 0; //seuil de dclenchement int seuil= 200; ///////////initialisation void setup () { // broche du capteur configure en sortie pinM ode (brocheCapteur, O UTPUT) ; // broche de la LED configure en sortie pinM ode (brocheLED, O UTPUT) ; } ////////////boucle principale void loop () { // lecture du signal du capteur valeurCapteur = analogRead (brocheCapteur) ; //condition de declenchement if(valeurCapteur>seuil){ //appel de la fonction clignote clignote(); } } /////fonction personnalise de clignotement void clignote(){ // allume la LED digitalWrite (brocheLED, HIG H) ; // dlai de valeurCapteur" millisecondes delay (valeurCapteur) ; // teint la LED digitalWrite (brocheLED, LO W) ; // delai de valeurCapteur" millisecondes delay (valeurCapteur) ; }
Le principe de fonctionnement est le suivant : 1. Le signal est lu avec la fonction analogRead () . 2. La valeur du signal varie en 0 et 1023. 3. Si la valeur dpasse le seuil, la LED est allume et teinte pendant un dlai correspondant la valeur du signal reu du capteur.
54
CONVENTIONS DE NOMMAGE
La syntaxe d'un langage de programmation se base gnralement sur une convention de nommage 1 . Il est important de respecter cette nomenclature pour rester dans l'esthtique du code. Dans la dclaration des variables, il faut crire les constantes en majuscule :
const int CAPTEUR = A0; // CAPTEUR est une constante.
Pour les autres variables (int, char, etc.), les fonctions et les sous-routines seront en minuscule. Dans le cas o ces variables ont des noms composs, le premier mot est en minuscule et les autres commencent par une majuscule. Par exemple :
int bookSprint = 2011;
Pour les sous-routines (voir explication plus bas), la rgle est identique celle des variables composes. Par exemple :
afficherValeurCapteur ();
Le code ci-dessus n'est pas indent. Aprs indentation, nous obtenons ceci :
if (etatCaptation == 1) { if (valeurCapteur >= seuil) { analogWrite (pinLed, HIG H); } }
55
Il est noter qu'un code indent est plus attrayant et lisible. C'est un aspect qui facilite la recherche d'erreurs ventuelles qui pourraient se glisser dans le code.
BONUS
Pour indenter votre code vous pouvez utiliser la fonction auto-format . Cette fonction se base sur les conventions de programmation pour formater le code. Elle indente votre code automatiquement. Pour cela il faut aller dans le menu Tools > Auto Format ou utiliser le raccourci correspondant. 1. http://fr.wikipedia.org/wiki/Convention_de_nommage^
56
Cette commande inclut au code source tout le contenu de la bibliothque. Les fonctions qu'elle contient peuvent alors tre appeles au mme titre que les fonctions de base. Pour info : les bibliothques logicielles se distinguent des excutables par le fait qu'elles ne sexcutent pas "seules" mais sont conues pour tre appeles par d'autres programmes.
57
Les compilateurs
Un compilateur est un programme informatique qui traduit un langage (la source) en un autre (la cible), gnralement dans le but de crer un programme excutable le plus souvent un langage d'assemblage ou un langage machine. Nom Scons build_arduino.py Arduino CMake Liens http://code.google.com/p/arscons http://arduino.cc/playground/BuildArduino/Py https://github.com/queezythegreat/arduino-cmake
Bibliothques
Voici des librairies qui permettent dtendre certain langages de programmation pour leur permettre de crer des programmes pour la carte Arduino. Nom Liens
58
Sharp Netwalker
http://www.tuxbrain.com/en/cotent/connecting-arduino-netwalkeri
59
PROJETS
15. INTRODUCTION DES PROJETS 16. PREMIER CONTACT 17. TEXTE BRILLANT 18. LA CIGARETTE NE TUE PAS LES MACHINES 19. LA PETITE BTE QUI A PEUR 20. OSCILLOSCOPE 21. PERROQUET
60
61
Ce projet vous propose de crer une petite bte qui a peur et s'loigne lorsque vous approchez votre main. Vous y verrez comment contrler un servomoteur et intgrer votre code une bibliothque externe. Nous y ferons aussi la distinction entre des variables locales et globales, et aussi l'utilisation de sous-routines. Nous aborderons une nouvelle fonction qui est la suivante : while().
Projet 5 : Oscilloscope
Ce projet va vous permettre de raliser un instrument servant mesurer et visualiser des tensions comprises entre 0 et 5 volts. Il s'agit d'un oscilloscope minimaliste. Vous verrez comment envoyer des informations srielles vers un autre logiciel libre, Processing.
Projet 6 : Perroquet
Vous manquez d'amis ? Avec ce projet, vous ne vous sentirez plus jamais seul ! Le perroquet vous permettra de construire un programme qui coute une srie d'impacts sur un objet et les rpte son tour. Vous verrez la programmation d'un filtre anti-rebond et l'utilisation de tableaux ou matrices. Les nouvelles fonctions abordes sont : fonctions logiques && et ||, millis(), array[ ], switch().
62
PREMIRE PARTIE
Les capteurs pizolectriques sont des composants qui crent un courant lectrique lorsque qu'ils sont sollicits par des vibrations ou dformations. Colls sur une surface, ce capteur peut dtecter des vibrations. C'est pourquoi dans cet exemple, la pastille pizolectrique devra tre nu et non pas encapsule dans un botier plastique. Nous allons donc voir dans cette premire partie, comment connecter un tel capteur notre carte Arduino et afficher les valeurs captes.
Schma de montage
Afin de raliser ce montage, nous allons connecter la patte ngative de notre capteur pizolectrique la masse de notre carte Arduino soit une des pins Gnd. Puis, nous connecterons l'autre patte sur la pin Analog In 0 de la carte. Branchez ensuite la rsistance, une patte dans une pin Gnd et l'autre dans Analog In 0. et pour finir, scotchez fermement votre capteur sur votre bouteille plastique.
Programme
63
Vous pouvez maintenant copier le programme suivant dans la fentre du programme Arduino.
// Variable pour dsigner quelle pin est utilise pour le capteur int capteurPiezo = A0; // pin Analog 0 // Variable pour contenir la valeur du capteur int valeurPiezo ; void setup() { // tablit la connexion srielle 9600 bauds Serial.begin(9600); } void loop() { // Lit la pin du capteur et l'assigne la variable valeurPiezo valeurPiezo = analogRead(capteurPiezo); // Affiche au moniteur sriel la valeur de valeurPiezo Serial.println(valeurPiezo); // Laisse un court dlai afin que l'utilisateur puisse lire les valeurs correctement delay(100); }
Sauvegardez maintenant votre programme et vrifiez-le en cliquant sur le bouton Verify. En cas d'erreur un message rouge saffiche dans la console. Vrifiez alors la syntaxe et orthographe du code (voir chapitre Bien structurer son code ). Si vous ne rencontrez pas d'erreurs, vous pouvez maintenant tlverser votre programme sur la carte en cliquant sur Upload. Une fois le tlversement termin, vous pouvez faire apparatre la fentre du moniteur sriel en cliquant sur le bouton Serial Monitor. Assurez-vous que la vitesse de transfert des informations (baudrate) du moniteur sriel est identique celle spcifie dans le programme soit dans notre cas, 9600. Ce paramtre peut tre chang en bas droite de la fentre. Aprs quelques instants, vous devriez voir dfiler des chiffres sur le moniteur sriel. Il s'agit de la valeur renvoye par le capteur pizolectrique. Vous pouvez maintenant prendre la bouteille dans vos main et la dformer pour faire changer la valeur qui saffiche dans votre terminal. La valeur doit changer proportionnellement et simultanment la dformation de la bouteille.
Schma de montage
Afin de complter ce montage, il nous suffit de connecter la patte (+) de la LED la pin 13 et la patte (-) qui est la plus courte, la masse de votre Arduino soit une des pins Gnd.
Programme
Copiez maintenant le programme suivant dans la fentre de programmation Arduino.
// Variable pour dsigner int capteurPiezo = A0; // // Variable pour contenir int valeurPiezo ; // Variable pour dsigner int ledPin = 13; quelle pin est utilise pour le capteur pin Analog 0 la valeur du capteur quelle pin de l'Arduino est utilise pour la LED
void setup() { // Dfinit la pin 13 comme une sortie pinM ode(ledPin, O UTPUT); // tablit la connextion srielle 9600 baud Serial.begin(9600); } void loop() { // Lit la pin du capteur et l'assigne la variable valeurPiezo valeurPiezo = analogRead(capteurPiezo); // Convertit la valeur du capteur en valeur pour la LED valeurPiezo = map(valeurPiezo, 0, 1023, 0, 255);
64
// Affecte la valeur de puissanceLed la pin 13 analogWrite(ledPin, valeurPiezo); // Affiche au moniteur sriel la valeur de valeurPiezo Serial.println(valeurPiezo); }
Pour contrler la luminosit de la LED proportionnellement la valeur du capteur, nous devons raliser un conversion. En effet la fonction analogWrite(); prend comme argument une variable dont la plage est de 0 255. De son cot la fonction analogRead(); nous donne une valeur entre 0 et 1024. Nous devons donc ramener lchelle de la fonction analogRead(); une plage plus petite (0 255), c'est pourquoi nous devons utiliser la fonction map ci-dessous.
map (val origine, val origine min, val origine max, val sortie min, val sortie max);
Pour convertir une variable dont la plage est de 0 1023 en une variable dont la plage est de 0 255, cela donne la fonction suivante
map (valeurPiezo, 0, 1023, 0, 255);
65
Principe de fonctionnement
Des caractres sont saisis partir du moniteur sriel de l'interface de programmation Arduino pour allumer et teindre les LED. Saisir 'R ou r' pour allumer la LED rouge, Saisir 'J ou j' pour allumer la LED jaune, Saisir' V ou v' pour allumer la LED verte, Saisir 'B ou b' pour allumer la LED bleue, Saisir 'E ou e' pour teindre les LED.
Matriel ncessaire
1. 2. 3. 4. 5. Carte Arduino Duemilanove. Platine de prototypage. Quatre LED (rouge, verte, jaune et bleue). Quatre rsistances (130, 60, 130, 60 Ohms). Fils de connexion.
66
Les LED, leur rsistance approprie et le fil de connexion sont monts sur la platine d'esssai. L'anode (patte positive) de chacune des LED est connecte une rsistance relie une pin numrique de la carte: la LED rouge est relie au pin 2, la jaune au pin 4, la LED verte au pin 6 et la LED bleue, au pin 8. La cathode (patte ngative) de chacune des LED est connecte un fil de connexion reli une des pin GND de la carte. Les LED rouge et jaune utilisent chacune une rsistance de 130 Ohms et les LED verte et bleue une rsistance de 60 Ohms. Aprs avoir ralis le montage du circuit, il faut connecter la carte sur le port USB et lancer le logiciel Arduino pour y crire le code de pilotage des LED.
//Dclaration de la variable contenant la valeur de la touche saisi au clavier int octetRecu; void setup() { // Initialisation de la communication serielle Serial.begin(9600); // Configuration des pin en sortie // il est important pour le bon fonctionnement du montage de spcifier quelles pins seront utilises comme sortie. pinM ode(pinLed0, O UTPUT); pinM ode(pinLed1, O UTPUT); pinM ode(pinLed2, O UTPUT);
67
pinM ode(pinLed3, O UTPUT); } void loop() { // Verfie si il y a une donne srielle disponible if (Serial.available() > 0) { // Lecture de l'octet prsent dans la mmoire tampon (buffer) octetRecu = Serial.read(); if (octetRecu == 'R' || octetRecu == 'r') { //Si l'octet recu est gal R ou r digitalWrite(pinLed0, HIG H); //Allumer la LED connecte pinLed0 Serial.println("LED Rouge allumee"); //Afficher "LED Rouge allumee" dans le moniteur srie } if (octetRecu == 'J' || octetRecu == 'j') { //Si l'octet recu est gal J ou j digitalWrite(pinLed1, HIG H); //Allumer la LED connecte pinLed1 Serial.println("LED Jaune allumee"); //Afficher "LED Jaune allumee" dans le moniteur srie } if (octetRecu == 'V' || octetRecu == 'v') { //Si l'octet recu est gal V ou v digitalWrite(pinLed2, HIG H); //Allumer la LED connecte pinLed2 Serial.println("LED Verte allumee"); //Afficher "LED Verte allumee" dans le moniteur srie } if (octetRecu == 'B' || octetRecu == 'b') { //Si l'octet recu est gal B ou b digitalWrite(pinLed3, HIG H); //Allumer la LED connecte pinLed3 Serial.println("LED Bleue allumee"); //Afficher "LED Bleue allumee" dans le moniteur srie } if (octetRecu == 'E' || octetRecu == 'e') { //Si l'octet recu est gal E ou e //Eteindre les LED connectes aux pinLed0, pinLed1, pinLed2 et pinLed3 digitalWrite(pinLed0, LO W); digitalWrite(pinLed1, LO W); digitalWrite(pinLed2, LO W); digitalWrite(pinLed3, LO W); //Afficher "LED eteinte" dans le moniteur srie Serial.println("LED eteinte"); } } }
Dclaration des variables Le caractre saisi au clavier ainsi que le numro de la pin sur laquelle est connecte la LED allumer sont stocks dans des variables dclares au dbut du programme. Dclaration des variables stockant les numros de pin :
int int int int pinLed3 pinLed2 pinLed1 pinLed0 = = = = 8; 6; 4; 2; // // // // LED LED LED LED Bleue Verte Jaune Rouge
Initialisation et Configuration La communication srielle entre l'ordinateur et la carte Arduino doit se faire la mme vitesse. Dans ce projet, nous utilisons une vitesse de 9600 Bauds. Il faut donc indiquer dans l'initialisation, la vitesse de la communication avec l'instruction :
Serial.begin (9600) ;
Certains logiciels ou priphriques peuvent fonctionner d'autres vitesses, il serait donc ncessaire dans ces cas de modifier la commande prcdente pour utiliser la bonne vitesse. Une fois cette instruction ralise, les ports sur lesquels sont connectes les LED sont configurs en sortie pour indiquer la carte que des signaux seront envoys de l'ordinateur vers les pins. La configuration se fait avec l'instruction pinMode ().
pinM ode(pinLed0, O UTPUT); pinM ode(pinLed1, O UTPUT); pinM ode(pinLed2, O UTPUT);
68
Boucle principale Le cur du code de pilotage des LED se trouve dans la boucle principale ; les instructions qui s'y trouvent s'excuteront aussi longtemps que la carte sera connecte l'ordinateur. C'est dans cette partie que la lecture du caractre saisi et la correspondance avec l'instruction d'allumage et extinction des LED sont dfinies. Puisque c'est partir du clavier que le pilotage s'effectue, le programme est toujours en attente de saisie d'un caractre ; les instructions de pilotage sont donc contenues dans la structure :
if (Serial.available () > 0) { ... ... }
Lorsque le moniteur sriel ou tout autre programme envoie une information srielle la carte Arduino, la donne est stocke en mmoire par le port sriel de l'Arduino, et elle y demeurera jusqu' ce qu'elle soit lue par la fonction Serial.read(). D'autre part, la fonction Serial.available() retourne une valeur correspondant au nombre de donnes qui sont contenues dans le port. Si elle est plus grande que 0, cela signifie qu'il y a au moins une donne prsente dans le port (et qu'il faut donc aller la lire). La structure prcdente vrifie donc tout au long de l'excution du programme s'il y a une donne srielle reue par l'Arduino qui est en attente d'tre lue ; si c'est le cas, le programme la lit. Lecture du caractre saisi : La lecture du caractre se fait avec l'instruction Serial.read().
octetRecu = Serial.read () ;
La donne lue est ensuite stocke dans la variable octetRecu et retire de la mmoire du port sriel de l'Arduino. Allumage et extinction des LED La valeur de la variable est ensuite analyse dans le but d'effectuer la correspondance entre le caractre saisi et la LED approprie comme indiqu dans le principe de fonctionnement. Dans le reste du code, les commentaires la fin de chaque ligne expliquent les instructions.
if (octetRecu =='R'|| octetRecu =='r') { //Si l'octet reu est gal R ou r digitalWrite (pinLed0, HIG H) ; //Allumer la LED connecte pinLed0 Serial.println ("LED Rouge allume") ; //Afficher LED Rouge allume" dans le moniteur srie } if (octetRecu =='J'|| octetRecu =='j') { //Si l'octet reu est gal J ou j digitalWrite (pinLed1, HIG H) ; //Allumer la LED connecte pinLed1 Serial.println ("LED Jaune allume") ; //Afficher LED Jaune allume" dans le moniteur srie } if (octetRecu =='V'|| octetRecu =='v') { //Si l'octet recu est gal V ou v digitalWrite (pinLed2, HIG H) ; //Allumer la LED connecte pinLed2 Serial.println ("LED Verte allume") ; //Afficher LED Verte allume" dans le moniteur srie } if (octetRecu =='B'|| octetRecu =='b') { //Si l'octet reu est gal B ou b digitalWrite (pinLed3, HIG H) ; //Allumer la LED connecte pinLed3 Serial.println ("LED Bleue allume") ; //Afficher LED Bleue allume" dans le moniteur srie } if (octetRecu =='E'|| octetRecu =='e') { //Si l'octet reu est gal E ou e //Eteindre les LED connectes aux pinLed0, pinLed1, pinLed2 et pinLed3 digitalWrite (pinLed0, LO W) ; digitalWrite (pinLed1, LO W) ; digitalWrite (pinLed2, LO W) ; digitalWrite (pinLed3, LO W) ;
69
L'image qui suit montre le rsultat de la saisie d'un caractre 'R' suivi de celle du caractre 'E' dans le moniteur sriel.
La vitesse de communication mentionne sur le moniteur sriel est la mme que celle indique dans la fonction Serial.begin(). Comme le port sriel de la carte Arduino peut recevoir plusieurs donnes conscutivement, il est possible de s'amuser en envoyant des combinaisons de lettres. Par exemple, envoyer d'un mme coup les lettres ERV avec le moniteur sriel fera d'abord teindre les LED, puis allumer la rouge et la verte quasi instantanment.
L'image ci-dessus est celle d'un programme Pure Data destin au pilotage des LED connectes la carte, lancer-le aprs avoir connect la carte Arduino l'ordinateur et tlvers le code cidessus. Voyons en dtail le fonctionnement de ce programme :
70
En cliquant sur le message devices , les ports USB sur lesquels sont connectes les cartes Arduino ainsi que leur numro apparaissent.
Dans notre cas, la carte est connecte sur /dev/ttyUSB0 et a 4 comme numro de port. Cliquer sur open 4 pour ouvrir le port numro 4 et close 4 pour le fermer. Les messages open et close doivent tre suivis du bon numro de port (celui qui s'affiche en cliquant sur devices ). Traitement effectu sur les caractres
Cette image est celle des commentaires sur la correspondance entre les caractres saisir et les valeurs envoyer la carte.
L'objet key lit le caractre saisi au clavier et renvoie sa correspondance en chiffre. Les valeurs correspondantes aux caractres indiqus dans le principe de fonctionnement sont slectionnes avec l'objet sel et envoyes l'objet comport .
Cet objet fait office d'interface avec le port sriel et communique une vitesse de 9600 bauds.
Remarque
Les caractres saisis et reus par port sriel sont convertis en octet (conversion ASCII) avant d'tre envoys la carte. Pour plus d'informations sur la communication srie visitez le site : http://wiki.t-of.info/index.php? n=Arduino.CommunicationS%e9rie. Pour plus d'informations sur le code ASCII des caractres visitez le site : http://www.asciitable.com/ Le montage de cet exemple est effectu titre exprimental avec quatre LED ; la carte Arduino Duemilanove comporte 14 sorties numriques. Ainsi, d'autres LED pourraient tre connectes sur les autres ports de la carte. Pour contrler encore davantage de LED, il serait possible d'utiliser des circuits intgrs appels multiplexeurs.
71
Il faut toujours prendre le soin de vrifier la rsistance approprie chacune des LED avant de les ajouter au circuit pour ne pas les brler (Voir Section lectronique ; Chapitre Prcautions d'utilisation, Protection des composants.
72
PREMIRE TAPE
Nous allons tout d'abord raliser le circuit suivant afin de pouvoir utiliser le moteur DC.
73
Montage lectronique
Comme le moteur ncessite une tension diffrente de celle fournie par la carte Arduino, nous devons monter deux circuits diffrents. Un circuit de commande o figure l'Arduino et un circuit de puissance o se trouve le moteur. Le transistor sert de lien entre les deux circuits en ce sens qu'il reoit l'information de commande de la carte Arduino pour ouvrir et fermer le circuit de puissance qui active le moteur. Pour plus d'information sur les circuits de puissance, veuillez lire la partie Circuit de commande et circuit de puissance du chapitre Prcautions d'utilsation dans la section lectronique . Pour ce montage, nous allons d'abord connecter le transistor 2N3904. Si ce transistor ne vous est pas disponible, il est possible d'utiliser un autre transistor qui est galement de type NPN. Ces transistors comportent trois bornes. Lorsqu'on fait face au 2N3904 ( sa partie plate ), la borne de gauche s'appelle l'metteur, la borne centrale la base et la borne de droite le collecteur.
L'metteur doit aller se brancher en direction d'un ple ngatif ou Gnd. La base doit se connecter la branche de contrle. Le collecteur doit aller se brancher en direction d'un ple positif. Donc, commencez par connecter l'une des bornes de la rsistance 2.2k la pin 9 de l'Arduino. L'autre borne de la pin devra se connecter la base du transistor. Vous pouvez galement utiliser un fil pour passer de la pin 9 Arduino la platine d'essai, puis y insrer la base du transistor si cela est plus facile. Ensuite, la borne metteur du transistor doit aller au Gnd. Finalement, la borne collecteur du transistor doit aller dans une branche de la platine d'essai. Maintenant, nous allons ajouter le moteur. Connectez un des fils du moteur (le ngatif, si possible), dans la branche de la platine d'essai o se trouve dj la partie collecteur du transistor. L'autre fil (le positif) du moteur doit aller directement dans la branche principale positive (9 V) de la platine d'essai. Ensuite, connectez la borne ngative de la diode (celle qui provient du ct de la diode marqu d'un trait) dans la branche principale positive et la patte positive de la diode dans la branche de la platine o le transistor et le moteur sont connects. Vous aurez peut-tre remarqu que la diode est branche l'envers (le ngatif dans le positif). Ceci est normal. Il s'agit d'un principe de diode de roue libre . Le rle ici de la diode est d'viter une surtension et sert protger les composants comme le transistor. (voir chapitre Les bases de l'lectronique ). Il vous faut brancher l'alimentation la platine d'essai, le ple ngatif de la batterie ou du transformateur dans la branche principale ngative de la platine et le ple positif dans la branche positive principale. Finalement, pour lier les masses ou le Gnd des deux circuits (celui de commande comprenant l'Arduino et celui de puissance qui comporte le moteur). Pour ce faire, connectez un fil l'une des pin Gnd de la carte Arduino la branche principale ngatif de la platine d'essai.
Programmation
Le programme suivant fera acclrer puis dclrer le moteur de manire graduelle et rptitive.
// dclarer la variable pour contenir la pin associe au moteur int pinM oteur = 9; void setup() { // spcifier que la pin lie au moteur est une sortie pinM ode(pinM oteur, O UTPUT);
74
} void loop() { // boucle pour faire acclrer le moteur for (int i = 0 ; i <= 255 ; i++) { //envoyer la valeur de 0 255 analogWrite( pinM oteur, i); // attendre 10 millisecondes pour donner le temps de raliser l'acclration delay(10); } // boucle pour faire dclrer le moteur for (int j = 0 ; j <= 255 ; j++) { //envoyer la valeur de 255 0 analogWrite( pinM oteur, 255 - j); // attendre 10 millisecondes pour donner le temps de raliser l'acclration delay(10); } }
Le code ci-dessus nous permet d'abord de tester le contrle du moteur. Nous utilisons la commande analogWrite(); pour envoyer un signal au transistor. Pour plus d'information sur le PWM, veuillez lire la partie Entres / Sorties du chapitre Micro-contrleurs de la section lectronique . Ce signal nous permet de varier la vitesse de rotation du moteur en envoyant de courtes impulsions on/off . La commande analogWrite(); prend deux paramtres : la pin laquelle nous voulons nous adresser et une valeur entre 0 et 255, correspondant dans notre projet une intensit trs faible pour le 0 jusqu' une quasi-pleine intensit pour 255. L'autre fonction que nous utilisons dans ce programme est la boucle for();. Celle-ci permet de rpter un certain nombre de fois une srie d'instructions. Dans notre code, nous rptons 256 fois la commande analogWrite(); en incrmentant chaque fois la valeur passe en paramtre. Notre boucle for(); ncessite l'utilisation d'une variable et la spcification de trois instructions pour son bon fonctionnement :
for (int i = 0 ; i <= 255 ; i++)
1. le premier lment dclare la variable utiliser et son tat de dpart. Dans notre exemple, nous dclarons la variable : int i = 0; 2. le second lment prcise la condition remplir pour arrter la boucle : i <= 255; ceci signifie que tant que i sera plus petite ou gale 255, les instructions comprises entre les accolades seront rptes. 3. le dernier lment prcise l'opration excuter aprs chaque boucle : i++;. Donc, une fois que les instructions entre accolades sont excutes une premire fois, la valeur de i sera incrmente de 1. i++; est un raccourci qui est quivalent crire i = i + 1;. Au dpart, i prend donc la valeur 0. Nous spcifions cette valeur analogWrite();. Puis, le programme attend 10 millisecondes avec la fonction delay(10); pour laisser un temps au moteur de bouger un peu. Un dlai plus long ferait en sorte que le moteur change d'tat plus lentement (la boucle s'excuterait avec plus de temps d'attente entre chaque tape). Lorsque ces instructions sont termines, la boucle reprend et i est incrment. La variable a donc maintenant une valeur de 1. La condition est teste i <= 255 et retourne faux, donc la boucle continue. Les instructions sont excutes, le moteur tourne un peu plus vite et i est ensuite incrment 2. Et ainsi de suite jusqu' ce que i soit incrment 256, qui rend la condition "vraie" et qui fait sortir le programme de la boucle for();. La deuxime boucle du programme s'excute de la mme manire, la diffrence que nous utilisons la variable j et que pour effectuer une dclration du moteur, nous utilisons l'opration 255-j pour spcifier la valeur prendre pour analogWrite(). En effet, lorsque j est gal 0, la valeur retourne par 255-j est gale 255. Et ainsi de suite. Notre boucle for() passera donc en ralit les valeurs de 255 0 analogWrite().
DEUXIME TAPE
Dans cette deuxime tape, notre Arduino se dvouera pour fumer votre place. Nous connecterons donc le capteur de souffle et modifierons le code pour que lorsque vous soufflez ou aspirez prs du micro lectret, l'arduino active sa micro pompe.
75
Montage lectronique
prsent, il nous faut incorporer notre capteur de souffle au circuit. Notez que vous pouvez utiliser un potentiomtre pour simuler ce capteur et raliser le projet. Il est toutefois inutile de souffler sur le potentiomtre, il ne ragira pas! Le capteur que nous utilisons ici a trois fils. Le fil ngatif (-) doit aller la pin Gnd de l'Arduino. Le fil positif (+) doit tre connect la pin 5V de la carte Arduino. Finalement, le fil du signal doit tre connect la pin 0 de l'Arduino.
Programmation
// dclarer la variable pour contenir la pin associe au moteur int pinM oteur = 9; // dclarer la variable pour contenir la pin associe au capteur int pinCapteur = A0; // dclarer la variable pour contenir la valeur du capteur int valeurCapteur; // dclarer la valeur minimale pour dclencher le moteur int seuilCapteur = 550; // dclarer la variable pour contenir accumuler des valeurs tampon int tampon = 0; // dclarer la variable pour contenir la valeur d'arret pour le tampon int seuilTampon = 5; void setup() { // tablir connection srielle Serial.begin(9600); // spcifier les entres et sorties pinM ode(pinM oteur, O UTPUT); pinM ode(pinCapteur, INPUT); } void loop() { // lire le capteur et mettre dans variable valeurCapteur = analogRead(pinCapteur); // afficher la valeur pour dbugger Serial.println(valeurCapteur); // si la valeur du capteur est suprieur au seuil fix if(valeurCapteur > seuilCapteur) { // transformer les valeurs analogiques 0-1023 100 255 valeurCapteur = map(valeurCapteur, 0, 1023, 100, 255); // envoyer valeur au moteur analogWrite(pinM oteur, valeurCapteur); // remettre le compteur tampon zro tampon = 0; } else{ // si le capteur est infrieur // incrmenter le tampon tampon++; } // si le compteur tampon a dpass le seuil if(tampon >= seuilTampon) { // arrter le moteur analogWrite(pinM oteur, 0); } // attendre 100 millisecondes pour avoir moins d'erreurs de lecture
76
delay(100); }
Jetons d'abord un il nos variables : pinMoteur sert identifier la pin lie au moteur. pinCapteur sert identifier la pin lie au capteur. valeurCapteur sert emmagasiner la valeur du capteur. seuilCapteur le seuil sert prciser partir de quelle valeur du capteur nous pouvons considrer l'entre d'information comme un souffle . Plus l'utilisateur souffle fort dans le capteur, plus la valeur augmente. C'est pourquoi nous retrouvons la fonction if(valeurCapteur >= seuilCapteur) dans notre code. tampon et seuilTampon servent une fonction spciale. Le micro lectret convertit du son en information numrique. Un signal sonore reprsent numrique est en fait une oscillation, une modulation d'amplitude de signal travers le temps. Un son continu l'oreille ne l'est pas en ralit, puisque c'est une vibration. Les donnes numriques associes ce son comportent donc des valeurs qui peuvent avoir de grandes variations.
Nous voulons que le moteur ne s'enclenche qu' partir d'un certain seuil de volume (valeurCapteur) mais la variation de l'amplitude d'un son, mme suffisamment fort, comportera des valeurs infrieures ce seuil et qui feront s'arrter le moteur. Pour viter cela, nous utilisons le tampon. En effet, chaque fois que valeurCapteur descend en bas de seuilCapteur, et ce, mme lors d'un son continu, nous incrmentons le tampon plutt que de fermer immdiatement le moteur. Si valeurCapteur remonte en haut de seuilCapteur, signifiant que nous sommes en prsence d'un son continu suffisamment fort, nous remettons tampon zro. T outefois, si pour plusieurs lectures conscutives du capteur, nous obtenons une valeur infrieure seuilCapteur, cela sera interprt comme un arrt du son continu et nous arrterons ainsi le moteur. Le nombre de lectures conscutives est spcifi par seuilTampon et la condition mentionne prcdemment est vrifie par if( tampon >= seuilTampon ). La dernire fonction dcrire que nous utilisons dans le code est map(). Cette fonction nous permet de reporter les valeurs de lecture analogique (0 1023) sur des valeurs slectionnes par le programmeur pour le bon fonctionnement du moteur (100 255). map() est explicite plus en dtail dans le projet Premier Contact.
77
* Il est important de noter que pour les types de cartes beaucoup plus anciens comme la Diecimela, il faut galement modifier le slecteur de tension sur la carte (un jumper, en anglais) pour que la carte accepte le courant extrieur (ext sur la carte) plutt que celui du USB (usb sur la carte).
78
Si vous n'avez pas accs un servomoteur, il vous est toutefois possible de raliser la premire partie de ce projet afin de comprendre comment analyser l'information entrante de la cellule photosensible.
PREMIRE TAPE
Dans cette premire tape, nous travaillerons sur la partie capteur de ce projet. Nous connecterons la cellule photosensible l'Arduino et afficherons l'information qui y est associe.
Schma et montage
Voici le schma que nous allons raliser :
79
Pour raliser ce montage, il vous faut d'abord fixer la cellule sur la tte du servo moteur, l'aide de papier collant ou alors en passant les pattes dans les petits trous de la tte du moteur. Ensuite, en utilisant des pinces crocodiles, branchez une des pattes de la cellule sur la pin de 5 V de l'Arduino, et l'autre sur la pin Analog In 0. Pour complter le montage de la partie capteur , il faut connecter la patte de la rsistance 10 k la pin Analog In 0, et l'autre patte la pin GND de l'Arduino. Ce montage lectronique correspond en fait un pont diviseur de tension (voir chapitre Les bases de l'lectronique ).
Programme
Copiez maintenant le programme suivant dans la fentre de programmation Arduino.
// ********************** // dfinition des variables int pinCapteur = 0; // variable pour dsigner quelle pin de l'Arduino est utilise pour le capteur int valeurCapteur = 0; // variable pour contenir la valeur du capteur. void setup() { Serial.begin(9600); // tablir la connection srielle 9600 baud pinM ode(pinCapteur, INPUT); // dfinir la pin 0 comme une entre (pinCapteur) } void loop() { montrerValeurCapteur(); delay(20); // laisser un cours dlai pour viter le trop-plein d'information } void montrerValeurCapteur() { valeurCapteur = analogRead(pinCapteur); // lire la pin analogique et mettre la valeur dans valeurCapteur Serial.println(valeurCapteur); // communiquer au moniteur sriel la valeur du capteur. }
Sauvegardez maintenant votre programme et vrifiez-le en cliquant sur le bouton Verify . En cas d'erreur (indique dans la console) , vrifiez l'orthographe, la casse et la prsence approprie des points-virgules (;). Vous pouvez maintenant tlcharger votre programme sur la carte en appuyant sur Upload . Une fois le tlchargement termin, vous pouvez faire apparatre la fentre du moniteur sriel en cliquant sur le bouton Serial Monitor . Assurez-vous que la vitesse de transfert des informations (baudrate) du moniteur sriel est identique celle spcifie dans le programme, soit 9600. Cette information se trouve dans le bas de la fentre et peut tre change. Aprs quelques instants, vous devriez voir dfiler des chiffres sur le moniteur sriel. Ces chiffres devraient moduler lgrement, et plus amplement lorsque de l'ombre est faite sur la cellule photosensible.
80
Voyons plus en dtail les lments du code : Dclaration des variables pinCapteur Cette variable est utilise pour rfrer, tout au long du programme, la pin de l'Arduino o est branche notre capteur, la cellule photosensible. Dans ce projet, nous utilisons la pin analog 0, et donc la valeur de pinCapteur est initialise 0 lorsqu'elle est dclare. Si nous avions connect le capteur une autre pin, par exemple analog 5, la valeur de pinCapteur aurait t initialise 5. valeurCapteur Cette seconde variable contient la valeur qui sera lue sur le pin de l'Arduino correspondant notre capteur. Configuration (setup) Deux instructions figurent dans la partie setup () de notre programme. Serial.begin (9600); Cette fonction tablit la connexion srielle entre la carte Arduino et, dans notre cas particulier, l'interface logicielle Arduino. Le paramtre qui est donn la fonction est 9600, qui signifie que la connexion srielle tablir doit rouler 9600 bauds. Le choix de la vitesse dpend de l'application dveloppe. Dans le cadre de cet exemple, une vitesse plus leve n'est pas ncessaire. pinMode (pinCapteur, INPUT); Cette fonction dclare la pin de la carte correspondant pinCapteur (en l'occurrence, 0), comme un entre (Input), puisque nous utiliserons cette pin pour recueillir la variation de voltage engendre par notre circuit comportant la cellule photorsistante. Boucle principale (loop) Notre boucle de programme principal est relativement simple. Il suffit de recueillir la valeur de notre capteur, de l'envoyer au logiciel Arduino par communication srielle et d'attendre un peu, pour espacer les lectures. montrerValeurCapteur (); Cette ligne d'instruction appelle la fonction que nous avons dfinie nous-mmes et qui sera explique ci-aprs. En l'appelant de la sorte, toutes les instructions qui se trouvent dans la fonction montrerValeurCapteur () seront excutes. Une fois l'excution de la fonction termine, le programme poursuivra pour excuter la fonction suivante. delay (20); Cette seconde fonction demande au programme de marquer une courte pause, pour espacer les lectures. Le paramtre qui est spcifi, la valeur 20, indique que le dlai a une dure de 20 millisecondes (on retrouve 1000 millisecondes dans une seconde). Sous-routines (montrerValeurCapteur) En plus des fonctions rserves par Arduino setup () et loop (), il est possible de dfinir soimme des fonctions que l'on peut galement appeler sous-routines . L'utilisation de sousroutines permet d'allger et de mieux structurer le programme. Par exemple, lorsque la fonction principale loop () doit excuter plusieurs moments diffrents la mme srie d'instructions, il est possible de mettre une fois ces instructions dans une fonction unique, en sous-routines, et d'y rfrer. galement, l'utilisation de sous-routine permet une meilleure lisibilit du code principal et de regrouper sous une mme appellation, ou une mme fonction, une srie d'instructions ayant une tche commune. Par exemple, une srie de 10 instructions permettant de faire clignoter une LED de manire non rgulire pourraient tre regroupes sous une fonction que l'on pourrait nommer faireClignoterLED (). Ensuite, dans le programme principal, pour faire excuter cette srie d'instructions, il ne suffirait plus qu' appeler la fonction faireClignoterLED ().
81
montrerValeurCapteur () Dans le cadre de notre projet, la sous-routine que nous avons cre a t nomme montrerValeurCapteur. Il ne s'agit pas d'une fonction pr-existante, et nous en avons choisi le nom (qui aurait pu tre mangerDesFrites (), par exemple). Jetons un il en dtail cette fonction :
void montrerValeurCapteur () { // instructions excuter ici }
D'abord, le void sert indiquer que notre fonction ne retourne aucune valeur (voir chapitre Programmer Arduino ). Ensuite, nous indiquons le nom donn la fonction suivi de parenthses. Comme notre fonction n'utilise pas de paramtres ou n'a pas de variable ou valeur en entre pour dterminer son fonctionnement, il ne se trouve rien entre les parenthses. Finalement, nous crirons les instructions excuter pour cette fonction entre les accolades :
valeurCapteur = analogRead (pinCapteur);
Celle ligne de code contient la fonction analogRead (). Celle-ci permet de lire la pin de la carte Arduino correspondant la valeur de pinCapteur (0). Puisqu'il s'agit d'une entre analogique, les valeurs possibles que analogRead () peut retourner se situent entre 0 et 1023, correspondant un voltage entre 0 et 5 V. L'oprateur = permet d'assigner la valeur retourne par analogRead notre variable valeurCapteur. Ainsi, et pour la suite du programme ou jusqu' ce qu'il y a un changement, valeurCapteur contiendra la valeur de la lecture du capteur.
Serial.println (valeurCapteur);
Notre deuxime instruction permet d'envoyer par communication srielle la valeur qui est contenue dans notre variable valeurCapteur au logiciel Arduino, travers le cble USB. La fonction Serial.println () comporte valeurCapteur comme paramtre, ce qui lui spcifie quoi imprimer. Serial.print () et Serial.println () se distingue par le fait que la deuxime fonction ajoute un retour de charriot (CR) dans son message, ce qui fait qu' chaque envoi de valeur au moniteur sriel, par exemple, un changement de ligne sera effectu. Il est noter que dans le cas de communication avec d'autres interfaces ou logiciels, il est parfois prfrable d'utiliser Serial.print () pour n'envoyer que la donne demande, sans le caractre CR supplmentaire.
DEUXIME TAPE
Dans cette deuxime tape, nous travaillerons sur la partie moteur de ce projet. Nous connecterons le servomoteur l'Arduino et une valeur de position alatoire lui sera envoye afin de vrifier notre montage.
Schma et montage
Voici la suite du schma que nous allons raliser :
82
Pour raliser ce montage, il vous faut connecter le servomoteur la carte Arduino. Celui-ci comporte trois fils de couleurs habituellement rouge, noire et jaune (parfois blanc). Le fil noir doit tre connect la pin GND, le fil rouge dans la pin 5 V (section power) de la carte et le fil jaune ou blanc doit tre connect la pin 9 de la carte. Les fils rouge et noir servent fournir l'alimentation au servomoteur. Le fil jaune sert recevoir un signal PWM qui sera envoy par l'Arduino afin de positionner le servomoteur. Il est important de noter que pour ce projet, il n'y a qu'un seul moteur branch la carte et utilisant la puissance 5 V qui provient du rgulateur de la carte Arduino (qui l'obtient par le port USB). Dans une situation o il vous serait tent de contrler plusieurs moteurs, il serait ncessaire de concevoir un systme de puissance supplmentaire (voir chapitre Prcautions d'usage ).
Programme
Copiez maintenant le programme suivant dans la fentre de programmation Arduino.
#include <Servo.h> // inclure la librairie pour l'utilisation des servomoteurs Servo servo1; // crer l'objet "servo1" pour rfrer notre servomoteur // ********************** // dfinition des variables int pinCapteur = 0; // variable pour dsigner quelle pin de l'Arduino est utilise pour le capteur int valeurCapteur = 0; // variable pour contenir la valeur du capteur. int servoPos = 0; // variable pour contenir et spcifier la position en degrs (0-180) void setup() { Serial.begin(9600); // tablir la connexion srielle 9600 baud pinM ode(pinCapteur, INPUT); // dfinir la pin 0 comme une entre (pinCapteur) servo1.attach(9); // associer la PIN 9 au servomoteur } void loop() { // montrerValeurCapteur(); // delay(20); // laisser un cours dlai pour viter le trop-plein d'informations testerServoM oteur(); } void testerServoM oteur() { while (1==1) { servoPos = random(181); // attribuer une valeur alatoire comprise entre 0 et 180 servoPos servo1.write(servoPos); // spcifier la position au servomoteur delay(2000); // attendre 2 secondes } } void montrerValeurCapteur() {
83
valeurCapteur = analogRead(pinCapteur); // lire la pin analogique et mettre la valeur dans valeurCapteur Serial.println(valeurCapteur); // communiquer au moniteur sriel la valeur du capteur. }
Vous pouvez maintenant sauvegarder votre sketch sous un autre nom (afin de conserver le prcdent) et tlcharger le code sur la carte Arduino. Aprs quelque temps, le servomoteur devrait se mettre bouger de manire alatoire, changeant sa position toutes les deux secondes. Voyons plus en dtail les lments du code qui ont t ajouts au code existant. Inclusion de librairie La premire ligne d'instruction de notre programme est maintenant change. En effet, pour utiliser des servomoteurs avec l'Arduino, il est possible d'utiliser une librairie (voir chapitre Bibliothques externes ). Pour inclure une librairie dans notre programme, nous utilisons la commande suivante :
#include <Servo.h>
le #include spcifie au programme d'inclure la librairie dont le nom se situe entre les <> . L'usage spcifique de Servo.h ncessite la cration d'un objet qui nous permettra de rfrer certaines fonctions de la librairie. Pour notre projet, nous intitulerons cet objet servo1. Encore une fois, ce nom est dtermin par le programmeur et aurait bien pu tre maurice.
Servo servo1;
Dclaration des variables servoPos Nous ajoutons notre code la variable servoPos. Celle-ci contiendra la valeur de position spcifie pour le servomoteur. Configuration (setup) servo1.attach (9) ; Une nouvelle instruction de configuration est ajoute notre boucle setup (). L'instruction *.attach () permet d'associer une pin de la carte Arduino un objet servo cr plus haut. Ainsi, notre objet servo1 se voit associer la pin 9 par cette instruction. Boucle principale (loop) Notre boucle de programme principal doit maintenant changer. Nous voulons maintenant attribuer des positions alatoires notre moteur. Plutt que de simplement supprimer les instructions existantes nous permettant de communiquer la valeur du capteur, nous les mettrons sous forme de commentaire. Pour ce faire, il suffit d'ajouter au dbut de l'instruction // .
// montrerValeurCapteur (); // delay (20); // laisser un cours dlai pour viter le trop-plein d'informations
Ceci rendra inactive les instructions, et au cas o nous voudrions les retrouver, il ne suffirait que de supprimer les // . Nous devons galement maintenant ajouter une nouvelle fonction que nous dfinirons plus loin. testerServoMoteur (); Sous-routines (testerServoMoteur) T out comme pour la fonction montrerValeurCapteur de l'tape 1, nous devons dfinir testerServoMoteur. Nous utilisons encore void en dbut d'instruction puisque la fonction ne retourne rien. Voyons les instructions qui figurent dans notre nouvelle fonction.
while (1==1) { xxxx }
84
La fonction while est une fonction conditionnelle qui permet de rpter une srie d'instructions tant qu'une condition est teste comme vraie. Par exemple, nous pourrions avoir une condition o notre programme fait mettre un bruit d'alarme l'Arduino tant qu'un bouton d'arrt n'aurait pas t enclench : while (bouton==pas enclench) { faire sonner l'alarme }. La fonction est while (). La condition tester est un paramtre qui se trouve entre les parenthses, et la srie d'instructions rpter se trouve entre les accolades (l o se trouvent xxxxx dans notre exemple plus haut). Dans notre projet, la fonction while nous sert plutt ici crer une boucle infinie, donc qui se rpte tout coup. La condition tant teste est 1==1. Puisque 1 sera toujours gal 1, notre condition est toujours vraie et les instructions se rpteront tout coup. Il est noter que l'oprateur == est distinguer du = . L'oprateur == sert faire des comparaisons, et retournera une valeur logique, 1 correspondant vrai et 0 faux, tandis que le l'oprateur = sert attribuer une valeur une variable (dans x = 45, x prendra la valeur 45). Les trois instructions contenues dans notre boucle while sont les suivantes :
servoPos = random (181); servo1.write (servoPos); delay (2000);
servoPos = random (181); La fonction random () retourne une valeur alatoire. Celle-ci se situe entre 0 et le paramtre spcifi, de manire exclusive, ce qui signifie, par exemple, qu'un paramtre de 181 fera en sorte que la random () retourne une valeur entre 0 et 180. Comme la position que peut prendre notre servomoteur est comprise entre 0 et 180 en termes de degrs, nous gnrons dans cette instruction une valeur alatoire approprie. servo1.write (servoPos); T out comme pour xxx.attach (), la fonction xxxx.write () provient de la librairie Servo.h. Elle nous permet ainsi de spcifier au servomoteur li l'objet servo1 la position en degrs qu'il doit atteindre. La variable servoPos fournit ici la valeur de cette position. delay (2000); Afin de laisser un certain intervalle de temps entre chaque mouvement du servomoteur, nous ajoutons un dlai de 2 secondes (2000 millisecondes).
TROISIME TAPE
Dans cette troisime tape, nous tablirons un lien entre la partie capteur et la partie moteur . Lorsqu'une main ou un doigt s'approche du capteur, il cre une ombre sur le capteur. Cette ombre devrait faire fuir le capteur fix au servomoteur (si la cellule photorsistive n'est pas fixe la tte du moteur, vous devrez le faire maintenant). Il n'y a pas de montage supplmentaire excuter. Le tout se joue au niveau du programme. Quelques ajustements aux valeurs seront peut-tre ncessaires afin de corriger le comportement de la petite bte qui a peur, puisque la flexibilit du systme entrane galement une certaine instabilit (ce qui est recherch pour donner l'impression de la peur !).
Programme
Copiez maintenant le programme suivant dans la fentre de programmation Arduino.
#include <Servo.h> // inclure la librairie pour l'utilisation des servomoteurs Servo servo1; // crer l'objet "servo1" pour rfrer notre servomoteur // ********************** // dfinition des variables int pinCapteur = 0; // variable pour dsigner quelle pin de l'Arduino est utilise pour le capteur int valeurCapteur = 0; // variable pour contenir la valeur du capteur. int servoPos = 0; // variable pour contenir et spcifier la position en degrs (0-180) int capteurBase = 0; // variable pour contenir la valeur de base du capteur (sans ombre) void setup() { Serial.begin(9600);// tablir la connexion srielle 9600 baud pinM ode(pinCapteur, INPUT); // dfinir la pin 0 comme une entre (pinCapteur) servo1.attach(9); // associer la PIN 9 au servomoteur
85
determinerCapteurBase(); // trouver la valeur de base du capteur. } void loop() { // montrerValeurCapteur(); // testerServoM oteur(); modifierPosSelonCapteur(); // lire la pin du capteur et mettre dans valeurCapteur. decroitreServoPos(); // faire decrotre "la peur" de la petite bete. servo1.write(servoPos); // assigner la position du servomoteur qui a ete changee delay(20); } void modifierPosSelonCapteur() { int difference = 0; // dclarer variable locale pour calculer difference valeurCapteur = analogRead(pinCapteur); // lire la pin du capteur et mettre dans valeurCapteur difference = capteurBase - valeurCapteur; // calculer l'cart entre valeur actuelle et la base difference = max(difference, 0); // limiter diffrence 0 (pas de chiffre ngatif) /* pour dbugger les valeurs et comprendre ce qui se passe Serial.print(valeurCapteur); Serial.print(" - "); Serial.print(capteurBase); Serial.print(" -- "); Serial.println(difference); // imprimer diffrence pour debug */ servoPos = min ( servoPos + difference, 180) ; // modifier la valeur de position du servo } void determinerCapteurBase() { servo1.write(0); // positionner le moteur la position de dpart delay(2000); // laisser le temps au moteur de se placer capteurBase = analogRead(pinCapteur); // assigner la lecture actuelle capteurBase } void decroitreServoPos() { servoPos = max ( servoPos - 10, 0); // faire dcroitre servoPos } void testerServoM oteur() { while (1==1) { servoPos = random(181); // attribuer une valeur alatoire comprise entre 0 et 180 servoPos servo1.write(servoPos); // spcifier la position au servomoteur delay(2000); // attendre 2 secondes } } void montrerValeurCapteur() { while (1==1) { valeurCapteur = analogRead(pinCapteur); // lire la pin analogique et mettre la valeur dans valeurCapteur Serial.println(valeurCapteur); // communiquer au moniteur sriel la valeur du capteur. } }
Voici les ajouts faits ce programme. Dclaration des variables capteurBase Nous ajoutons notre code cette variable qui nous permettra de garder en mmoire la valeur de base du capteur. Celle-ci nous sera utile pour calculer l'cart entre la valeur mesure en temps rel (donc affecte par l'ombre que cre le doigt ou la main qui s'approche) et celle de base, sans ombre. Configuration (setup)
86
dans la configuration du programme. Boucle principale (loop) Notre boucle de programme principal doit encore une fois changer. Nous mettons d'abord sous commentaires les fonctions lies la prise d'information et au test moteur, soit montrerValeurCapteur () et testerServoMoteur (). Ensuite, nous ajoutons les fonctions qui nous servirons analyser le capteur et modifier la position du servomoteur en fonction de celle-ci, soit modifierPosSelonCapteur () et decroitreServoPos (). Finalement, nous ajoutons l'instruction servo1.write (servoPos) afin de spcifier l'objet servo1 la position telle qu'elle a t modifie par le programme. L'instruction du delay (20) permet un certain espacement entre les lectures et assignations moteur. Sous-routines Nous ajoutons trois sous-routines notre programme :
void determinerCapteurBase() { servo1.write(0); delay(2000); capteurBase = analogRead(pinCapteur); }
Cette fonction sert d'abord initialiser la position du moteur avec servo1.write (0). Ensuite, il faut faire attendre le programme 2 secondes avec delay (2000) pour laisser le temps au moteur de se positionner. Finalement, le programme fera une lecture du capteur avec analogRead (pinCapteur) pour assigner cette valeur la variable capteurBase. Nous utiliserons cette variable pour calculer l'cart entre une lecture sans ombre et une lecture avec l'ombre projete par la main ou le doigt.
void modifierPosSelonCapteur() { int difference = 0; valeurCapteur = analogRead(pinCapteur); difference = capteurBase - valeurCapteur; difference = max(difference, 0); servoPos = min ( servoPos + difference, 180); }
Cette fonction a la particularit de contenir une dclaration de variable, l'instruction int difference = 0. Habituellement rserve la premire section du programme, une dclaration de variable faite l'intrieur d'une sous-routine cre ce qu'on appelle une variable locale. Ceci signifie que la variable n'existera que dans le contexte d'excution de la fonction ou sousroutine dans lequel elle se situe. Par consquent, aucune autre fonction ou sous-routine ne pourrait faire usage de la variable difference. Par opposition, les variables qui sont dclares au tout dbut du programme sont considres comme globale, c'est dire qu'elles existent et sont accessible toutes les fonctions ou autre routines. La seconde instruction de cette sous-routine assigne valeurCapteur la lecture de la pin lie au capteur. Ensuite, nous calculons la diffrence entre la valeur du capteur sans ombre contenu dans capteurBase et celle avec ombre (ou sans) de valeurCapteur. Finalement, comme il est possible que la diffrence nous retourne une valeur ngative (dans le cas o il y aurait eu une illumination, par exemple, nous limitons la valeur de diffrence un minimum de 0. Bien que cela semble contre-intuitif, nous utilisons dans ce cas la fonction max () . Celle-ci prend en paramtre deux valeurs (en l'occurrence difference et 0) et retournera celle des deux qui sera la plus leve. Ainsi, si difference = -5, max (difference, 0) retournera 0, puisque ce chiffre est plus lev que -5. Par contre, si difference = 10, la fonction retournera 10. Nous assignons la valeur retourne par max () difference.
87
La dernire instruction de cette sous-routine nous sert incrmenter, si c'est le cas, la valeur de servoPos. Nous assignons ainsi servoPos sa valeur actuelle en y ajoutant la diffrence calcule prcdemment : servoPos + difference. La raison pour laquelle nous ajoutons la diffrence la valeur actuelle est pour conserver une certaine continuit dans la position du moteur et une accumulation de la valeur de celle-ci travers le temps. Ce code, puisqu'il prend en compte la diffrence, fait en sorte qu'un mouvement brusque, traduit comme une grande diffrence entre les deux lectures, augmentera grandement la position du servomoteur, gnrant une impression de peur . l'inverse, une approche trs douce et lente reprsentant une faible diffrence n'aura qu'un impact mineur sur la position du servomoteur, qui semblera plus calme . Comme il n'est pas possible de donner une valeur suprieure 180 au servomoteur (ou la fonction servo1.write () ), nous devons limiter l'incrmentation de servoPos. Pour ce faire, nous utilisons la fonction min () qui s'excute l'inverse de max (). Ainsi, elle prendra le plus bas des deux chiffres en paramtres pour le retourner. Donc, dans min (servoPos + difference, 180) , si l'addition de servoPos et diffrence est suprieure 180, le chiffre 180 sera retourn, autrement ce sera le rsultat de l'addition qui sera pris en compte.
void decroitreServoPos () { servoPos = max (servoPos - 10, 0); }
La dernire sous-routine que comporte notre programme permet au servomoteur de retourner vers son point de base, le degr 0. Comme servoPos s'incrmente graduellement avec les ombres, il faut galement doter notre petite bte d'une tendance revenir, ou dit autrement, faire dcroitre servoPos. L'instruction qui accomplit ceci est servoPos = servoPos 10. La valeur 10 est soustraite de servoPos et le rsultat est stock dans la mme variable. Le choix de 10 ici est plus ou moins arbitraire et peut tre ajust, dans la mesure o une valeur plus faible (3, par exemple) fera dcroitre beaucoup plus lentement servoPos et une valeur plus leve fera revenir l'inverse la petite bte beaucoup plus rapidement. Nous devons galement nous assurer de ne pas aller en dessous de 0, puisqu'il s'agit de la position en degrs du servomoteur. Il faut donc utiliser, comme dcrit prcdemment, la fonction max ().
88
20. OSCILLOSCOPE
Ce projet va vous permettre de raliser un oscilloscope minimaliste et d'exprimenter la communication srie avec un autre logiciel que celui d'Arduino, en l'occurrence, Processing. Un oscilloscope permet de visualiser les variations d'une tension dans le temps, sous forme d'une courbe. Le principe de fonctionnement de ce projet est le suivant : L'Arduino mesure une tension sur une entre analogique. Il transmet la valeur de cette entre l'ordinateur via la communication srie travers le port USB. Le programme processing rcupre la donne transmise et l'affiche sous forme de courbe.
Prcautions
L'oscilloscope ainsi ralis ne sera capable de mesurer que des tensions comprises entre 0 et 5 V. Pour mesurer des tensions plus importantes, ou des courants, il sera ncessaire d'ajouter des circuits supplmentaires comme un pont diviseur de tension, ou une rsistance (voir chapitre Les bases de l'lectronique ).
lments ncessaires
Le logiciel Processing 1, logiciel libre de programmation graphique, sera ncessaire pour crer l'interface de visualisation. Vous pouvez parcourir le flossmanual 2 de ce logiciel. T outefois, vous serez guid pour raliser ce projet sans avoir besoin de l'tudier.
Montage lectronique
Comme expliqu ci-dessus, le montage se rsume deux fils connects l'Arduino, qui vont servir mesurer un autre montage soumis une tension variable. Un des fils sera connect au pin GND , qui correspond au 0 V. Le second sera connect au pin Analog in 0. Les extrmits libres vont servir faire les contacts avec le circuit msurer.
PREMIRE TAPE
Copiez le programme suivant dans Arduino.
/* Ce programme consiste simplement mesurer l'entre analogique 0, et transmettre le rsultat via une communication srie. Il ressemble beaucoup au programme dcrit dans la premire tape du projet "la petite bte qui a peur". */ //dclaration des variables //stockage du numro de Pin o sera branch l'entre de la mesure int PinDeM esure=0; //conteneur pour stocker la mesure int tension=0; // dlai entre deux mesures int periodeDeM esure=20; void setup(){ // Initialisation du programme // tablir la connection srie 19200 baud Serial.begin(19200); // dfinir le PinDeM esure comme une entre pinM ode(PinDeM esure, INPUT); }
89
void loop() { //boucle principale tension = analogRead(PinDeM esure); // Lit la tension du pin DeM esure et stocke le rsultat dans la variable tension Serial.println(tension); // communique la valeur de la tension au port srie delay(periodeDeM esure); //attendre jusqu' la prochaine mesure }
Aprs avoir compil et tlcharg ce programme dans la carte Arduino, en ouvrant le moniteur sriel, on pourra voir apparatre les mesures successives dfiler. Les valeurs varient entre 0 et 1023 quand la tension aux pointes de touches varie entre 0 et 5 V.
DEUXIME TAPE
Aprs avoir tlcharg et install Processing, copiez le programme suivant dans Processing. Vous ne devriez tre pas trop dpays par l'interface, car Processing et Arduino sont des programmes frres.
/* oscilloscope minimaliste avec un arduino rcupre les valeurs via une liaison serie */ import processing.serial.*; // importation de la librairie de communication serie //variables Serial maConnection; // Cre un objet de communication srie int tension=0; // variable ou sera stocke la valeur de la tension //affichage int fenetreTemps=12000; // temps pour parcourir la largeur de l'cran en millisecondes int x=0; int y=0; void setup() { size(650, 400); // taille de l'ecran String NomDuPort = Serial.list()[0]; // rcupre la premire interface serie trouve println("connection a "+NomDuPort); maConnection = new Serial(this, NomDuPort, 19200); // cration de la connexion srie background(255); // fond d'cran blanc smooth(); // lisser les dessins strokeWeight(2); // largeur de trait stroke(40); // couleur du trait gris } void draw() { //boucle de dessin principale //rien ne s'y passe, tout est gr dans la fonction serialEvent } void serialEvent (Serial maConnection) { // si des donnes arrivent par la connexion srie String retour=maConnection.readStringUntil('\n'); // lit la donne jusqu' la fin de ligne if (retour != null) { //si le retour n'est pas vide retour = trim(retour); // enlever les espaces tension = int(retour); // converti le texte en nombre entier } //dtermination du X actuel int oldx=x; x=(millis()% fenetreTemps)*width/fenetreTemps; if (oldx>x) { //reprise au debut de l'cran oldx=0; background(255); //fond d'cran blanc } //determination de la valeur de Y int oldy=y; y=int(map(tension, 0, 1023, 380, 20)); // mise l'chelle de la tension pour entrer dans l'cran line(oldx, oldy, x, y); // dessine le trait }
Pour excuter le programme, il suffit de cliquer sur le bouton play . Vrifiez auparavant que le moniteur sriel du programme Arduino est bien ferm, sans quoi la communication avec Processing ne voudra pas s'initialiser. En effet, la communication srielle avec l'Arduino est exclusive, ce qui signifie qu'un seul programme la fois peut ouvrir et communiquer sur un port sriel avec l'Arduino. En fermant le moniteur sriel, la connexion srielle est ferme et ainsi libre pour une autre application. Il est possible d'utiliser plusieurs ports sriels diffrents (notamment avec les pin digitales de l'Arduino) pour tablir plusieurs connexions avec diffrents logiciels. Le programme, en s'excutant affichera la fentre suivante :
90
La courbe affiche dpend du circuit que vous mesurez avec l'oscilloscope. Si vous n'avez rien de spcial mesurer, vous pouvez essayer avec un potentiomtre, en prenant la mesure sur sa patte du milieu, et en reliant les deux autres bornes respectivement au GND et au 5 V.
91
21. PERROQUET
Dans ce projet nous allons raliser un systme qui permet d'enregistrer et rpter des sries dimpacts effectus sur un objet. Pour cela nous allons utiliser un capteur pizolectrique qui permet de mesurer une vibration qui se propage dans un matriau. Pour information, ce capteur peut aussi servir de petite enceinte pour produire des sons. Pour afficher l'information enregistre par le programme nous utiliserons une LED.
PREMIRE TAPE
Pour commencer, votre pizo doit tre nu, et la pastille mtallique doit tre fixe sur un support tel quune table avec un bout de ruban adhsif qui le maintient en pression contre votre support. Nous devons ensuite choisir notre rsistance pour rgler la nervosit de la rponse de notre capteur. Il faut savoir que plus la rsistance utilise est grande, plus le capteur produira une rponse lente, l'inverse, plus la rsistance est faible plus le capteur nous donnera une rponse rapide. Pour bien comprendre ces notions nous allons raliser le montage de notre pizo et afficher les valeurs captes sur notre ordinateur. Cette tape nous permettra de bien choisir notre rsistance ainsi que de bien comprendre l'utilisation de ce capteur.
Schma et montage
Programme
////////// Dclaration des variables const int CAPTEUR = A0; // le pizo est connect la broche Analogue 0 int lectureCapteur = 0; // variable pour stocker la valeur du capteur ////////// Initialisation void setup() { Serial.begin(9600); // configurer le port srie }
92
////////// Boucle principale void loop() { // lecture de la valeur du pizo lectureCapteur = analogRead(CAPTEUR); // envoi de la valeur l'ordinateur if (lectureCapteur > 0) // fera s'afficher toute valeur suprieure zro { Serial.println(lectureCapteur, DEC); } }
DEUXIME TAPE
Nous devons maintenant introduire au code deux nouvelles fonctions. La premire nous permettra de dterminer partir de quelle valeur analogique capte nous considrons que le capteur dtecte un impact. Cette fonction est un seuil qui nous permettra de mesurer le temps coul entre chaque impact. La deuxime fonction (ANTIREBOND) que nous devons introduire est une fonction de filtrage qui nous permettra d'viter que le programme enregistre plusieurs impacts lorsqu'un seul impact est donn. Pour mesurer le temps, nous utiliserons la fonction millis() qui nous permet de connatre tout moment le temps coul depuis le dmarrage du programme.
////////// Dclaration des variables const int CAPTEUR = A0; // le Piezo est connect la pin Analogue 0 int lectureCapteur = 0; // variable pour stocker la valeur du capteur const int LED = 13; // LED connecte la broche digital 13 const int SEUIL = 1; // choix du seuil de dtection const int ANTIREBO ND = 600; // choix du filtre anti-rebond long temps = 0; // variable pour mmoriser le temps ////////// Initialisation void setup() { pinM ode(LED, O UTPUT); // dfinir la pin associe LED comme sortie Serial.begin(9600); // configurer le port srie } ////////// Boucle principale void loop() { // lecture de la valeur du Piezo lectureCapteur = analogRead(CAPTEUR); // si la valeur capte est suprieure au seuil choisi et // que le temps coul depuis le dernier impacte est // suprieur au temps de l'ANTI-REBO ND, // alors on rentre dans la condition if (lectureCapteur >= SEUIL && millis() - temps >= ANTIREBO ND) { // envoi de l'information l'ordinateur Serial.println("impact"); temps = millis(); // mise jour du temps courant } else { // on ne fait rien } }
La constante SEUIL vous permet de supprimer les parasites ventuellement prsents dans le signal capt. Plus la valeur de cette constante est leve, plus il faudra taper fort pour dclencher l'enregistrement de l'impact. La constante ANTIREBOND dfinit un temps durant lequel la lecture de l'entre Analogique n'est pas active. Ce temps permet de filtrer le signal d'entre car le capteur peut produire plusieurs signaux pour un seul impact. L'ide est donc d'enregistrer le premier signal et de fermer la lecture pendant un court instant pour ne pas enregistrer les signaux rsiduels.
Dans le programme ci-dessus nous avons utilis un oprateur logique &&. Cet oprateur nous a permis d'introduire plusieurs conditions la fonction if(), puisque nous voulions que T OUT ES les conditions soient vraies pour que les instructions s'excutent. Seul (vrai && vrai) retourne une valeur vraie, alors que (vrai && faux) et (faux && vrai) retournent tous deux faux. Ci-dessous loprateur logique && (et) nous permet de rentrer dans la fonction if() seulement si les deux conditions sont vraies.
if (lectureCapteur >= SEUIL && millis () - temps >= ANTIREBO ND) { ... }
Ci-dessous loprateur logique || (ou) nous permet de rentrer dans la fonction if() si l'une ou l'autre des conditions est vraie.
if (marqueurTemps [posTableau] == 0 || posTableau == NO M BREM ARQ UEURS) { ... }
TROISIME TAPE
Dans cette tape nous allons implmenter un mcanisme qui va nous permettre de formaliser notre scnario d'utilisation qui comporte deux modes diffrents : le MODE COUT E et le MODE JEUX. Cette troisime tape introduit aussi plusieurs astuces pour que le programme puisse fonctionner dans son ensemble notamment un concept permettant de dfinir les conditions de passage d'un mode un autre ainsi que l'ajout d'une LED facilitant la visualisation les impacts enregistrs puis re-jous.
////////// Dclaration des variables // ces variables sont constantes const int LED = 13; // LED connecte la pin digitale 13 const int CAPTEUR = A0; // Piezo connect la pin Analogue 0 const int SEUIL = 1; // seuil de dtection du capteur const int ANTIREBO ND = 200; // filtre anti-rebond const int FIN = 2000; // temps pour dfinir la fin du mode coute const int NO M BREM ARQ UEURS = 50; // nombre maximum de marqueurs temps // ces variables changent int lectureCapteur = 0; // valeur du capteur int ledEtat = LO W; // tat de la LED int mode = 1; // mode coute (1) ou jeux (2) int posTableau = 0; // Position dans le tableau long temps = 0; // variable pour mmoriser le temps long marqueurTemps[NO M BREM ARQ UEURS]; // tableau pour mmoriser les temps qui sparent chaque impacte int i = 0; // variable pour parcourir la liste boolean DEBUG = false; boolean BO UCLE = false; void setup() { pinM ode(LED, O UTPUT); Serial.begin(9600); } // activer ou non le DEBUG // TO DO // dclarer la pin en sortie // configurer le port srie
////////// Boucle principale void loop() { switch(mode) { case 1: // mode enregistrement if(DEBUG == true) Serial.println("mode 1"); // envoie du mode // lecture de la valeur du capteur Piezo lectureCapteur = analogRead(CAPTEUR); // si la valeur capte est suprieure au seuil choisi et // que le temps coul depuis le dernier impacte est suprieur au temps de l'ANTIREBO ND // alors on rentre dans la condition if (lectureCapteur >= SEUIL && millis() - temps >= ANTIREBO ND) { marqueurTemps[posTableau] = millis() - temps; // digitalWrite(LED, HIG H); // activer la broche de la LED delay(5); // atendre 10 milisegonde digitalWrite(LED, LO W); // teindre la broche de la LED // on memorise le temps coul entre chaque impacte posTableau++; // on incrmente la position temps = millis(); // initialisation } // si le temps coul depuis le dernier impact est suprieur // au temps dit de FIN et que plus de deux impacts sont enregistrs
94
// alors on rentre dans la condition if (millis() - temps >= FIN && posTableau >= 2) { posTableau = 0; // initialiser la position mode = 2; // choisir le mode 2 if (DEBUG == true) Serial.println("mode 2"); // envoie du mode temps = millis(); // initialisation du temps } break; // sortir du mode 1
case 2: // mode de jeux // lecture de la valeur du capteur Piezo lectureCapteur = analogRead(CAPTEUR); // si la valeur du capteur est suprieure au seuil // alors on entre dans la condition puisque l'usager rejoue if (lectureCapteur >= SEUIL) { // on efface toutes les valeurs du tableau for (i=0; i<NO M BREM ARQ UEURS; i++) { marqueurTemps[i] = 0; } posTableau = 0; // initialiser la position mode = 1; // choisir le mode 1 if (DEBUG == true) Serial.println("mode 2 stop"); // envoie du mode temps = millis(); // initialisation du temps break; // sortir du mode 2 } // // // if { digitalWrite(LED, HIG H); delay(5); digitalWrite(LED, LO W); posTableau++; temps = millis(); } // // // if si la valeur de temps stocke dans le tableau est nulle ou que nous arrivons la fin du tableau alors on entre dans la condition ( marqueurTemps[posTableau] == 0 || posTableau == NO M BREM ARQ UEURS ) { for (i=0; i<NO M BREM ARQ UEURS; i++) { // on efface toutes les valeurs du tableau marqueurTemps[i] = 0; } posTableau = 0; // initialiser la position mode = 1; // changer de mode if(DEBUG == true) Serial.println("mode 2 end"); // envoie du mode temps = millis(); // initialisation du temps // sortir du mode 2 // // // // // activer la broche de la LED attendre 5 milisegonde teindre la broche de la LED on incrmente la position initialisation du temps si la valeur de temps stocke dans le tableau n'est pas nulle et que cette valeur de temps est dpasse par le conteur millis() alors on entre dans la condition ( marqueurTemps[posTableau] != 0 && millis() - temps >= marqueurTemps[posTableau] )
} break; } }
Ce programme peut sembler complexe et comporte une multitude de fonctions. Pour dmystifier ces mcanismes, voici quelques explications supplmentaires.
LES TABLEAUX
Nous allons tout d'abord revenir sur les tableaux. Nous avons utilis un tableau nomm marqueurTemps pour stocker les valeurs de temps qui sparent chacun des impacts. Notre tableau est un conteneur qui permet de stocker une liste de variables. Pour utiliser un tableau, nous devons tout dabord le dclarer au mme niveau que les variables (voir chapitre Programmer Arduino ). Ensuite nous dfinissons le nombre de variables qu'il comporte avec la constante NOMBREMARQUEURS.
const int NO M BREM ARQ UEURS = 50; // nombre maximum de marqueurs temps long marqueurTemps [NO M BREM ARQ UEURS]; // tableau pour mmoriser les temps
Pour crire une valeur dans une case du tableau nous devons utiliser deux variables, soit une pour choisir la position dans le tableau o nous souhaitons enregistrer celle-ci (posTableau) et une pour la valeur inscrire (val). Nous allons ici crire la valeur 127 dans la deuxime case du tableau :
int posTableau = 2; // initialisation de posTableau 2 long val = 127; // initialisation de val 127 marqueurTemps [Position] = valeur;
95
Pour accder la valeur que nous avons stocke dans la deuxime case du tableau, nous devons encore utiliser deux variables, soit une variable de position (posTableau) et une variable pour contenir la valeur que nous souhaitons lire (val).
int posTableau = 2; // initialisation de posTableau 2 int val = 0; // initialisation de val 0 val = marqueurTemps [posTableau];
FONCTION DEBUG
Quand vous devez crire un programme, il est bon de laisser les lignes de code qui vous ont permises de dbuger votre programme. Cependant comme ces lignes de code utilisent des ressources processeur pour transmettre les informations sur le port srie, il faut pouvoir les dsactives quand le programme doit fonctionner normalement. Pour cela vous pouvez utiliser des variables boolennes qui vous permettront d'activer ou pas le mode DEBUG du programme.
if(DEBUG == true) Serial.println("mode 1"); // envoie du mode
Si la condition est crite sur une seule ligne les accolades ne sont pas ncessaires.
96
MTHODOLOGIE
22. MISE EN UVRE 23. DBUGGER 24. LA CONNECTIQUE 25. D COMME DBROUILLE
97
De l'ide la ralisation
Chacun d'entre nous possde des connaissances plus ou moins pointues en lectronique et en programmation. Certains ont une sensibilit artistique et souhaitent acqurir des comptences techniques pour traduire leurs ides. D'autres souhaitent certainement acqurir des connaissances techniques pour pouvoir imaginer de nouveaux projets. Quand vous dbutez avec Arduino, il est prfrable de dcouvrir le domaine en partant de votre projet. Celui-ci vous servira de fil conducteur pour aller glaner des ressources qui vous permettront de matriser de nouvelles connaissances. Savoir traduire une ide ou un concept en des termes technologiques et informatiques n'est pas toujours facile. En nonant vos ides de manire modulaire, vous commencerez peu peu dtailler, par exemple, les diffrentes fonctions qui pourraient composer votre code ou les diffrentes parties qui constitueraient votre circuit lectronique.Voici un petit guide en tapes pour vous aider :
1. Concept et idation
Dcrivez quelles sont vos intentions, de manire gnrale. Le projet : en quoi consiste-t-il ? Que doit-il voquer ? Comment se comporte-t-il ? L'utilisateur : comment peut-il interagir avec l'objet ? Quelle est la dure ? Y'a-t-il un dbut et une fin ? Combien de personnes peuvent interagir/utiliser en mme temps le projet ?
98
En appliquant ces rgles simples, vous pourrez ainsi : Vous rfrer, lors de la programmation, vos intentions et vrifier si vous les avez appliqu de manire adquate. Plus facilement transfrer certains lments de votre projet vers un autre environnement de production, de programmation ou mme d'autre circuits lectroniques. Faire une liste et avoir une ide gnrale de vos tches en programmation et en lectronique; de plus, ceci constituera une bonne manire de demeurer cohrent dans votre dmarche en testant d'abord sur papier ce que vous programmerez par la suite.
IMPLMENTATION
L'implmentation concerne autant le code que le matriel physique. Implmenter un concept, c'est le rendre concret.
L'OUTILLAGE
Il vous faudra pour commencer mettre en uvre votre projet un minimum d'outils qui vous aiderons dans chacune des tapes du projet. Les principaux outils sont les suivants : une platine d'essai, du fil conducteur, un fer souder, une pompe dessouder, des tournevis, une petite pince prcelle et une pince coupante, une troisime main, et de l'tain.
99
Il vous faudra tout d'abord rassembler les composants dont vous avez besoin pour raliser votre montage sur une platine d'essai. Cette tape sous-entend que vous ayez dj dfini une ou plusieurs solutions et souhaitez maintenant passer la ralisation. il existe un grand nombre de fournisseurs de composants lectroniques (cf. le chapitre Ressources externes dans la section Annexe) Vous pouvez galement rcuprer de nombreux composants sur des pices d'quipement usages. De vieilles radios, imprimantes, tlviseurs et jouets foisonnent de pices lectroniques que vous pourrez utiliser dans vos projets (cf. D comme dbrouille).
LE MONTAGE
Quand vous devez raliser un projet avec Arduino, la premire tape consiste raliser son montage sur une platine d'essai aussi appele breadboard. Une platine d'essai est un support qui comporte des petits trous dans lesquels vous allez pouvoir positionner vos composants ainsi que des fils qui vous permettront de raliser votre circuit lectrique. lintrieur de votre platine, il faut imaginer qu'il y a des chemins dj existants que nous pouvons voir dans le dessin ci-dessous.
ce stade, les connections doivent tre faites avec des fils lectriques mono-brin dont l'aspect est rigide. Par prcaution vous pouvez utiliser votre voltmtre pour tester la continuit des connexions qui vous semble dfectueuses. Pour cela il faut utiliser la fonction test de continuit symbolise par un logo qui illustre des ondes sonores. Aprs ltape de prototypage sur platine d'essai il faut, en fonction des exigences de votre projet, raliser un circuit plus solide qui pourra rsister l'utilisation que vous souhaitez en faire. La premire solution consiste souder vos composants sur une plaque de prototypage comportant des lignes de cuivre et des trous.
100
Une attention particulire est apporter la connexion de la batterie ou de lalimentation lectrique car un faux contact ce niveau est particulirement risqu pour votre montage. Dans le cas de l'utilisation de batteries tel que les lithium-ion cela peut aller jusqu provoquer une explosion. Soyez prudent !
LA SOUDURE
Souder n'est pas sorcier. Voici quelques conseils pour raliser une belle soudure. Cette tape intervient seulement aprs avoir test votre montage sur une platine d'essai. La soudure l'tain vous permettra de souder vos fils et composants. L'tain de soudure comporte gnralement du plomb, il faudra donc viter linhalation des vapeurs de soudure. Il existe aussi de l'tain sans plomb, mais cet tain est plus difficile souder car la temprature du fer doit tre plus importante. T out d'abord, il faut tamer son fer, c'est--dire enduire la panne (bout du fer) avec de l'tain puis la nettoyer sur une ponge humide pour enlever le surplus d'tain. Votre pane doit tre brillante. Il vous faut ensuite positionner vos composants du ct non cuivr de votre plaque de prototypage, l'utilisation d'une troisime main pour maintenir la plaque est plus comfortable. Bien install, vous pouvez alors commencer par chauffer la zone o vous souhaitez dposer votre point de soudure (2 4 secondes) puis faire l'apport de soudure l'intersection entre le bout de la panne et la patte du composant. Il faut que votre soudure soit en forme de chapiteau et ne forme pas une boule sur la plaque.
LE CIRCUIT IMPRIM
un stade plus avanc du projet il est d'usage de raliser un circuit imprim en utilisant le procd de gravure chimique. Cette tape ncessite un outillage adapt ainsi que la connaissance d'un logiciel de routage comme Keykad pour raliser votre circuit et y souder vos composants. Ce travail vous permettra par exemple de raliser vos extensions (shield) pour la carte Arduino. Cette dmarche intervient lorsque vous souhaitez donner votre projet une forme plus solide et durable. Il existe plusieurs socits qui pourront raliser pour vous ces cartes communment appeles PCB (Printed Circuit Board). Lors de l'utilisation de priphriques tels que des capteurs et actionneurs, vous allez certainement avoir besoin de positionner ces composants distance de votre carte pour qu'ils puissent remplir leur fonction. Pour cela, il vous faudra utiliser des fils lectriques de prfrence multi-brins qui pourront, contrairement aux fils mono-brins, se plier et se manipuler sans se sectionner.
101
23. DBUGGER
La ralisation de projets avec Arduino comporte une grande part d'essais et d'erreurs. Que ce soit pour la partie lectronique ou pour la programmation, il est frquent pour les dbutants, mais aussi pour les plus avancs, de faire des erreurs. Or, alors que celles-ci sont parfois trs faciles dtecter, elles sont plus souvent caches et demandent tre dcouvertes. Voil pourquoi une bonne pratique de la programmation et de la conception de circuits est de mise (voir chapitres Prcautions d'utilisation et Bien structurer son code ).
En programmation
Lorsqu'un problme survient ou que les choses ne se droulent pas comme attendu, il est important d'identifier le problme en utilisant une approche mthodique et logique. Pour les problmes de programmation, une pratique courante est de valider les diffrentes parties de code sparment, pour identifier la ou les parties du code qui occasionnent une anomalie. Pour ce faire, il est facile de mettre sous commentaire des sections compltes d'instructions en utilisant /* et */. Ensuite, il est important de prendre connaissance de l'tat de nos variables, capteurs et autres. Utiliser la fonction Serial.println () pour faire afficher dans le moniteur sriel nos valeurs est trs utile, et peut-tre combin avec des caractres nous indiquant o le Arduino se trouve dans le code. Par exemple le code suivant :
int valeurCapteur = 0; void setup() { Serial.begin(9600); } void loop() { // afficher qu'on lit le capteur Serial.print("lire capteur : "); // lire capteur et afficher valeurCapteur = analogRead(3); Serial.println(valeurCapteur); // vrifier si capteur est gal 5 if (valeurCapteur=5) { Serial.println("test russi!"); } delay(1000); }
Ce programme devrait imprimer test russi si la valeur du capteur est 5. L'utilisation d'un Serial.print() avec du texte ( lire capteur : ) nous permet de prcder l'affichage de la valeur du capteur par un lment indiquant au niveau de la console quoi correspond le chiffre qui sera affich. Remarquez le fait que nous utilisons Serial.print() pour afficher le texte et rester sur la mme ligne d'affichage, puis le Serial.println() pour afficher la valeur et ensuite changer de ligne. Notre programme comporte galement un dlai d'une seconde. Ceci nous donne le temps de voir les informations affiches au moniteur. Autrement, les chiffres dfileraient trop rapidement. Attention ! En ajoutant des dlais, il est aussi possible de perdre la bonne excution du programme dans son temps. Par exemple, des capteurs qui fournissent une rponse rapide (l'impact avec un pizo, par exemple) fournissent une information qui se droule dans un trs cours laps de temps. Ainsi, pendant que le programme attend avec delay(), il est possible que l'vnement que nous cherchons observer se soit dj droul !
102
Lorsque nous copions ce programme, le compilons et l'excutons, il ne fonctionne pas comme prvu ! Il contient dlibrment un erreur. Mme si le moniteur affiche une valeur diffrente de 5 pour le capteur, il affiche test russi . Pourquoi ? Analysons le problme. Nous pouvons tre suffisamment certains que la valeur du capteur est bien lue, et qu'elle module en fonction des manipulations physiques que nous ferions sur celui-ci. Si ce n'tait pas le cas, le problme rsiderait alors dans le capteur lui-mme ou la connexion entre la carte Arduino et le capteur, mais comme dans le cadre de cette simulation, la valeur du capteur est reprsentative du phnomne physique, notre problme se situe ailleurs. Quelles instructions suivent celui de l'affichage de la valeur du capteur ? L'nonc conditionnel if (valeurCapteur=5). Nous pouvons tre suffisamment certains que la valeur du capteur n'est pas 5 en observant le moniteur sriel, mais, tout de mme, la condition semble ralise puisqu'il affiche test russi . Comme aucune autre instruction ne modifie valeurCapteur, il doit forcment y avoir quelque chose qui cloche avec la fonction if(). Si vous tes incapable de trouver quoi, une bonne pratique est de se rfrer l'aide offerte par le programme (Help > Reference) (ou Ctrl+Maj+F en surlignant le mot clef recherch) afin de valider la bonne utilisation de la fonction, la syntaxe, etc. En observant la condition valeurCapteur=5, nous observons ainsi que nous nous sommes tromp d'oprateur ! Un = attribue la valeur la variable qui se trouve sa gauche. L'oprateur que nous aurions d utiliser devrait plutt tre == , qui retourne un vrai si les deux valeurs compares sont quivalentes et un faux si elles ne le sont pas. Comme notre condition tait une assignation, elle ne retournait pas faux et entranait l'excution des instructions comprises dans le if(). Que doit-on retenir de cet exemple ? Lorsqu'on dbugge un programme, il faut toujours avoir une approche modulaire, c'est--dire aborder chaque lment du code ou du circuit indpendamment des autres et s'assurer de son bon fonctionnement. Cette vrification doit galement tre faite de manire squentielle, ou en ordre. On part soit de l'lment physique, pour remonter vers le circuit, puis vers l'Arduino, puis vers le programme. Ou l'inverse. Un autre exemple : Un capteur contrle l'activation d'un moteur. Rien ne marche ! Docteur, que faire ? Vrifier Vrifier Vrifier Vrifier Vrifier Vrifier Vrifier Vrifier que le capteur ne soit pas physiquement endommag. que le capteur soit bien connect son circuit. que tous les composants du circuit soit bien connects. que la connexion au Arduino est bonne. que la donne est bien lue et l'afficher dans le moniteur. les manipulations qui sont faites sur les variables ou la valeur du capteur. que ces valeurs sont envoyes correctement au moteur. que le moteur est bien connect et non endommag.
travers toutes ces tapes, il est possible de tester hors du contexte du programme les lments. Par exemple, pour tester que le moteur rpond bien, il est possible de crer un nouveau petit programme temporaire pour ne tester que le moteur. Souvent, utiliser des exemples fournis dans le menu File ou le menu Help est utile, puisque ces exemples ne contiennent pas d'erreur en thorie.
En lectronique
Le mme principe s'applique en lectronique et avec l'lectricit. Analyser chaque circuit, ou chaque partie de circuit, ou chaque composant, de manire modulaire nous permettra didentifier un composant grill, un circuit mal configur, etc. tout en prenant soin d'avoir d'abord vrifi que notre source d'alimentation est d'abord sous tension ! L'outil par excellence pour dbugger est bien videmment le multimtre (voir chapitre Les bases de l'lectronique ).
103
24. LA CONNECTIQUE
La connectique regroupe toutes les techniques lies aux connexions physiques des liaisons lectriques ainsi que des transmissions de donnes, c'est--dire les connecteurs et prises 1.
Connectique exotique
Pour les plus tmraires, il existe aussi des solutions plus originales pour raliser des circuits sur des matriaux tels que le textile ou le papier en utilisant des fibres et encres conductrices qui peuvent tre cousues ou dposes la main. L'association du textile et de llectronique est une pratique mergente. Des matriaux techniques tel que les textiles et fibres conductrices ouvrent de nombreuses perspectives dans le domaine de la mode et du design textile. La carte Arduino est une porte ouverte sur l'exprimentation de ces matriaux qui permettent de revisiter llectronique traditionnelle pour la rendre plus proche de nos pratiques. Aborder llectronique par le tissage ou la couture peut aussi tre une manire de revaloriser des savoir-faire plus traditionnels. 1. http://fr.wikipedia.org/wiki/Connectique^
104
LE CIRCUIT BENDING
Le circuit bending est une pratique qui passe aussi par la rcupration et le dtournement d'objets. Cette pratique, qui se traduit par torsion de circuit , consiste dtourner et modifier les circuits lectroniques d'une varit d'objets pour en faire un usage autre que celui auquel ils sont normalement destins. Par exemple, faire des courts-circuits sur le circuit lectronique d'un jouet pour produire de la musique. Le circuit bending est pratiqu sur tous les types de signaux analogiques, qu'il s'agisse d'un signal vido, lectrique ou audio. Cette pratique originale est une manire de dcouvrir llectronique par l'exprimentation. Certains praticiens utilisent l'Arduino dans le but d'autonomiser la frquence et le rythme des courts circuits l'aide de relais lectriques transformant l'objet dtourn en squenceur musical, d'autres utilisent des signaux vidos pour les utiliser comme gnrateur audio. D'autres encore vont gnrer directement des signaux lectriques et les injecter dans le circuit d'un objet pour provoquer des comportements erratiques ou bien utiliser des consoles de jeux comme boites rythme et synthtiseurs.
LA RCUPRATION
La rcupration de composants sur des objets usags est un bon moyen de se procurer la plupart des pices ncessaires la ralisation de vos montages lectroniques. partir du moment o vous serez apte identifier les composants lectroniques de base que l'on peut trouver dans les objets de rcupration tels que les vieux jouets, ordinateurs, imprimantes, etc, ceux-ci pourraient devenir pour vous une source importante de matires premires. L'exemple de la RepRap nous montre que les scanners et imprimantes peuvent nous fournir des moteurs et pices mcaniques pour raliser une imprimante 3D, par exemple. Les blocs d'alimentation que l'on peut trouver dans les tours d'ordinateurs seront trs pratiques pour alimenter vos montages. Les fils lectriques que l'on peut trouver lintrieur des ordinateurs sont aussi des matriaux de bonne qualit qui vous permettront de connecter vos capteurs et actionneurs (voir chapitre La connectique ). L'conomie que vous raliserez n'est alors pas ngligeable et par le fait mme vous viterez que ces pices ne se retrouvent tout simplement la poubelle.
CAPTEURS MAISON
Il est possible de fabriquer des capteurs soi-mme avec des matriaux simples et faciles trouver. En tudiant le fonctionnement d'un capteur industriel, on peut constater que la plupart des appareils utilisent des principes physiques familiers et accessibles. Par exemple, un potentiomtre est gnralement compos d'une bande de matire rsistive sur laquelle se dplace un contacteur qui doit tre connect la broche analogue de la carte Arduino. La rsistance du potentiomtre augmente mesure que le courant passe par une quantit plus grande de matire rsistive.
105
Nous pouvons par exemple reproduire ce principe avec une trace de crayon-gris dpose sur du papier en guise de rsistance sur laquelle nous dplacerons un fil lectrique connect une entre analogique de l'Arduino. Les deux extrmits de la trace devront tre connectes aux bornes positives et ngatives de l'Arduino. Nous pouvons aussi utiliser une feuille de papier noir dont la couleur est gnralement fabrique partir du carbone pour obtenir le mme effet. Pour raliser un simple interrupteur, nous pouvons utiliser deux feuilles de papier aluminium, pour fabriquer un lectro-aimant de faible intensit, il est possible d'enrouler du fil de cuivre autour d'un clou, etc. De nombreux exemple de ce type sont consultables sur le site internet Instructables : www.instructables.com
106
ANNEXES
26. S4A : UN PROJET PDAGOGIQUE 27. GLOSSAIRE 28. RESSOURCES EN LIGNE
107
Pour en savoir plus : scratch.mit.edu. llk.media.mit.edu. L'extension S4A a t dveloppe par Marina conde, Victor Casado, Joan Gell, Jose Garca et Jordi Delgado du Media Lab Citilab en Espagne aid par le Smalltalk Programming Group. Cette extension permet de programmer des instructions que la carte d'interfaage Arduino peut excuter et ce depuis une GUI Scratch laquelle les crateurs ont ajout des fonctions spcifiques la carte Arduino. En effet, le principe d'criture d'un programme avec Scratch et S4A consiste emboter des blocs classs en code-couleur qui correspondent des instructions programmatiques : fonctions, variables, oprations, lecture de fichiers imports (images, sons). S4A prsente donc des nouveaux blocs destins uniquement une programmation d'interactivit entre des capteurs et des actionneurs via une carte Arduino.
108
INSTALLER S4A
1. 2. 3. 4. Se rendre sur le site http://seaside.citilab.eu/ l'onglet Download . Veiller ce que l'IDE Arduino soit installe dans les applications de votre ordinateur. T lcharger le Firmware dvelopp par le Citilab. Depuis l'IDE Arduino, configurer le port USB qui communique entre la carte Arduino et votre ordinateur et slectionner la version de la carte Arduino que vous utilisez. 5. Charger le Firmware dans la carte d'interfaage Arduino (ce Firmware est un programme Arduino crit par le Citilab destin traduire les programmes S4A afin que l'extension S4A et la carte Arduino puissent communiquer). 6. T lcharger et installer l'extension S4A.
Il se peut que S4A affiche une fentre Arduino 1 comme le visuel ci-dessous. Il s'agit d'accepter la connexion entre l'application S4A et la carte Arduino. Slectionnez Use connection of sprite - Arduino1 et cliquez sur Accept .
109
Quand le drapeau vert est press signifie quand nous avons compil le programme et que nous l'excutons . Rpter indfiniment correspond la fonction pr-enregistre dans Processing draw soit le programme est excut en boucle jusqu' ce que l'on appuie sur stop pour arrter la lecture en boucle. A value attribuer Analog1 sensor : ici nous avons d'abord dclar une variable nomme value (ceci s'est fait en cliquant sur l'onglet rouge Variables en haut gauche de l'interface S4A puis en cliquant sur Nouvelle Variable ) puis nous attribuons cette variable value la valeur numrique traduite du capteur LDR connect la carte Arduino et que nous avons nomm Analog1 car ce capteur est connect sur le port (pin) A0. N.B. : sur notre carte Arduino, les ports d'entres/sorties analogiques sont nommes de A0 A5 (par exemple pour une carte de type Duemilanove). Sur l'interface de l'application S4A, ces ports sont traduits en commenant 1, c'est--dire que le port A0 de la carte correspond la nomination Analog1 , le port A1 Analog2 , etc. Nous pouvons lire les valeurs numriques traduites du capteur dans le tableau de lecture qui apparat par dfaut dans l'interface de S4A (ci-dessous) :
Ensuite est intgre dans l'excution en boucle du programme la structure conditionnelle si et sinon : si la valeur attribue notre variable value est infrieure (800), nous envoyons l'instruction on au port digital 13 de la carte Arduino, celui-la mme sur lequel nous avons connect la LED : donc la LED s'allumera. Sinon, nous envoyons l'instruction off et la LED restera teinte.
110
Nous pouvons ds lors modifier notre programme en cliquant sur la valeur (800) et en entrer une autre pour paramtrer notre programme en fonction de la luminosit ambiante. Nous pouvons aussi connecter d'autres capteurs de lumire et LED la carte Arduino et rajouter des instructions de lecture : dans l'onglet Mouvement , choisir par exemple digital 13 on et en cliquant sur la flche de droulement d'items, slectionner (10) ou (11) pour rajouter sur les ports de la carte des LED sur les ports 10 et 11. Et enfin, nous pouvons aussi importer un nouvel objet dans S4A comme un visuel d'une crature fantastique et programmer ses actions sur la scne (background) en fonction de capteurs (bouton, potentiomtre, flexible, etc.) pour le faire jouer nous mme. Amusez-vous bien !
111
27. GLOSSAIRE
Ce chapitre prsente les dfinitions d'une srie de termes techniques lis Arduino, la programmation et l'lectronique.
Actionneurs
Les actionneurs sont des composants matriels, qui une fois correctement connects votre carte Arduino, permettent d'agir sur le monde extrieur. Ceux-ci ont comme rle de convertir une valeur lectrique en action physique.
Arduino
Arduino est une plate-forme libre de cration d'objets lectroniques compose d'un appareil d'entre-sortie configurable (dnomm un micro-contrleur) et d'un environnement de programmation.
Baud
Le Baud est l'unit de mesure du nombre de symboles transmissibles par seconde lors d'une communication srielle.
Baudrate
Mesure du baud.
Bibliothque
Une bibliothque est un ensemble de fonctions utilitaires, regroupes et mises disposition des utilisateurs d'Arduino.
Capteurs
Les capteurs sont des composants matriels, qui une fois correctement connect votre carte Arduino, peuvent fournir des informations sur le monde extrieur. Ceux-ci ont comme rle de saisir une grandeur physique et de la convertir en sortie informationnelle. Veuillez vous rfrer au chapitre Introduction a l'lectronique pour plus d'information.
Circuit imprim
Un circuit imprim est un support, en gnral une plaque, permettant de relier lectriquement un ensemble de composants lectroniques entre eux, dans le but de raliser un circuit lectronique.
Diple
Un diple lectrique est un composant lectrique qui possde deux bornes. La tension aux bornes du diple est reprsente par uD et lintensit par iD.
Fil mono/multi-brin
Le cuivre est le mtal le plus utilis pour faire des fils et cbles lectriques, car il a une excellente conductivit lectrique. On l'utilise soit en fil de section cylindrique mono-brin (rigide), soit en section toujours cylindrique mais multi-brins (souple).
112
Environnement de dveloppement intgr (EDI) est un programme regroupant un ensemble d'outils pour le dveloppement de logiciels. Un EDI regroupe un diteur de texte, un compilateur, des outils automatiques de fabrication, et souvent un dbogueur.
Inductance
L'inductance dun circuit lectrique est un coefficient qui traduit le fait quun courant le traversant cre un champ magntique travers la section entoure par ce circuit. Il en rsulte un flux du champ magntique travers la section limite par ce circuit.
LED
Une LED ou DEL (en franais), ou encore diode lectroluminescente, est un composant optolectronique capable dmettre de la lumire lorsquil est parcouru par un courant lectrique. Il est important de noter que les LED laissent passer le courant que dans un seul sens, on parle de polarit des deux pattes 1 , une positive (+) et une ngative (-).
Librairie
Angliscisme pour Bibliothque. Voir Bibliothque.
Longueur d'onde
La distance parcourue par londe au cours dune priode.Une onde est un phnomne physique se propageant et qui se reproduit identique lui-mme un peu plus tard dans le temps et un peu plus loin dans lespace.
Moniteur seriel
Le moniteur sriel est un lment de l'environnement de programmation Arduino. Il permet de recevoir et envoyer des messages en communication srielle partir de l'ordinateur. (voir chapitre Prise en main rapide ).
Multiplexeurs
Un multiplexeur (abrviation : MUX) est un circuit permettant de concentrer sur une mme voie de transmission diffrents types de liaisons (informatique, tlcopie, tlphonie) en slectionnant une entre parmi N.
Oscilloscope
Un oscilloscope est un instrument de mesure destin visualiser un signal lectrique, le plus souvent variable au cours du temps. Il est utilis par de nombreux scientifiques afin de visualiser soit des tensions lectriques, soit diverses autres grandeurs physiques pralablement transformes en tension au moyen d'un convertisseur adapt.
Panne
Embout en mtal l'extrmit du fer souder qui en chauffant, permet de faire fondre lteint.
PCB
En anglais printed circuit board , voir circuit imprim.
Pin
Il s'agit des ports de l'Arduino. Ce sont les broches qui permettent de connecter des fils la carte. Le terme est aussi utilis dans le langage de programmation pour rfrer ces ports physiques. Certaines pin servent l'entre d'information et d'autres la sortie.
113
Platine d'essai
Une platine d'essai est un support, le plus souvent en plastique, qui comporte des petits trous dans lesquels vous allez pouvoir positionner vos composants ainsi que des fils qui vous permettrons de raliser votre circuit lectrique.
Platine de prototypage
Une platine est une plaque en poxyde ou en baklite (plastique synthtique) qui comporte des troues et des lignes de cuivres permettant d'y souder des composants pour former circuit.
Servomoteur
Moteur qui peut recevoir des informations de positionnement et les atteindre de manire autonome. Voir Chapitre Les bases de l'lectronique .
Shield
Carte comprenant un circuit complexe qui se connecte directement l'Arduino et qui assure une fonction spcifique (communication internet, lecture de mp3, etc).
Utilitaires
Un utilitaire (aussi appel programme ou logiciel utilitaire) est un petit logiciel accomplissant une tche ou un groupe de tches associes sur quipement. Il est conu pour aider grer et rgler une pice d'quipement informatique, un systme d'exploitation, un logiciel ou dans notre cas un micro-contrleur. 1. Notez qu'il existe des LED avec plus de deux pattes qui sont capables de changer leur couleur. ^
114
115
lectronique
Llectronique est une branche de la physique applique traitant surtout de la gestion des signaux lectrique. Avoir un minimum de connaissances dans cette matire est obligatoire pour travailler avec Arduino. Quelques cours en lectronique sur Internet : Cours d'lectronique rdigs par des enseignants de Marseille : sitelec.org/cours.htm. Cours pour les dbutants et les curieux : www.elektronique.fr. Cours d'lectronique, d'lectricit et de montage de circuit : www.zonetronik.com. Cours d'lectronique pour construire son propre robot : www.positronlibre.com/cours/electronique/cours-electronique.php. Nomenclature et description des composant lectroniques sur interface-z : www.interface-z.com/conseils/nomenclature.htm.
La robotique
Un robot est un dispositif alliant mcanique, lectronique et informatique accomplissant automatiquement des tches. Les cartes Arduino rentrent dans la fabrication de certains d'entre eux. Des liens pour en savoir plus : La page Robotique de lencyclopdie Wikipedia : fr.wikipedia.org/wiki/Robotique. Des projets pour raliser des robots wifi avec Arduino : robot.aspi.free.fr. Site consacr au modlisme et la robotique : www.rc-bot.com. Ressources pour l'enseignement technologique : www.technologuepro.com. En cherchant sur la toile, vous pouvez trouver des kits pour raliser vos robots avec Arduino.
116