{"id":766,"date":"2013-05-11T16:05:05","date_gmt":"2013-05-11T20:05:05","guid":{"rendered":"http:\/\/nagashur.com\/blog\/?p=766"},"modified":"2015-08-16T13:00:16","modified_gmt":"2015-08-16T17:00:16","slug":"mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge","status":"publish","type":"post","link":"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/","title":{"rendered":"Mesurer la distance \u00e0 laquelle se trouve un objet avec un capteur infrarouge sur le Raspberry Pi"},"content":{"rendered":"<p>Dans le ce billet, nous verrons comment utiliser un capteur de distance infrarouge ou pour mesurer pr\u00e9cis\u00e9ment la distance entre le capteur et un objet en face de celui ci. Dans un prochain billet, nous verrons comment r\u00e9aliser la m\u00eame chose avec un capteur \u00e0 ultra-sons.<\/p>\n<p><!--more--><\/p>\n<h2><strong>Le capteur de distance infrarouge\u00a0<\/strong><\/h2>\n<p>Il s&#8217;agit\u00a0<a class=\"bbc_url\" title=\"Lien externe\" href=\"http:\/\/www.adafruit.com\/products\/164\" rel=\"nofollow external\">un capteur infrarouge sharp permettant de d\u00e9tecter des objets de 10 \u00e0 80cm de distance<\/a> (le c\u00e2blage et le code seront identiques avec le capteur\u00a0<a class=\"bbc_url\" title=\"Lien externe\" href=\"http:\/\/www.adafruit.com\/products\/1031\" rel=\"nofollow external\">sharp IR 20-150cm<\/a>, et probablement identiques avec pas mal d&#8217;autres capteurs IR. V\u00e9rifiez les datasheets pour voir le c\u00e2blage sur des mod\u00e8les diff\u00e9rents).<\/p>\n<p>Les capteurs infrarouges sont g\u00e9n\u00e9ralement sur le mod\u00e8le de celui ci (il en existe d&#8217;autres, mais on trouve tr\u00e8s facilement ce mod\u00e8le) :<br \/>\n<img class=\"bbc_img\" src=\"http:\/\/www.adafruit.com\/images\/medium\/sharpdist_MED.jpg\" alt=\"Image IPB\" \/><\/p>\n<h2>Le c\u00e2blage<\/h2>\n<p>Comme vous pouvez le voir, vous avez 3 fils. Le c\u00e2blage est extr\u00eamement simple :<\/p>\n<ul class=\"bbc\">\n<li>Le fil noir est connect\u00e9 \u00e0 la masse (connecteur P1-06 du raspberyPi, 3\u00e8me en partant du haut, colonne de droite)<\/li>\n<li>Le fil rouge est connect\u00e9 au +3.3V (connecteur P1-01 du Raspberry, premier pin, en haut \u00e0 gauche des GPIO)<\/li>\n<li>Le fil blanc est connect\u00e9 \u00e0 une entr\u00e9e analogique de votre MCP3008.<\/li>\n<\/ul>\n<h2>Le programme<\/h2>\n<p>A partir de la, vous pouvez lire les valeurs avec un code tr\u00e8s simple :<br \/>\n<code><br \/>\n<\/code><\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n#!\/usr\/bin\/env python\r\nimport time\r\nimport os\r\nimport RPi.GPIO as GPIO\r\nGPIO.setmode(GPIO.BCM)\r\nGPIO.setwarnings(False)\r\n#fonction lisant les donnees SPI de la puce MCP3008, parmi 8 entrees, de 0 a 7\r\ndef readadc(adcnum, clockpin, mosipin, misopin, cspin):\r\nif ((adcnum &gt; 7) or (adcnum &lt; 0)):\r\nreturn -1\r\nGPIO.output(cspin, True)\r\nGPIO.output(clockpin, False) # start clock low\r\nGPIO.output(cspin, False) # bring CS low\r\n\r\ncommandout = adcnum\r\ncommandout |= 0x18 # start bit + single-ended bit\r\ncommandout &lt;&lt;= 3 # we only need to send 5 bits here\r\nfor i in range(5):\r\nif (commandout &amp; 0x80):\r\nGPIO.output(mosipin, True)\r\nelse:\r\nGPIO.output(mosipin, False)\r\ncommandout &lt;&lt;= 1\r\nGPIO.output(clockpin, True)\r\nGPIO.output(clockpin, False)\r\n\r\nadcout = 0\r\n# read in one empty bit, one null bit and 10 ADC bits\r\nfor i in range(12):\r\nGPIO.output(clockpin, True)\r\nGPIO.output(clockpin, False)\r\nadcout &lt;&lt;= 1\r\nif (GPIO.input(misopin)):\r\nadcout |= 0x1\r\n\r\nGPIO.output(cspin, True)\r\n\r\nadcout \/= 2 # first bit is 'null' so drop it\r\nreturn adcout\r\n\r\n# ces numeros de pins GPIO doivent etre modifies pour correspondre aux broches utilisees.\r\nSPICLK = 18\r\nSPIMISO = 23\r\nSPIMOSI = 24\r\nSPICS = 25\r\n\r\n# definition de l'interface SPI\r\nGPIO.setup(SPIMOSI, GPIO.OUT)\r\nGPIO.setup(SPIMISO, GPIO.IN)\r\nGPIO.setup(SPICLK, GPIO.OUT)\r\nGPIO.setup(SPICS, GPIO.OUT)\r\n\r\n#definition du ADC utilise (broche du MCP3008)\r\nadcnum = 0\r\nwhile True:\r\n# Lecture de la valeur brute du capteur\r\nread_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)\r\n# conversion de la valeur brute lue en milivolts = ADC * ( 3300 \/ 1024 )\r\nmillivolts = read_adc0 * ( 3300.0 \/ 1024.0)\r\nprint &quot;valeurs lues : &quot;\r\nprint &quot;\\tvaleur brute : %s&quot; % read_adc0\r\nprint &quot;\\ttension : %s millivolts&quot; % millivolts\r\ntime.sleep(0.5)\r\n<\/pre>\n<h2>Exemple de valeurs et utilisation du capteur<\/h2>\n<p>Si vous souhaitez savoir la distance correspondant \u00e0 la valeur lue, il faudra se r\u00e9f\u00e9rer \u00e0 la courbe\u00a0<a class=\"bbc_url\" title=\"Lien externe\" href=\"http:\/\/sharp-world.com\/products\/device\/lineup\/data\/pdf\/datasheet\/gp2y0a21yk_e.pdf\" rel=\"nofollow external\">en page 5 des sp\u00e9cifications<\/a>.<br \/>\nEn pratique, on \u00e0 approximativement les correspondances suivantes :<\/p>\n<ul class=\"bbc\">\n<li>10cm : 2300mV<\/li>\n<li>20cm : 1350mV<\/li>\n<li>30cm : 900mV<\/li>\n<li>40cm : 750mV<\/li>\n<li>50cm : 650mV<\/li>\n<li>60cm : 500mV<\/li>\n<li>70cm : 450mV<\/li>\n<li>80cm : 440mV<\/li>\n<\/ul>\n<p>Quand vous serez en dessous d&#8217;une certaine distance \u00e0 l&#8217;objet (moins de 10cm), la valeur lue appara\u00eetra comme plus grande. Ainsi, en dessous de 10cm, s&#8217;approcher d&#8217;un objet peut donner l&#8217;impression de s&#8217;en \u00e9loigner. Une solution est de placer le capteur \u00e0 l&#8217;arri\u00e8re du robot, ou au moins \u00e0 10cm du bord de celui ci, de sorte que la distance aux obstacles soit au moins \u00e9gale \u00e0 10cm.<\/p>\n<p>Vous trouverez ici\u00a0<a class=\"bbc_url\" title=\"Lien externe\" href=\"http:\/\/sharp-world.com\/products\/device\/lineup\/data\/pdf\/datasheet\/gp2y0a21yk_e.pdf\" rel=\"nofollow external\">la datasheet de ce capteur sharp IR 10-80cm<\/a>, pour de plus amples d\u00e9tails.<\/p>\n<p>Au passage, un capteur IR \u00e0 tr\u00e8s courte port\u00e9e (5 ou 10cm) pourra permettre de d\u00e9tecter le vide devant le robot et \u00e9viter de tomber dans des escaliers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce billet d\u00e9crit comment utiliser un capteur de disrtance infrarouge sharp.<br \/>\nLe fil noir est connect\u00e9 \u00e0 la masse (connecteur P1-06 du raspberyPi, 3\u00e8me en partant du haut, colonne de droite)<br \/>\nLe fil rouge est connect\u00e9 au +3.3V (connecteur P1-01 du Raspberry, premier pin, en haut \u00e0 gauche des GPIO)<br \/>\nLe fil blanc est connect\u00e9 \u00e0 une entr\u00e9e analogique de votre MCP3008 ou autre DAC.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":""},"categories":[208,140,168,144],"tags":[108,217,160,216,218,188,154,156,187],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mesurer la distance \u00e0 laquelle se trouve un objet avec un capteur infrarouge sur le Raspberry Pi - Nagashur<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mesurer la distance \u00e0 laquelle se trouve un objet avec un capteur infrarouge sur le Raspberry Pi - Nagashur\" \/>\n<meta property=\"og:description\" content=\"Ce billet d\u00e9crit comment utiliser un capteur de disrtance infrarouge sharp.  Le fil noir est connect\u00e9 \u00e0 la masse (connecteur P1-06 du raspberyPi, 3\u00e8me en partant du haut, colonne de droite) Le fil rouge est connect\u00e9 au +3.3V (connecteur P1-01 du Raspberry, premier pin, en haut \u00e0 gauche des GPIO) Le fil blanc est connect\u00e9 \u00e0 une entr\u00e9e analogique de votre MCP3008 ou autre DAC.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/\" \/>\n<meta property=\"og:site_name\" content=\"Nagashur\" \/>\n<meta property=\"article:published_time\" content=\"2013-05-11T20:05:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-08-16T17:00:16+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.adafruit.com\/images\/medium\/sharpdist_MED.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@audreyrobinel\" \/>\n<meta name=\"twitter:site\" content=\"@audreyrobinel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/nagashur.com\/blog\/#website\",\"url\":\"http:\/\/nagashur.com\/blog\/\",\"name\":\"Nagashur\",\"description\":\"raspi et arduino FTW :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/nagashur.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/#primaryimage\",\"inLanguage\":\"fr-FR\",\"url\":\"http:\/\/www.adafruit.com\/images\/medium\/sharpdist_MED.jpg\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/#webpage\",\"url\":\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/\",\"name\":\"Mesurer la distance \\u00e0 laquelle se trouve un objet avec un capteur infrarouge sur le Raspberry Pi - Nagashur\",\"isPartOf\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/#primaryimage\"},\"datePublished\":\"2013-05-11T20:05:05+00:00\",\"dateModified\":\"2015-08-16T17:00:16+00:00\",\"author\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/nagashur.com\/blog\/2013\/05\/11\/mesurer-la-distance-a-laquelle-se-trouve-un-objet-avec-un-capteur-infrarouge\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\",\"name\":\"sky99\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6yqc2-cm","jetpack-related-posts":[{"id":1706,"url":"http:\/\/nagashur.com\/blog\/2016\/05\/02\/r-hasika-presentation-un-robot-raspberry-pi-precis-et-extensible\/","url_meta":{"origin":766,"position":0},"title":"R.Hasika - pr\u00e9sentation : un robot Raspberry pi pr\u00e9cis et extensible","date":"2 mai 2016","format":false,"excerpt":"R.Hasika - pr\u00e9sentation R.Hasika est le successeur de R.Cerda, un robot bas\u00e9 sur le Raspberry pi. Si \u00e0 l'\u00e9poque mon objectif \u00e9tait simplement de construire un robot bas\u00e9 sur le Raspberry pi, avec R.hasika, je suis plus ambitieux. En effet, il s'agit cette fois de concevoir enti\u00e8rement le robot, que\u2026","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"R.Hasika de profil, avec les c\u00e2bles rang\u00e9s","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2016\/04\/compacted_cables_5715b_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":584,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/13\/lire-des-entrees-analogiques-sur-un-raspberry-avec-un-circuit-adc-le-mcp3008\/","url_meta":{"origin":766,"position":1},"title":"Lire des entr\u00e9es analogiques sur un Raspberry avec un circuit ADC : le MCP3008","date":"13 janvier 2013","format":false,"excerpt":"Nous connectons un circuit MCP3008 \u00e0 4 ports GPIO du Raspberry pi, et nous pouvons alors connecter divers capteurs \u00e0 l'une des 8 broches libres du MCP3008 pour lire les valeurs de divers capteurs analogiques. Un exemple de code python r\u00e9alisant cela est fourni, et les sch\u00e9mas de c\u00e2blage de\u2026","rel":"","context":"Dans &quot;capteurs&quot;","img":{"alt_text":"Convertisseur analogique-num\u00e9rique MCP3008","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/MCP3008-01.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":778,"url":"http:\/\/nagashur.com\/blog\/2013\/06\/18\/lecture-dune-sonde-de-temperature-tmp36-sur-un-arduino\/","url_meta":{"origin":766,"position":2},"title":"Lecture d'une sonde de temp\u00e9rature TMP36 sur un Arduino","date":"18 juin 2013","format":false,"excerpt":"Si le cot\u00e9 plat est vers vous, alors la broche de gauche ira sur le +5V de votre Arduino, ou sur le +3.3V du Raspberry Pi. La broche centrale ira sur votre entr\u00e9e analogique, par exemple le A0 du Arduino, ou une broche d'entr\u00e9e du MCP3008 connect\u00e9 \u00e0 votre Raspberry\u2026","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"sonde TMP36 (cr\u00e9dits Adafruit)","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/06\/TMP36.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":770,"url":"http:\/\/nagashur.com\/blog\/2013\/06\/18\/creation-dune-station-meteo-maison\/","url_meta":{"origin":766,"position":3},"title":"Creation d'une station m\u00e9t\u00e9o \"maison\" : projet Milapli","date":"18 juin 2013","format":false,"excerpt":"Bonjour \u00e0 tous! Aujourd'hui, je vais vous pr\u00e9senter mon nouveau projet : la cr\u00e9ation d'une station m\u00e9t\u00e9o de toutes pi\u00e8ces. Je poss\u00e8de d\u00e9ja une station m\u00e9t\u00e9o du commerce, mais je suis sur qu'on peut faire\u00a0quelque chose\u00a0de proche pour moins cher. D'autre part, avec une station m\u00e9t\u00e9o faite soi m\u00eame, on\u2026","rel":"","context":"Dans &quot;bricolo&quot;","img":{"alt_text":"Une version de test de Milapli, une station m\u00e9t\u00e9o bas\u00e9e sur un","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/06\/milapli_lcd.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1349,"url":"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/","url_meta":{"origin":766,"position":4},"title":"DS18B20 Raspberry pi - Mesurer la temp\u00e9rature avec une sonde num\u00e9rique","date":"30 ao\u00fbt 2015","format":false,"excerpt":"Ce tutoriel sur le DS18B20 pour Raspberry pi indique comment c\u00e2bler le tout, configurer le syst\u00e8me pour pouvoir s'en servir, et pr\u00e9sente\/explique le code permettant d'exploiter ce capteur num\u00e9rique (code bash et python).","rel":"","context":"Dans &quot;capteurs&quot;","img":{"alt_text":"DS18B20 logo sonde temp\u00e9rature num\u00e9rique","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_logo_4747_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":604,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/15\/mesurer-la-luminosite-avec-une-photo-resistance\/","url_meta":{"origin":766,"position":5},"title":"Mesurer la luminosit\u00e9 avec une photo r\u00e9sistance","date":"15 janvier 2013","format":false,"excerpt":"Une photo-r\u00e9sistance est un composant dont la r\u00e9sistance varie en fonction de l'intensit\u00e9 lumineuse s'appliquant sur sa surface. On peut s'en servir pour d\u00e9tecter s'il fait jour ou nuit, mais aussi, en utilisant une paire de photo r\u00e9sistances, d\u00e9terminer la direction d'une source lumineuse. Ce composant pourra par exemple servir\u2026","rel":"","context":"Dans &quot;\u00e9lectronique&quot;","img":{"alt_text":"photor\u00e9sistances diverses","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/800px-Photoresistors_-_three_sizes_-_mm_scale.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/766"}],"collection":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/comments?post=766"}],"version-history":[{"count":0,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/766\/revisions"}],"wp:attachment":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media?parent=766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/categories?post=766"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/tags?post=766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}