{"id":493,"date":"2014-08-10T11:12:52","date_gmt":"2014-08-10T10:12:52","guid":{"rendered":"http:\/\/ofalcao.pt\/blog\/?p=493"},"modified":"2014-08-10T11:12:52","modified_gmt":"2014-08-10T10:12:52","slug":"ev3dev-lendo-sensores","status":"publish","type":"post","link":"https:\/\/ofalcao.pt\/blog\/2014\/ev3dev-lendo-sensores","title":{"rendered":"ev3dev &#8211; lendo sensores"},"content":{"rendered":"<p>Come\u00e7ar a trabalhar com sensores Mindstorms, mais concretamente Touch Sensores. Tenho duas vers\u00f5es: NXT e EV3.<\/p>\n<p>Adicionei touch sensor (NXT) no porto #2. O sistema operativo detecta o acontecimento:<\/p>\n<pre>root@ev3dev:~# dmesg\n...\nmsensor sensor0: Mindstorms sensor registered.\ntouch-sensor in2:nxt-analog-sensor: Touch sensor connected to port in2<\/pre>\n<p>Alguma informa\u00e7\u00e3o \u00fatil na wiki do projecto ev3dev:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/ev3dev\/ev3dev\/wiki\/LEGO-NXT-Touch-Sensor-%289843%29\"> LEGO NXT Touch Sensor<\/a><\/li>\n<li><a href=\"%20https:\/\/github.com\/ev3dev\/ev3dev\/wiki\/Using-the-Mindstorms-Sensor-Device-Class\"> Using the Mindstorms Sensor Device Class<\/a><\/li>\n<\/ul>\n<p>De acordo com a wiki, os sensores Mindstorms s\u00e3o mapeados em &#8220;\/sys\/class\/msensor&#8221;:<\/p>\n<pre>root@ev3dev:~# ls \/sys\/class\/msensor\n sensor0<\/pre>\n<p>Confirma-se a presen\u00e7a de um sensor &#8220;sensor0&#8221;. Que podemos saber acerca dele?<\/p>\n<pre>root@ev3dev:~# ls \/sys\/class\/msensor\/sensor0\n bin_data\u00a0\u00a0 \u00a0 dp\u00a0\u00a0 \u00a0num_values\u00a0 subsystem\u00a0 units\u00a0\u00a0 value2\u00a0 value5\n bin_data_format\u00a0 mode\u00a0\u00a0 \u00a0port_name\u00a0\u00a0 type_id\u00a0\u00a0\u00a0 value0\u00a0 value3\u00a0 value6\n device\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 modes\u00a0\u00a0 \u00a0power\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 uevent\u00a0\u00a0\u00a0\u00a0 value1\u00a0 value4\u00a0 value7<\/pre>\n<p>Muita informa\u00e7\u00e3o, alguma apenas gen\u00e9rica. Fiquemos por &#8220;mode&#8221; e &#8220;value0&#8221;:<\/p>\n<pre>root@ev3dev:~# cat \/sys\/class\/msensor\/sensor0\/mode\n TOUCH<\/pre>\n<p>Sim, \u00e9 um Touch Sensor. E como saber o estado?<\/p>\n<pre>root@ev3dev:~# cat \/sys\/class\/msensor\/sensor0\/value0\n 0<\/pre>\n<p>O sensor estava em repouso. Vamos repetir enquanto premimos o sensor:<\/p>\n<pre>root@ev3dev:~# cat \/sys\/class\/msensor\/sensor0\/value0\n 1<\/pre>\n<p>Ent\u00e3o e se trocarmos por um sensor EV3?<\/p>\n<pre>root@ev3dev:~# dmesg\n ...\n msensor sensor0: Mindstorms sensor unregistered.\n msensor sensor1: Mindstorms sensor registered.\n touch-sensor in2:ev3-analog-sensor: Touch sensor connected to port in2<\/pre>\n<p>E qual \u00e9 o device?<\/p>\n<pre>root@ev3dev:~# ls \/sys\/class\/msensor\/\n sensor1<\/pre>\n<p>Agora \u00e9 &#8216;sensor1&#8217; em vez de &#8216;sensor0&#8217;. Talvez a troca tenha sido demasiado r\u00e1pida ou talvez o sistema operativo nunca liberte os mapeamentos efectuados [at\u00e9 ao pr\u00f3ximo boot].<\/p>\n<p>A informa\u00e7\u00e3o dispon\u00edvel \u00e9 semelhante:<\/p>\n<pre>root@ev3dev:~# ls \/sys\/class\/msensor\/sensor1\n bin_data\u00a0\u00a0 \u00a0 dp\u00a0\u00a0 \u00a0num_values\u00a0 subsystem\u00a0 units\u00a0\u00a0 value2\u00a0 value5\n bin_data_format\u00a0 mode\u00a0\u00a0 \u00a0port_name\u00a0\u00a0 type_id\u00a0\u00a0\u00a0 value0\u00a0 value3\u00a0 value6\n device\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 modes\u00a0\u00a0 \u00a0power\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 uevent\u00a0\u00a0\u00a0\u00a0 value1\u00a0 value4\u00a0 value7<\/pre>\n<pre>root@ev3dev:~# cat \/sys\/class\/msensor\/sensor1\/mode\n TOUCH<\/pre>\n<p>E a leitura do estado do sensor funciona da mesma maneira atrav\u00e9s de &#8216;value0&#8217;.<\/p>\n<p>Este forma do sistema operativo mapear todos os dispositivos no file system d\u00e1-nos uma enorme flexibilidade &#8211; todas as linguagens de programa\u00e7\u00e3o permitem aceder a ficheiros&#8230; at\u00e9 a pr\u00f3pria shell! Eis shell script que se limita a esperar que o sensor seja premido:<\/p>\n<pre>#!\/bin\/bash\n BOTAO=0\n while [ $BOTAO -ne \"1\" ]; do\n BOTAO=$(cat \/sys\/class\/msensor\/sensor0\/value0)\n done\n echo \"Ouch!\" &gt; \/dev\/tty0<\/pre>\n<p>se o ficheiro contendo este script se chamar &#8217;touch.sh&#8217; e tiver permiss\u00f5es de execu\u00e7\u00e3o podemos invoc\u00e1-lo directamente da linha de comando:<\/p>\n<pre>root@ev3dev:~# chmod +x touch.sh\nroot@ev3dev:~# .\/touch.sh<\/pre>\n<p>ou de dentro de outros scripts.<\/p>\n<p>Nota: usei aqui &#8216;sensor0&#8217;, assumo que h\u00e1 apenas um sensor e excepto na situa\u00e7\u00e3o acima em que retirei um sensor e adicionei outro que por isso ficou &#8216;sensor1&#8217;, ser\u00e1 sempre &#8216;sensor0&#8217;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come\u00e7ar a trabalhar com sensores Mindstorms, mais concretamente Touch Sensores. Tenho duas vers\u00f5es: NXT e EV3. Adicionei touch sensor (NXT) no porto #2. O sistema operativo detecta o acontecimento: root@ev3dev:~# dmesg &#8230; msensor sensor0: Mindstorms sensor registered. touch-sensor in2:nxt-analog-sensor: Touch sensor connected to port in2 Alguma informa\u00e7\u00e3o \u00fatil na wiki do projecto ev3dev: LEGO NXT &hellip; <a href=\"https:\/\/ofalcao.pt\/blog\/2014\/ev3dev-lendo-sensores\" class=\"more-link\">Continuar a ler<span class=\"screen-reader-text\"> &#8220;ev3dev &#8211; lendo sensores&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[18,19,20],"tags":[205,103],"series":[],"class_list":["post-493","post","type-post","status-publish","format-standard","hentry","category-lego","category-lego-mindstorms","category-linux","tag-ev3dev","tag-sensor"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2Mhyv-7X","_links":{"self":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/comments?post=493"}],"version-history":[{"count":0,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/493\/revisions"}],"wp:attachment":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/media?parent=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/categories?post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/tags?post=493"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/series?post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}