{"id":3031,"date":"2016-06-20T13:35:05","date_gmt":"2016-06-20T12:35:05","guid":{"rendered":"http:\/\/telefab.fr\/?p=3031"},"modified":"2026-04-30T17:33:59","modified_gmt":"2026-04-30T15:33:59","slug":"projet-developpement-lescalier-musical","status":"publish","type":"projet","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/projet\/projet-developpement-lescalier-musical\/","title":{"rendered":"Projet d\u00e9veloppement: L&rsquo;escalier musical"},"content":{"rendered":"<p><strong>Description<\/strong><\/p>\n<p>Dans le cadre du projet d\u00e9veloppement, nous avons r\u00e9aliser un dispositif \u00e0 installer sur un escalier, dispositif qui \u00e9met des notes de musique lorsqu&rsquo;une personne emprunte l&rsquo;escalier.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2016\/06\/Photo-escalier-musical.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-3033 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2016\/06\/Photo-escalier-musical-300x225.png\" alt=\"Photo escalier musical\" width=\"300\" height=\"225\" \/><\/a>L&rsquo;escalier musical<\/p>\n<p>&nbsp;<\/p>\n<p>L&rsquo;objectif est de favoriser l&rsquo;utilisation de l&rsquo;escalier traditionnel au d\u00e9triment de l&rsquo;escalier m\u00e9canique, afin de promouvoir l&rsquo;activit\u00e9 physique dans notre soci\u00e9t\u00e9. L&rsquo;aspect fatiguant des escaliers traditionnels est remplac\u00e9 par un aspect ludique gr\u00e2ce \u00e0 la musique, ce qui favorise son utilisation.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Mat\u00e9riel utilis\u00e9<\/strong><\/p>\n<ul>\n<li>1 Raspberry Pi B<\/li>\n<li>3 cartes Arduino UNO<\/li>\n<li>2 \u00e9metteurs radio FS1000A (433 MHz)<\/li>\n<li>1 r\u00e9cepteur radio XY-MK-5V<\/li>\n<li>4 modules de d\u00e9tection US-HC-SR04<\/li>\n<li>1 lecteur de tag RFID RC522<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Fonctionnement<\/strong><\/p>\n<p>L&rsquo;\u00e9l\u00e9ment pr\u00e9pond\u00e9rant de l&rsquo;escalier musical est la d\u00e9tection de l&rsquo;usager. Pour se faire, nous utilisons les modules de d\u00e9tection ultrason US-HC-SR04 qui, gr\u00e2ce au principe d&rsquo;\u00e9mission-r\u00e9flexion des ondes ultrasonores fournissent en continu la distance entre le capteur et un obstacle. Lorsque personne ne passe, cet obstacle est le mur oppos\u00e9, et lorsqu&rsquo;un obstacle se situe \u00e0 une distance inf\u00e9rieure \u00e0 un seuil, il s&rsquo;agit de la jambe d&rsquo;un passant et il faut donc \u00e9mettre un son.<\/p>\n<p>Cette t\u00e2che incombe \u00e0 un Raspberry Pi mod\u00e8le B qui, gr\u00e2ce au programme Python pr\u00e9sent\u00e9 en Annexe, \u00e9met un son lorsqu&rsquo;il re\u00e7oit l&rsquo;information correspondant \u00e0 une marche.<\/p>\n<p>Cette information transite entre le capteur ultrason et le Raspberry Pi par ondes radio gr\u00e2ce aux \u00e9metteurs FS1000A et au r\u00e9cepteur XY-MK-5V. Nous utilisons pour cela la librairie VirtualWire.<\/p>\n<p>Les \u00e9metteurs sont chacun branch\u00e9s \u00e0 une carte Arduino UNO, o\u00f9 sont \u00e9galement branch\u00e9s deux modules de d\u00e9tection. Ainsi, chaque \u00e9metteur transmet les informations correspondant \u00e0 deux capteurs. Celles-ci sont r\u00e9cup\u00e9r\u00e9es par le r\u00e9cepteur XY-MK-5V, branch\u00e9 \u00e0 une carte Arduino UNO, elle-m\u00eame reli\u00e9e au Raspberry Pi. Le code des cartes Arduino UNO \u00e9mettrice et r\u00e9ceptrice est pr\u00e9sent\u00e9e en Annexe.<\/p>\n<p>De plus, un lecteur de tag RFID est reli\u00e9 \u00e0 la carte Arduino UNO r\u00e9ceptrice, afin de permettre aux membres de T\u00e9l\u00e9com Bretagne de changer l&rsquo;instrument jou\u00e9 gr\u00e2ce \u00e0 leur badge. Les librairies SPI et MFRC522 sont utilis\u00e9es pour cette t\u00e2che.<\/p>\n<p>Le sch\u00e9ma suivant illustre le principe de fonctionnement de l&rsquo;escalier:<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2016\/06\/Sch\u00e9ma-escalier.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3032 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2016\/06\/Sch\u00e9ma-escalier-300x169.png\" alt=\"Sch\u00e9ma escalier\" width=\"371\" height=\"209\" \/><\/a><\/p>\n<p><strong>Annexe<\/strong><\/p>\n<p>Code Python impl\u00e9ment\u00e9 \u00e0 ex\u00e9cuter par le Raspberry Pi:<\/p>\n<blockquote><p>#serial est une biblioth\u00e8que qui permet la lecture des donn\u00e9es provenant du port s\u00e9rie<\/p>\n<p>#pygame est une biblioth\u00e8qye dont le module mixer permet de jouer des fichiers .mp3<\/p>\n<p><strong>import<\/strong> serial<strong>,<\/strong> pygame<strong>.<\/strong>mixer<\/p>\n<p>&nbsp;<\/p>\n<p>#initialisation du mixer<\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>init<strong>()<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>#initialisation de la connexion s\u00e9rie<\/p>\n<p>ser<strong>=<\/strong>serial<strong>.<\/strong>Serial<strong>(<\/strong>&lsquo;\/dev\/ttyACM1&rsquo;<strong>,<\/strong>9600<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>#la boucle sera ex\u00e9cut\u00e9e \u00e0 l&rsquo;infini<\/p>\n<p><strong>while<\/strong> 1<strong>:<\/strong><\/p>\n<p>#on r\u00e9cupp\u00e8re la valeur provenant du port s\u00e9rie<\/p>\n<p>newIncome <strong>=<\/strong> ser<strong>.<\/strong>readline<strong>()<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p># si c&rsquo;est un instrument, on d\u00e9fini la variable instrument comme l&rsquo;instrument correspondant<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong>&lsquo;piano\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>instrument <strong>=<\/strong> &lsquo;piano&rsquo;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong>&lsquo;trompette\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>instrument <strong>=<\/strong> &lsquo;trompette&rsquo;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong>&lsquo;coeur\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>instrument <strong>=<\/strong> &lsquo;coeur&rsquo;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong>&lsquo;batterie\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>instrument <strong>=<\/strong> &lsquo;batterie&rsquo;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong>&lsquo;piano2\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>instrument <strong>=<\/strong> &lsquo;piano2&rsquo;<\/p>\n<p>&nbsp;<\/p>\n<p>#si c&rsquo;est une note de musique, on la joue gr\u00e2ce au module pygame.mixer<\/p>\n<p>#les notes sont contenues dans un dossier dont le nom correspond \u00e0 l&rsquo;instrument dont elles sont issues<\/p>\n<p><strong>if<\/strong> newIncome<strong>==<\/strong> &lsquo;A\\r\\n&rsquo; <strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/la.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong> start <strong>=<\/strong>0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;B\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/si.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong> start <strong>=<\/strong>0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;C\\r\\n&rsquo; <strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/do.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong> start <strong>=<\/strong>0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong>&lsquo;D\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/re.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong> start <strong>=<\/strong>0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;E\\r\\n&rsquo; <strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/mi.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong> start <strong>=<\/strong>0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;F\\r\\n&rsquo; <strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/fa.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong>start <strong>=<\/strong> 0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;G\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>load<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/sol.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong>start <strong>=<\/strong> 0.1<strong>)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>elif<\/strong> newIncome <strong>==<\/strong> &lsquo;c\\r\\n&rsquo;<strong>:<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>&lsquo;\/home\/pi\/Music\/%s\/DO.mp3&rsquo;<strong>+<\/strong>instrument<strong>)<\/strong><\/p>\n<p>pygame<strong>.<\/strong>mixer<strong>.<\/strong>music<strong>.<\/strong>play<strong>(<\/strong>loops<strong>=<\/strong>0<strong>,<\/strong>start <strong>=<\/strong> 0.1<strong>)<\/strong><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>Code de la carte Arduino UNO \u00e9mettrice:<\/p>\n<blockquote><p>include <strong>&lt;<\/strong>VirtualWire<strong>.<\/strong>h<strong>&gt;<\/strong><\/p>\n<p>\/* virtualWire est une librairie libre de droit permettant l&rsquo;utilisation<\/p>\n<p>des modules de transmission-r\u00e9ception radio*\/<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ initialisation des pins<\/p>\n<p>int trig1 <strong>=<\/strong> 12<strong>;<\/strong><\/p>\n<p>int echo1 <strong>=<\/strong> 11<strong>;<\/strong><\/p>\n<p>int trig3<strong>=<\/strong>8<strong>;<\/strong><\/p>\n<p>int echo3<strong>=<\/strong>7<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ instanciation des variables utiles<\/p>\n<p>long lecture_echo1<strong>;<\/strong><\/p>\n<p>long cm1<strong>;<\/strong><\/p>\n<p>long lecture_echo3<strong>;<\/strong><\/p>\n<p>long cm3<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/messages qui seront envoy\u00e9s, \u00e0 changer d&rsquo;une carte \u00e0 l&rsquo;autre (msgStringD et msgStringE par exemple pour envoyer D et E)<\/p>\n<p>String msgStringG<strong>;<\/strong><\/p>\n<p>String msgStringF<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>void setup<strong>()<\/strong><strong>{<\/strong><\/p>\n<p>\/\/ param\u00e9trage des capteurs<\/p>\n<p>pinMode<strong>(<\/strong>trig1<strong>,<\/strong> OUTPUT<strong>);<\/strong><\/p>\n<p>digitalWrite<strong>(<\/strong>trig1<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n<p>pinMode<strong>(<\/strong>echo1<strong>,<\/strong> INPUT<strong>);<\/strong><\/p>\n<p>pinMode<strong>(<\/strong>trig3<strong>,<\/strong> OUTPUT<strong>);<\/strong><\/p>\n<p>digitalWrite<strong>(<\/strong>trig3<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n<p>pinMode<strong>(<\/strong>echo3<strong>,<\/strong> INPUT<strong>);<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/initialisation de la communication via le port s\u00e9rie (USB)<\/p>\n<p>Serial<strong>.<\/strong>begin<strong>(<\/strong>9600<strong>);<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>\u00ab\u00a0setup transmitter 1 \u00ab\u00a0<strong>);<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/initialisation de la communication par radio<\/p>\n<p>vw_setup<strong>(<\/strong>2000<strong>);<\/strong><\/p>\n<p>vw_set_tx_pin<strong>(<\/strong>2<strong>);<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/code qui sera r\u00e9p\u00e9t\u00e9 ind\u00e9finiment<\/p>\n<p>void loop<strong>()<\/strong><strong>{<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ r\u00e9cup\u00e9ration de la distance cm1 du capteur 1 \u00e0 l&rsquo;obstacle<\/p>\n<p>digitalWrite<strong>(<\/strong>trig1<strong>,<\/strong> HIGH<strong>);<\/strong><\/p>\n<p>delayMicroseconds<strong>(<\/strong>10<strong>);<\/strong><\/p>\n<p>digitalWrite<strong>(<\/strong>trig1<strong>,<\/strong> LOW<strong>);<\/strong><\/p>\n<p>lecture_echo1 <strong>=<\/strong> pulseIn<strong>(<\/strong>echo1<strong>,<\/strong> HIGH<strong>);<\/strong><\/p>\n<p>cm1 <strong>=<\/strong> lecture_echo1 <strong>\/<\/strong> 58<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ r\u00e9cup\u00e9ration de la distance du capteur 3 \u00e0 l&rsquo;obstacle<\/p>\n<p>digitalWrite<strong>(<\/strong>trig3<strong>,<\/strong>HIGH<strong>);<\/strong><\/p>\n<p>delayMicroseconds<strong>(<\/strong>10<strong>);<\/strong><\/p>\n<p>digitalWrite<strong>(<\/strong>trig3<strong>,<\/strong>LOW<strong>);<\/strong><\/p>\n<p>lecture_echo3<strong>=<\/strong>pulseIn<strong>(<\/strong>echo3<strong>,<\/strong>HIGH<strong>);<\/strong><\/p>\n<p>cm3 <strong>=<\/strong> lecture_echo3 <strong>\/<\/strong> 58<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/* si la distance de l&rsquo;obstacle au capteur est inf\u00e9rieure \u00e0 115cm et que c&rsquo;est la premi\u00e8re fois que l&rsquo;obstacle<\/p>\n<p>est detect\u00e9, on envoie l&rsquo;information correspondant au capteur *\/<\/p>\n<p><strong>if<\/strong><strong>(<\/strong> cm1 <strong>&lt;<\/strong> 115 <strong>&amp;&amp;<\/strong> msgStringF <strong>!=<\/strong> \u00ab\u00a0F\u00a0\u00bb <strong>&amp;&amp;<\/strong> cm1 <strong>!=<\/strong> 0 <strong>)<\/strong><strong>{<\/strong><\/p>\n<p>\/\/traitement des donn\u00e9es<\/p>\n<p>msgStringF <strong>=<\/strong> \u00ab\u00a0F\u00a0\u00bb<strong>;<\/strong> \/*ces valeurs seront \u00e0 changer en cas de changement de carte*\/<\/p>\n<p>const char<strong>*<\/strong> msg <strong>=<\/strong> msgStringF<strong>.<\/strong>c_str<strong>();<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ envoi des donn\u00e9es par radio<\/p>\n<p>vw_send<strong>((<\/strong>uint8_t <strong>*)<\/strong>msg<strong>,<\/strong>strlen<strong>(<\/strong>msg<strong>));<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>\u00ab\u00a0envoy\u00e9\u00a0\u00bb<strong>);<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ sinon, on r\u00e9initialise les valeurs<\/p>\n<p><strong>else<\/strong><strong>if<\/strong><strong>(<\/strong> cm1 <strong>&gt;=<\/strong> 115<strong>)<\/strong><strong>{<\/strong><\/p>\n<p>msgStringF <strong>=<\/strong> \u00ab\u00a00\u00a0\u00bb<strong>;<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ le principe est identique pour le second capteur<\/p>\n<p><strong>if<\/strong><strong>(<\/strong>cm3 <strong>&lt;<\/strong> 115 <strong>&amp;&amp;<\/strong> msgStringG <strong>!=<\/strong> \u00ab\u00a0G\u00a0\u00bb <strong>&amp;&amp;<\/strong> cm3<strong>!=<\/strong> 0<strong>){<\/strong><\/p>\n<p>msgStringG <strong>=<\/strong> \u00ab\u00a0G\u00a0\u00bb<strong>;<\/strong><\/p>\n<p>const char<strong>*<\/strong> msg <strong>=<\/strong> msgStringG<strong>.<\/strong>c_str<strong>();<\/strong><\/p>\n<p>vw_send<strong>((<\/strong>uint8_t <strong>*)<\/strong>msg<strong>,<\/strong>strlen<strong>(<\/strong>msg<strong>));<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>\u00ab\u00a0envoy\u00e9\u00a0\u00bb<strong>);<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p><strong>else<\/strong><strong>if<\/strong><strong>(<\/strong> cm3 <strong>&gt;=<\/strong> 115 <strong>)<\/strong><strong>{<\/strong><\/p>\n<p>msgStringG <strong>=<\/strong> \u00ab\u00a00\u00a0\u00bb<strong>;<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>delay<strong>(<\/strong>200<strong>);<\/strong><\/p>\n<p><strong>}<\/strong><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>Code de la carte Arduino UNO r\u00e9ceptrice:<\/p>\n<blockquote><p>#include &lt;VirtualWire.h&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>\/*<\/p>\n<p>* SPI et MFRC522 sont deux biblioth\u00e8ques qui permettent la gestion<\/p>\n<p>* du lecteur RFID<\/p>\n<p>*\/<\/p>\n<p>#include &lt;SPI.h&gt;<\/p>\n<p>#include &lt;MFRC522.h&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/configuration des pins du lecteur RFID<\/p>\n<p>#define RST_PIN\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 9<\/p>\n<p>#define SS_PIN\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/on cr\u00e9er une instance MFRC522<\/p>\n<p>MFRC522 mfrc522<strong>(<\/strong>SS_PIN<strong>,<\/strong> RST_PIN<strong>);<\/strong>\u00a0\u00a0 \/\/ Create MFRC522 instance.<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ instanciation et d\u00e9claration des variables utiles par la suite<\/p>\n<p>String instruments<strong>[]<\/strong><strong>=<\/strong><strong>{<\/strong>\u00ab\u00a0piano\u00a0\u00bb<strong>,<\/strong> \u00ab\u00a0trompette\u00a0\u00bb<strong>,<\/strong> \u00ab\u00a0batterie\u00a0\u00bb<strong>,<\/strong>\u00ab\u00a0coeur\u00a0\u00bb<strong>,<\/strong>\u00ab\u00a0piano2\u00a0\u00bb<strong>};<\/strong><\/p>\n<p>int i <strong>=<\/strong> 0<strong>;<\/strong><\/p>\n<p>char ASCII<strong>[<\/strong>128<strong>];<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>void setup<strong>()<\/strong><strong>{<\/strong><\/p>\n<p>\/\/ on cr\u00e9er un tableau de 128 char correspondant \u00e0 128 caract\u00e8res du code ASCII<\/p>\n<p><strong>for<\/strong><strong>(<\/strong>int i <strong>=<\/strong> 0<strong>;<\/strong> i<strong>&lt;<\/strong>33 <strong>;<\/strong> i<strong>++)<\/strong><strong>{<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>i<strong>]<\/strong><strong>=<\/strong> &lsquo; &lsquo;<strong>;<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>ASCII<strong>[<\/strong>47<strong>]<\/strong><strong>=<\/strong> &lsquo;\/&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>58<strong>]<\/strong><strong>=<\/strong> &lsquo;:&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>59<strong>]<\/strong><strong>=<\/strong> &lsquo;;&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>60<strong>]<\/strong><strong>=<\/strong> &lsquo;&lt;&lsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>61<strong>]<\/strong><strong>=<\/strong> &lsquo;=&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>62<strong>]<\/strong><strong>=<\/strong> &lsquo;&gt;&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>63<strong>]<\/strong><strong>=<\/strong> &lsquo;?&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>64<strong>]<\/strong><strong>=<\/strong> &lsquo;@&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>65<strong>]<\/strong><strong>=<\/strong> &lsquo;A&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>66<strong>]<\/strong><strong>=<\/strong> &lsquo;B&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>67<strong>]<\/strong><strong>=<\/strong> &lsquo;C&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>68<strong>]<\/strong><strong>=<\/strong> &lsquo;D&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>69<strong>]<\/strong><strong>=<\/strong> &lsquo;E&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>70<strong>]<\/strong><strong>=<\/strong> &lsquo;F&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>71<strong>]<\/strong><strong>=<\/strong> &lsquo;G&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>72<strong>]<\/strong><strong>=<\/strong> &lsquo;H&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>91<strong>]<\/strong><strong>=<\/strong> &lsquo;[&lsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>92<strong>]<\/strong><strong>=<\/strong> &lsquo; &lsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>93<strong>]<\/strong><strong>=<\/strong> &lsquo;]&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>94<strong>]<\/strong><strong>=<\/strong> &lsquo;^&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>95<strong>]<\/strong><strong>=<\/strong> &lsquo;_&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>96<strong>]<\/strong><strong>=<\/strong> &lsquo; &lsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>97<strong>]<\/strong><strong>=<\/strong> &lsquo;a&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>98<strong>]<\/strong><strong>=<\/strong> &lsquo;b&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>99<strong>]<\/strong><strong>=<\/strong> &lsquo;c&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>100<strong>]<\/strong><strong>=<\/strong> &lsquo;d&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>101<strong>]<\/strong><strong>=<\/strong> &lsquo;e&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>102<strong>]<\/strong><strong>=<\/strong> &lsquo;f&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>103<strong>]<\/strong><strong>=<\/strong> &lsquo;g&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>104<strong>]<\/strong><strong>=<\/strong> &lsquo;h&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>123<strong>]<\/strong><strong>=<\/strong> &lsquo;{&lsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>124<strong>]<\/strong><strong>=<\/strong> &lsquo;|&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>125<strong>]<\/strong><strong>=<\/strong> &lsquo;}&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>126<strong>]<\/strong><strong>=<\/strong> &lsquo;~&rsquo;<strong>;<\/strong><\/p>\n<p>ASCII<strong>[<\/strong>127<strong>]<\/strong><strong>=<\/strong> &lsquo; &lsquo;<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ initialisation de la communication en s\u00e9rie (USB)<\/p>\n<p>Serial<strong>.<\/strong>begin<strong>(<\/strong>9600<strong>);<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>\u00ab\u00a0setup reciever\u00a0\u00bb<strong>);<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ initialisation du r\u00e9cepteur radio<\/p>\n<p>vw_setup<strong>(<\/strong>2000<strong>);<\/strong><\/p>\n<p>vw_set_rx_pin<strong>(<\/strong>2<strong>);<\/strong><\/p>\n<p>vw_rx_start<strong>();<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/initialisation du lecteur RFID<\/p>\n<p>SPI<strong>.<\/strong>begin<strong>();<\/strong><\/p>\n<p>mfrc522<strong>.<\/strong>PCD_Init<strong>();<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>void loop<strong>()<\/strong><strong>{<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/d\u00e9finition de la variable dans laquelle sera stock\u00e9 le message re\u00e7u<\/p>\n<p>uint8_t buf<strong>[<\/strong>VW_MAX_MESSAGE_LEN<strong>];<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ longueur du message maximal pouvant \u00eatre re\u00e7u<\/p>\n<p>uint8_t buflen <strong>=<\/strong> VW_MAX_MESSAGE_LEN<strong>;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ si une carte est pr\u00e9sente, on pioche dans la liste des instruments et on transmet cette information via le port s\u00e9rie<\/p>\n<p><strong>if<\/strong><strong>(<\/strong> mfrc522<strong>.<\/strong>PICC_IsNewCardPresent<strong>()){<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>instruments<strong>[<\/strong>i<strong>%<\/strong>5<strong>]);<\/strong><\/p>\n<p>i<strong>++;<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ si r\u00e9ception du message, on le lit et on le transmet via le port s\u00e9rie<\/p>\n<p><strong>if<\/strong><strong>(<\/strong>vw_get_message<strong>(<\/strong>buf<strong>,<\/strong><strong>&amp;<\/strong>buflen<strong>))<\/strong><\/p>\n<p><strong>{<\/strong><\/p>\n<p>int i<strong>;<\/strong><\/p>\n<p>\/\/ Message with a good checksum received, dump HEX<\/p>\n<p><strong>for<\/strong><strong>(<\/strong>i <strong>=<\/strong> 0<strong>;<\/strong> i <strong>&lt;<\/strong> buflen<strong>;<\/strong> i<strong>++)<\/strong><\/p>\n<p><strong>{<\/strong><\/p>\n<p>Serial<strong>.<\/strong>println<strong>(<\/strong>ASCII<strong>[<\/strong>buf<strong>[<\/strong>i<strong>]]);<\/strong><\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>}<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>}<\/strong><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":3033,"parent":0,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"categories":[15,20],"type_projet":[],"class_list":["post-3031","projet","type-projet","status-publish","has-post-thumbnail","hentry","category-formation","category-projets"],"acf":{"objectifs":"","categorie":false,"fichiers_associes":null},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/projet"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3031\/revisions"}],"predecessor-version":[{"id":10509,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3031\/revisions\/10509"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=3031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=3031"},{"taxonomy":"type_projet","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/type_projet?post=3031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}