{"id":433,"date":"2011-07-26T08:32:18","date_gmt":"2011-07-26T11:32:18","guid":{"rendered":"http:\/\/www.renatopeterman.com.br\/blog\/?p=433"},"modified":"2012-10-22T16:41:02","modified_gmt":"2012-10-22T19:41:02","slug":"controlando-dois-ou-mais-servo-motores-com-arduino","status":"publish","type":"post","link":"https:\/\/renatopeterman.com.br\/blog\/2011\/07\/26\/controlando-dois-ou-mais-servo-motores-com-arduino\/","title":{"rendered":"Controlando dois (ou mais) servo motores com Arduino."},"content":{"rendered":"<p>J\u00e1 recebi varios e-mails perguntando se \u00e9 poss\u00edvel controlar dois ou mais servo motores com o <a href=\"http:\/\/www.arduino.cc\/\">Arduino<\/a>, fiquei de postar o c\u00f3digo aqui mas sempre acabava esquecendo.<\/p>\n<p>Como voc\u00ea j\u00e1 deve ter visto, no projeto que desenvolvi com o <a href=\"https:\/\/renatopeterman.com.br\/blog\/2010\/11\/12\/projeto-controlando-servo-motor-o-emotiv-epoc-interface-cerebro-computador\/\">Emotiv Epoc + Arduino<\/a> utilizo dois servo motores para representar o prot\u00f3tipo.<\/p>\n<p>Se \u00e9 a primeira vez que voc\u00ea vai se aventurar com Arduino e servo motores, aconselho dar uma lida <a href=\"https:\/\/renatopeterman.com.br\/blog\/2010\/07\/28\/controlando-servo-motor-a-partir-do-teclado-com-arduino-e-c\/\">neste post (Controlando Servo Motor utilizando o teclado com Arduino e C#)<\/a>, e claro, para isso, \u00e9 necess\u00e1rio que voc\u00ea j\u00e1 tenha um m\u00ednimo de conhecimento no assunto. Caso queira pesquisar mais, sugiro que de uma olhada no site oficial do Arduino (<a href=\"http:\/\/www.arduino.cc\/\">arduino.cc<\/a>).<\/p>\n<p><!--more--><br \/>\nO conceito \u00e9 o mesmo do post em que mostro como controlar um servo a partir do teclado com C#. Ent\u00e3o, se voc\u00ea entendeu e deu tudo certo l\u00e1, n\u00e3o ter\u00e1 problemas com essa modifica\u00e7\u00e3o.<\/p>\n<p>O que eu fiz foi colocar um bloco &#8220;if&#8221; e fazendo a verifica\u00e7\u00e3o da string de entrada via serial para identificar para qual servo motor queremos enviar o comando.<\/p>\n<p>\u00c9 simples, no projeto com apenas um servo, enviamos uma string, por exemplo: &#8220;180&#8221;, e o servo movimenta 180 graus. Com dois, acrescentamos um caracter ao final, por exemplo: &#8220;180a&#8221;, movimentamos o servo A 180 graus.<\/p>\n<p>Abaixo segue o c\u00f3digo na \u00edntegra do programa.<\/p>\n<pre>\n\n<div class=\"codecolorer-container cpp default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/><\/div><\/td><td><div class=\"cpp codecolorer\"><span class=\"co1\">\/\/Biblioteca do Arduino para<\/span><br \/>\n<span class=\"co1\">\/\/controlar Servo Motores<\/span><br \/>\n<span class=\"co2\">#include &lt;Servo.h&gt;<\/span><br \/>\n<br \/>\nServo servo1<span class=\"sy4\">;<\/span><br \/>\nServo servo2<span class=\"sy4\">;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">char<\/span> buffer<span class=\"br0\">&#91;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"kw4\">int<\/span> received<span class=\"sy4\">;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">void<\/span> setup<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Inicia a porta serial<\/span><br \/>\n&nbsp; Serial.<span class=\"me1\">begin<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9600<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Atribui as entradas do Arduino<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/as variaveis<\/span><br \/>\n&nbsp; servo1.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; servo2.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Movimentamos ambos os motores para 90 graus<\/span><br \/>\n&nbsp; servo1.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; servo2.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; received <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">void<\/span> loop<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/Verifica se possui alguma entrada de dados<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/na entrada Serial<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>Serial.<span class=\"me1\">available<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"kw4\">char<\/span> c <span class=\"sy1\">=<\/span> Serial.<span class=\"me1\">read<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Se o &quot;c&quot; for igual ao caracter &quot;A&quot; (97 na tabela ASCII)<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>c <span class=\"sy1\">==<\/span> <span class=\"nu0\">97<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Serial.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span>buffer<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> numero <span class=\"sy1\">=<\/span> <span class=\"kw3\">atoi<\/span><span class=\"br0\">&#40;<\/span>buffer<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; servo1.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>numero<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; received <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Se o &quot;c&quot; for igual ao caracter &quot;B&quot; (98 na tabela ASCII)<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>c <span class=\"sy1\">==<\/span> <span class=\"nu0\">98<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Serial.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span>buffer<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> numero <span class=\"sy1\">=<\/span> <span class=\"kw3\">atoi<\/span><span class=\"br0\">&#40;<\/span>buffer<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>numero <span class=\"sy1\">&gt;=<\/span> <span class=\"nu0\">60<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; servo2.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>numero<span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; received <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; received <span class=\"sy1\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy4\">;<\/span> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>c <span class=\"sy3\">!<\/span><span class=\"sy1\">=<\/span> <span class=\"nu0\">97<\/span> <span class=\"sy3\">&amp;&amp;<\/span> c <span class=\"sy3\">!<\/span><span class=\"sy1\">=<\/span> <span class=\"nu0\">98<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buffer<span class=\"br0\">&#91;<\/span>received<span class=\"sy2\">++<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy1\">=<\/span> c<span class=\"sy4\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; Serial.<span class=\"me1\">flush<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy4\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n<\/pre>\n<p>No c\u00f3digo acima os servos foram conectados as entradas 8 e 9 no Arduino.<\/p>\n<p>Como voc\u00ea deve j\u00e1 ter observado, a compara\u00e7\u00e3o \u00e9 feita utilizando o c\u00f3digo do caracter de acordo com a <a href=\"http:\/\/www.asciitable.com\/\">tabela ASCII<\/a>.<\/p>\n<p>Se voc\u00ea precisar controlar mais de dois servo motores, \u00e9 s\u00f3 implementar mais condi\u00e7\u00f5es (seria mais elegante usar o bloco &#8220;switch&#8221;) e utilizar outros caracteres (da tabela ASCII) para se identificar os motores.<\/p>\n<p>N\u00e3o sei se essa \u00e9 a forma mais elegante de se implementar isto, mas foi uma solu\u00e7\u00e3o que encontrei quando me deparei com este problema, se algu\u00e9m possui alguma outra forma, por favor contribua. \ud83d\ude09<\/p>\n<p>Acho que \u00e9 isso ai pessoal.<\/p>\n<p>Como eu disse anteriormente, se voc\u00ea j\u00e1 seguiu <a href=\"https:\/\/renatopeterman.com.br\/blog\/2010\/07\/28\/controlando-servo-motor-a-partir-do-teclado-com-arduino-e-c\/\">este tutorial<\/a> n\u00e3o ter\u00e1 problema algum em entender o funcionamento e vai lhe servir muito bem.<\/p>\n<p>Bons estudos, e qualquer d\u00favida estou a disposi\u00e7\u00e3o. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>J\u00e1 recebi varios e-mails perguntando se \u00e9 poss\u00edvel controlar dois ou mais servo motores com o Arduino, fiquei de postar o c\u00f3digo aqui mas sempre acabava esquecendo. Como voc\u00ea j\u00e1 deve ter visto, no projeto que desenvolvi com o Emotiv &hellip; <a href=\"https:\/\/renatopeterman.com.br\/blog\/2011\/07\/26\/controlando-dois-ou-mais-servo-motores-com-arduino\/\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,10],"tags":[25,29,34,27,30,26,50],"_links":{"self":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/433"}],"collection":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/comments?post=433"}],"version-history":[{"count":21,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/433\/revisions"}],"predecessor-version":[{"id":755,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/posts\/433\/revisions\/755"}],"wp:attachment":[{"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/media?parent=433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/categories?post=433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/renatopeterman.com.br\/blog\/wp-json\/wp\/v2\/tags?post=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}