You are on page 1of 30
Palestra: Introducao ao mundo do Arduino e demonstracao de projetos. Por Bruno Martins Apostila distribuida gratuitamente O contetido desta apostila (com excecdo das fotos de terceiros, devidamente citadas) esta disponivel através da licenga: Creative Commons Atribuicao Uso ndo comercial Compartilhamento pela mesma licenga 3.0 Unported, que esta disponivel nas formas compacta e completa nos seguintes enderegos abaixo: Capitulo 1 Conceitos basicos http://creativecommons.org/licenses/by-nc-sa/3.0/deed pt_BR http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode Caso possua corregées, sugestées ou mesmo queira contribuir escrevendo essa apostila, sinta-se livre para entrar em contato terei um imenso prazer em receber sua contribuicao! 1 Conceitos b_asicos 7 1.10 Projeto Arduino a 12 Instala_c~ao do software 9 1.3 Primeiro projeto 10 1.3.1 C_alculos de resistencia 2 1.3.2 Alimenta_c~ao do circuito 13 14 Bibliotecas e shields 1B LS Integra_c~ao com o PC ae] 6 Portas anal_ogicas e digitais 15 1.6.1 Portas digitais 15 1.6.2 Portas anal_ogicas 18 2 Fundamentos de Eletr*onica 21 2.1 Resistores e Lei de Ohm 2 2.1.1 Resistores em s_erie 22 2.1.2 Resistores em paralelo 2 2.13 Codigo de cores B 2.1.4 Divisor de tens~ao 2B 2.2 Capacitores e indutores .. wi BB 2.2.1 Capacitores 24 2.2.2 Indutores 24 2.3 Diodos 25 24 Transistores coves : 25 2.4.1 Utiliza_c~ao de transistores com rel_es cee 26 24.2 Ponte-H....... 27 3 Eletronica Digital 29 3.1 Introdu_e~ao 30 3.2 Portas |_ogicas. 30 3.2.1 Tabela-verdade . cites 30 3.2.2 Representa_c~ao das opera c~oes... 31 3.23 Fun_c~oes |_ogicas compostas 31 4 Fazendo barulho com o Arduino. 33 5 Armazenando na EEPROM 35 Bruno Andrade Martins Contato: E-mail: robotiesbr@gmail.com Telefone: +55 21 98667-2167 8 CAPITULO 1, CONCEITOS BASICOS 1.1 O Projeto Arduino Arduino’ é um projeto que engloba software e hardware ¢ tem como objetivo fornecer uma plataforma facil para prototipagao de projetos intcrativos, utilizando um microcontrolador. Ele faz parte do que chamamos de computagio fisica: Area da computagao em que o software interage dirctamente com o hardware, tormando poss{vel integragdo [écil com sensores, motores e outros dispositivos eletronicos. A parte de hardware do projeto, uma placa que cabe na palma da mio, 6 um computador como qualquer outro: possui microprocessador, meméria RAM, meméria flash (para guardar o software), temporizadores, contadores, dentre outras fimcionalidades. Atualmente, o projeto est na versio Uno, porém muitos Arduinos encontrados hoje sio da versio Duemilanove (2009, em italiano), que possui um clock de 16MHz, 2kB de meméria RAM, 32kB de meméria lash, 14 portas digitais e 6 entradas analdgica. r Figura Ll: Foto do hardware de um Arduino Duemilanove A principal diferenga entre um Arduino e um computador convencional é que, além ter menor porte (tanto no tamanho quanto no poder de processamento), 0 Arduino utiliza dispositivos diferentes para entrada e saida em geral. Por exemplo: em um PC utilizamos teclado e mouse como dispositivos de entrada © monitores impressoras como dispositivos de saida; j4 em projetos com o Arduino os dispositivos de entrada ¢ saida sao cireuitos elétricos feletronicos. Como a interface do Arduino com outros dispositivos esta mais perto do meio fisico que a de um PC, podemos ler dados de sensores (temperatura, luz, pressio ete.) e controlar outros cixcuitos (limpadas, motores, eletrodomésticos ete.), dentre outras coisas que nao conseguirfamos diretamente com um PC. A grande diferenga com relagio a0 uso desses dispositivos, no caso do Arduino, € que, na maior parte das vezes, nés mesmos construimos os circuitos que sio utilizados, ou scja, néo estamos limitados apenas a produtos existentes no mercado: 0 limite & dado por nosso conhecimento e eriatividade! (0 melhor de tudo nesse projeto é que seu software, hardware © documentayao sio abertos. 0 software é livre (GNU GPL?), 0 hardware é totalmente especificado (basta entrar no site ¢ baixar os esquemas) ¢ a documentagio esta disponivel em Creative Commons® - os usuarios podem colaborar (seja escrevendo documentagio, seja traduzindo) através da wiki! Tmeps/ [wa orduina cel 2neeps/ wn gnu. org/Licenses/ gpl tel Sneeps//eventiveconnona.org/Iscentes/ 12, INSTALAGAO DO SOFTWARE 9 1.2 Instalagio do software Para criar um projeto com o Arduino, basta comprar uma placa Arduino (utilizaremos o Arduino Duemilanove como exmplo} ~ que custa em torno de US$80 no exterior e por volta de R$100 no Brasil -, fazer download da Interface integrada de desenvolvimento (IDE)* e liger a place a porta USB do PC. Como qualquer computador, o Arduino precisa de um sofware para executar comandos. Esse software sera desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C++, Apés escrever 0 c6digo, 0 compilaremos e entio faremos o envio da versio compilada 4 meméria flash do Arduino, através da porta USB. A partir do momento que 0 software é gravado no Arduino ndo precisamos mais do PC: o Arduino, como 6 wn computador independente, conseguiré sozinho executar 0 software que criamos, desde que seja ligado a uma fonte de energia, Antes de iniciar nosso projeto precisamos entao instalar a IDE, Vamos la + Ubuntu GNU/Linux 10.10: Basta executar em um terminal: sudo aptitude install arduino ‘ou procurar pelo pacote “arduino” no Synaptic (menu Sistema + Administragio > Gerenciador de pacotes Synaptic) * Ubuntu GNU/Linux (anterior a 10.10): Consulte pagina de instalagao do Arduino em Ubuntu®, ‘+ Outras distribuigdes GNU/Linux: Consulte a pigina de instalagdo om outras distribuigdes GNU/Linux’ + Microsoft Windows: Consulte a pagina de instalagio para as variadas verses do Microsoft Windows? + Apple Mac OS X: Consulte a pigina de instalagdo para o Mac OS X* Apés a instalagio, abra a IDE (no Ubuntu GNU/Linux ela estaré disponivel no menu Aplicativos —> Ble- trénica > Arduino IDE). A soguinte tela sera mostrada: ‘Saetpi//arduine .cc/en/Main/Sortware Snetp/ avi. arduine.ce/playground/Linux/Ubuat Sxeep:/ eu arduine ce/playeround/Leerning/Linur Tneep://iww ardaine cc/en/Guide/Windovs Sneeps//eww arduine ce/en/uide/Mac0Si 10 CAPITULO 1, CONCEITOS BASICOS Perce) on infra] =) Figura 1.2: Arduino IDE versio 0018 rodando no Ubuntu GNU/Linux 10.10 1.3 Primeiro projeto Quando ensinamos linguagens de programagio novas, geralmente o primeiro exemplo é um hello world. Como © Arduino nao vem por padrao com um display, nosso primeizo exemplo seré fazer um LED piscar ~ e por isso serd chamado blink. Nosso LED ficaré aceso durante um segundo e apagado durante outro segundo ¢ entio revomegard o ciclo. Abra a IDE e digite o soguinte eédigo: void setup() { pinMode(13, OUTPUT); y void loop) { digitalWrite(13, HIGH); delay (1000) digitalrite(13, LOW); delay(1000) ; y Chamamos um eédigo feito para Arduino de sketch ¢ 0 salvamos em um arquivo com a extensdo pe. Com. nosso sketch pronto, bastard conectar Arduino na porta USB e clicar no botdo upload (segundo, da direita para a esquerda ~ destacado na figura acima). Apés 0 processo, serd vista a mensagem Done uploading na IDE © entio o sketch estard rodando no Arduino, ou seja, o LED acenderé ¢ apagard, de 1 em 1 segundo. Vamos agora A explicagio do provesso: 1.3. PRIMEIRO PROJETO u © Arduino possui 14 portas digitais, que podemos utilizar como entrada ou saitla. Nesse caso, vamos utilizar @ porta de mimero 13 como saida, dessa forma, podemos controlar quando a porta ficaré com 5V ou quando ficaré com OV ~ intemamente o Arduino possui wa LED conectado A porta 13 e, por isso, teremos como “ver” nosso software funcionando, Para que nosso sofware funcione corretamente no Arduino, precisamos criar duas fungdes especificas: setup © loop. A funcio setup ¢ executada assim que o Arduino d& boot, ja a funcdo Loop fica sendo executada continuamente {em loop) até que o Arduino seja desligado. Como as portas digitais sio de entrada ou saida, definimos entao dentro da fangio setup que a nossa porta 13 é uma porta de saida ~ fazemos isso através da chamada & fungio pinMode, que jé vem na biblioteca padrao do Arduino. Depois de configurarmos corretamente a porta 13 como saida, precisamos acender e apagar 0 LED que est comectado a ela, Para alterar a tensio na porta, utilizamos a fungio digitai¥rite (que também esté na biblioteca padréo do Arduino); passamos para essa fungio a porta que queremos alterar a tensio ¢ o novo valor de tensdo (HIGH = 5V, LoW = OV). Depois das chamadas para acender e apagar o LED, chamamos a funcio delay pasando o parametro 1000 - o que essa fungio faz é esperar um tempo em milisegundos para entao excutar a préxima instrucio. Dove-se ressaltar que a IDE Arduino inclui automaticamente todas as bibliotecas que utilizamos. Se vocé esti acostumado com C/C++, note que nao precisamos digitar as diretivas include para arquivos como © stdlib-b, por exemplo. Tudo ¢ feito de forma automstica para facilitar o desenvolvimento do projeto! Como o Arduino ja vem com um LED internamente conectado 4 porta 13, nao precisaremos de cixcuitos externos para que esse projeto funcione, ou seja, bastard fazer upload daquele cédigo ¢ jé teremos o resultado esperado: (6) LED apagado (b) LED aceso Figura. 1.3: Arduino Duemilanove rodando o exemplo Blink Porém, se quisermos acender um LED externo & placa, podemos conecté-lo diretamente & porta 13. Podemos utilizar um LED de fmm que acende com 2,5V. O problema, nesse caso, se dé por conta da porta digital: cla assume ou a tensdo OV, ou a tensio 5V - e caso coloquemos 5V no LED ele rd queimar. Para solucionar esse problema precisamos ligar algum outro componente que seja responsivel por dividir parte dessa tensao com o LED, para que ele nao queime, entao utilizaremos um resistor. Portanto, ligamos um resistor de 1200 em série com o LED, o resistor & porta 13 e o LED porta GND ~ ground ou terra -, como na Figura 14 2 CAPITULO 1, CONCEITOS BASICOS Figura 1.4: Utilizando um LED externo para o exemplo Blink Nao precisamos fazer nenbuma alteragio no software para que esse circuito funcione: basta ligar o Arduino na porta USB do computador, para que © computador dé energia ao eircuito, e entdo veremos o LED externo piscar juntamente com o LED interno. Em vez do LED, poderfamos controlar outros componentes, como motores, cletrodomésticos ete. 1.3.1 Calculos de resisténcia Para chegar ao valor de 1208? acima, precisei fazer algumas contas (¢ arredondamentos). Vamos aprender agora a calcular o valor dos resistores que precisamos utilizar. Se precisarmos acender um LED verde, que é alimentado com tensao de 2,2V e corrente de 20mA através do Arduino, precisaremos de um resistor, como jé vimos, j& que © Arduino s6 consegue fornecer ou OV ott SV. Colocaremos o resistor em série com o LED, e com isso podemos concluir que: ‘+ A tonsio total (soma das tensdes no resistor ¢ no LED) sera de SV, ou seja: Vien + Va =5V ‘© A corrente total que passa pelo resistor e pelo LED 6 igual, ou seja, 20mA, ou seja: Ingp = Ip = 20mA ‘+ Precisamos colocar uma tensio de 2,2V no LED, ou seja: Vip = 2,2V Sabendo desses detalhes, podemos coneluir que a tensio no resistor seré de: Va = 5V — View -. Va = SV ~2,2V > Vg = 2,8V. Como Ip = 20mA e Vp = 2,8V, podemos calcular 0 valor da resisténcia R do resistor que ixemos utilizar através da Lei de Ohm’ V=RI Assim, temos: 2,8V ~ R0,020A ». R~ 28% > R— 1400 Depois de felta 0 edloulo, podemas goncrilizar com a soguinte fdrmula _ Vionte ~ Visso ~ Tr Para o LED verde, precisamos de um resistor de 1409, porém nio existem resistores com esse valor para venda ~ os valores sio pré-definidos®. Dada essa situacao, temos duas alternativas. R ‘+ Utilizar um resistor de maior resisténcia e limitar mais a corrente (que far com que o LED brilhe menos); ‘¢ Associar dois ou mais resistores em série ou paralelo para conseguir o valor. Geralmente escolhemos um resistor de valor préximo, ja que uma alterag3o pequena de corrente no causaré danos ao dispositivo, porém em alguns casos precisaremos combinar resistores de valores diferentes para conseguir © valor equivalente ~ esse tema seré explicado em mais detalhes no préximo capitulo. resistores-capeciteres-e-indstores/ 14, BIBLIOTECAS E SILIELDS 13 1.3.2 Alimentagao do circuito Internamente, 0 cireuito do Arduino é alimentado com uma tensio de 5V. Quando ligamos © Arduino em uma porta USB do PC, o proprio PC, através do cabo USB, alimenta o Arduino. Porém nem sempre temos tn PC por perto; para esses casos, podemos utilizar uma outra fonte de energia de SV (a fonte deve ser ligada diretamente nos pinos 5V e GND do Arduino) ‘Como nao possufmos pilhas/baterias em abundancia no mercado com tensio de SV, fica complicado alimentar um Arduino dessa forma alternativa ~ se tivermos uma tomada de 127/220VAC por perto, poderiamos ligar uma fonte AC/DC (essas sim, existem aos montes). Para resolver esse problema, o Arduino possui um regulador de tensao que accita tensGes de 7 a 12V (na verdade, ele consegue fimeionar com tensdes entre 6 e 20V, apesar de nfo ser recomendado). Com o regulador de tensio podemos combinar pilhas em série, utilizar uma bateria de 9V ou mesmo baterias de carros, motos e no-breaks (12V) Figura 1.5: Arduino alimentado por uma bateria de 9V Retirado de http://www. arduino .cc/playground/Learning/SVBatteryAdapter 1.4 Bibliotecas e shields Assim como a IDE j4 vem com diversas fungées pré-definidas, o Ardumo possui outras bibliotecas para controle de servomotores, displays LCD, geragio de éudio, recepeao de sinais de sensores ¢ outros dispositivos (como teclado PS/2), dentre muitas outras coisas! E quem pensa que essa estensibilidade toda se restringe & parte de sare est muito enganaclo: o Arduino possti 0 que chamamos de shields, que sio placas que se acoplam & placa original, agregando funcionalidades & mesma. Existem shields dos mais variados tipos, para as mais diversas fangGes. Alguns servem como entrada, outros como saida, e ainda outyos como entrada ¢ saida, Com os shields couseguimos, por exemplo, fazer 0 Arduino se comtnicar numa rede Ethernet, ot ainda transmitir dados para qualquer dispositive via Bluetooth, Wi-Fi ou Zighce. Existem shields com circuitos integrados prontos para controlarmos motores sem que precisemos nos preocupar com complicagées eletrGnicas envolvidas, outros possuem leitor de cartao SD, acelerémetro, GPS e diversos outros sensores que podem gerar dados importantes para o software que esté rodando no microcontrolador. uM CAPITULO 1, CONCEITOS BASICOS Figura 1.6: Arduino Duemilanove com shield Ethernet Existem também outros shields mais elaborados, que sio sistemas completos. Um deles, por exemplo, eria uma plataforma para desenvolvimento de jogos no Arduino: o Video Game Shield!, que possui wna saida RCA. fe duas entradas para controles Numebuck do Nintendo Wil. Além do hardware, existe uma biblioteca para ser utilizada em conjunto, que ja possui vérias fungSes pré-programadas para fazermos desenhos na televisio e capturar os dados dos movimentos nos controles, 1.5 Integrag&o com o PC Apesar de o Arduino ser um computador independente, em alguns casos pocemos nos aproveitar de um PC por perto e explorar outra fumcionalidade muito boa do projeto: 0 Arduino consegue conversar com o computador através da porta USB. Isso nos permite desenvolver um software que roda no PC ese comunica corn 0 software que roda no Arduino, 0 que nos abre um mar de possibilidades! Podemos, por exemplo, eriar umm software em Python! que recebe os dados de um sensor, via USB (através do Arduino), e envia para algum banco de dados na Intemet ~ assim teremos, de certa forma, nosso Arduino online, enviando dades para o mundo, através de um PC! Existem intimeros projetos interessantes que fazem interface entre linguagens de programagao ¢ © Arduino —existem implementagées para Python, Ruby, Java, C, dentre outras linguagens. E nio para por af: além de 0 software que roda no PC receber dados, ele pode também enviar dados, controlando o Arduino! Dessa forma, podemos, por exemplo, receber dados da Web e enviar comandos ao Arduino, baseados nesses dados. Um exemplo de aplicagio que utiliza a porta USB para comunicagio do Arduino com 0 PC ¢ 0 projeto Arduinoscope!?, que tem como fnalidade criar um osciloscépio, onde podemos ver em tempo real, no PC, sraficos das tenses que esto ligadas 3s portas analégicas do Arduino. Outro exemplo é um projeto que eriei, onde controlo um carrinko através de Wi-Fi, 0 Turiquinhas!* Fica a dica para quem quer comegar um projeto Arduino assistido por computador de maneira fécil: vale a pena estudar um protocolo de comunicagao ¢ controle chamado Firmata', cuja implementagao esta disponivel Theep://swu.wayneandlayne .cou/prejecte/vid Upeep:/ fina. pytaon. ore! peep: //eode-google-con/p/arduinoscepe/ peep: //ine, justen.eng.be/Tursquiahas peep: //iww firmate-org/ shielé/ 1.6, PORTAS ANALOGICAS E DIGITAIS 15 para vérias linguagens (e j4 vem por padriio um exemplo na IDE do Arduino). de dacios e controle da placa. Além das opgdes citadas acima, existe uma linguagem chamada Processing, parecidissima com a linguagem que utilizamos no Arduino, que consegue se communicar com o Arduino via USB ¢ 6 utilizada pata criar imagens, animagies ¢ interagées no PC, a partir dos dados vindos da comunicagio com o Arduino. facilita 0 processo de 1.6 Portas analégicas e digitais © Arduino possui dois tipos de portas de entrada: anal6gicas e digitais. Além disso, as portas digitais também server como portas de safda, funcionando com dois tipos bdsicos de saida: saida digital comum ¢ saida PWM — 0 PWM pode ser utilizado para simular uma saidla analégica, dentre outras coisas, 1.6.1 Portas digitais Utilizamos as portas digitais quando precisamos trabalhar com valores bem definidos de tenso. Apesar de nem sempre ser verdade, geralmente trabalhamos com valores digitais bindrios, ou seja, projetamos sistemas que utilizam apenas dois valores bem definidos de tensio. Existem sistemas ternérios, quaterndrios, mas focaremos no bindrio, j4 que ¢ esse o utilizado pelo Arduino, Como o sistema 6 binério, temos que ter apenas duas tonsdes. So elas: OV e SV. Dessa forma, as portas digitais do Arduino podem trabalhar apenas com essas duas tensdes ~ ¢ 0 software que desenvolveremos poder requisitar ao microcontrolador do Arduino que: ‘* Coloque uma determinada porta em OV; ‘© Coloque uma det jerminada porta em 5V; # Leia o valor de uma determinada porta (teré OV ou 5V como resposta) © Arduino Duemilanove possui 14 portas digitais que estdo destacadas na figura a seguir Figura 17: Portas digitais do Arduino, de 13 a 0 Apesar de ser possivel, nio 6 recomendavel utilizar as portas 0 e 1 pois clas estéo diretamente ligadas ao sistema de comunicagdo do Arduino (pinos RX e TX — recepeao e transmissio, respectivamente) e, por isso, seu uso pode confiitar com o upload do software. Caso queira utilizé-las, certifique-se de desconectar quaisquer eixcuitos conectados a ela no momento do upload, Utilizaremos as fungées digitalRead e digitalWrite para ler escrever, respectivamente, nas portas di gitais. A fangio digitalWrite jé foi exemplificada em nosso exemplo Blink, onde acendemos e apagamos wm LED ao alternar a tensio da porta 13 entre 5V ¢ OV, com intervalo de 1 sogundo. Para exemplificar a funcio digital Read utilizaremos um botao, como no diagrama a seguir: Theep://eew. processing erG/ 6 CAPITULO 1, CONCEITOS BASICOS Figura 18: Esquema elétrico ligando um botao ao Arduino Montado o circuito acima, vamos programar o Arduino com o seguinte cédigo: define BOTAD 2 define LED 13, void setup() < pinode(LED, OUTPUT); pinMede(BOTAO, INPUT); } void loop) ¢ if (digitalRead(BOTAO) == HIGH) ¢ aigitalWrite(LED, LOW); + else ¢ digitalWrite(LED, HIGH); y , A fungio €igitalRead nos rotomna o valor correspondente & tenso que esta na porta que passamos entre parenteses. Em nosso exemplo, utilizamos a porta BOTAO (que na verdade é uma constante, definida através da diretiva #define), cujo valor é 2. O valor retormado 6 wma constante, mapeado da seguinte forma: ‘* HIGH, caso a tensdo na porta seja 5V; ‘* LOW, caso a tensio na porta seja OV; 0 que o programa faz, entdo, é apagar o LED caso 0 botao esteja pressionado e acendé-lo caso nao esteja, Fica como exercicio entender o eédigo a seguir, que é wana otimaizagdo do anterior e possti mesma funcionalidade: define BOTAD 2 define LED 13, void setup() { pinode(LED, OUTPUT); pinede(BOTAO, INPUT) ; , 1.6, PORTAS ANALOGICAS E DIGITAIS wv void leop() { digitalWrite(LED, !digitalRead(BOTAo)); y Dica: o caractere “!", em linguagem C, significa not ¢ tem como finalidade negar a expressio que segue & sua diveita, PWM PWM significa Modulagdo por Largura de Pulso (Pulse-Width Modulation, do Inglés) © consiste em manipu- larmos a razao eiclica de um sinal (conhecida do Inglés como duty cycle) a fim de transportar informagio ou controlar a poténcia de algum outro cireuito. Basicamente, teremos um sinal digital que oscila entre OV ¢ 5V com determinada frequéncia (0 Arduino trabalha com um padrao perto de 500H7) — fmciona como se fosse um clock, porém os tempos em que 0 sinal permanece em OV e 5V podem ser diferentes. Duty eyele € a razd0 do tempo em que o sinal permanece em 5V sobre o tempo total de uma oscilagao. A Figura 1.0 ilustra melhor esse conceito: T sv ov. Figura 1.9: Sinal PWM com duty cycle de 25% Assim, temos duty cycle VO" Try oT © que controlamos através de software 6 justamente a duty cycle, ou seja, 0 percentnal de tempo em que © sinal fica em 5V. Desa forma, podemos utilizar essa técnica para limitar a poténcia de algun cireuito. Por exemplo, considere que wm LED L; seja alimentado o tempo inteiro por um sinal constante de SV; j6 0 LED Lz € alimentado pelo sinal PWM acima (duty cycle de 25%). Através de um célculo simples de poténcia podemos notar que o LED L consumiré apenas 25% da poténcia do primeit. Infelizmente, por Iimitagées de hardware, 0 Arduino nao possui PWM em todas as portas digitais: apenas as portas 3, 5, 6, 9, 10 ¢ 11 sao privilegiadas e podem utilizar esse recurso. Para exemplificar o uso de controle de poténcia de um cireuito utilizando PWM vamos utilizar um LED em série com um resistor ligados & porta 11 (0 circuito & 0 mesmo do experimento Blink, s6 vamos mudar a porta) e o seguinte cédigo: define LED 11 void setup() { pinMode(LED, OUTPUT) ; y void loop { for (int i= 0; 3 < 255; are) ¢ analogirite(L®D, i); delay (30) ; y Na fimgao loop acima temos um lago fer, que conta de 0 a 255 (armazenando o valor do contador na variével 4), chamando a fimgao analogirite (passando como paramettos a porta do LED (1) e #) e esperando por 30 milisegundos a cada iteragio, 18 CAPITULO 1, CONCEITOS BAS sICOS A fangio analoglrite (apesar de estarmos utilizando uma porta digital) é responsivel pelo PWM e recebe como parametros a porta e um valor entre 0 ¢ 255 ~ esse valor corresponde ao duty cycle, onde 0 corresponde 2 0% e 255 a 100%. Quando vocé rodar o eddigo percebera que o LED acende de maneira mais suave ~ cada etapa de luminosidade diferente corresponde a uma iteragio do for. Fica como exercicio para o leitor modificar © programa para que © LED, além de acender, também apague suavemer 1.6.2. Portas analégicas Além das portas digitais o Arduino possui as portas analégicas. Ao contrétio das portas digitais, as portas analdgicas so apenas de entrada e nelas podemos ter como entrada infinitos valores de tensio (delimitados na faixa de OV a 5V). Como os conversores analégico-digitais (ADC — analog-digital converter, do Inglés) do Arduino possuem 10 bits de preciso, a precisdo das medicoes de tensio no Arduino é de por volta de 0,005V ou SmaV, Figura 1.10: Portas analégicas do Arduino, de 0 a5 Como os nomes de fungées no Arduino sio bastante intuitivos, utilizamos a fimgao analogRead para ler valores analégicos — ao chamar a fungio passamos como argumento o miimero da porta que desejamos ler (de 0.8.5), Como exemplo vamos regular a uminosidade de nosso LED (utilizando PWM) através da quantidade de luz detectada por um resistor dependente de luz (ou LDR ~ light dependent resistor, do Inglés). Monte o circuito segundo a figura 1.11 16, PORTAS ANALOGICAS E DIGITAIS 9 Figura 1.11: Circuito com LDR e LED Como os conversores analégico-digital possuem 10 bits de preciso, a fimgfio analogRead nos devolve wm. valor entre 0 ¢ 1023, onde 0 corresponde a uma leitura de OV na porta analdgica e 1023 corresponde a 5V (para valores intermediatios, basta fazer uma regra de trés simples, de maneira andloga com o PWM). Vamos carregar fem nosso Arduino 0 seguinte eédigo: define LED 11 define LDR 5 void setupQ) < inode (LED, OUTPUT) ; , void loop) ¢ int leitura = analoghead(LDR) ; int valorPWM = - 0.25 # leitura + 255; analogirite(LED, valorPWM) ; y Os valores 0.25 e 256 da linha que definem a varidvel valorPWM devem ser calibrados conforme iluminagao do ambiente, resistores utilizados e luminosidade desojada, Para o cédigo acima, teremos o seguinte corportamento do valor que colocamos na porta PWM a partir dos valores lidos na porta analégica: 20 CAPITULO 1. CONCEITOS BASICOS 250 200 = zu0 S00 50 ° 7 100 200-300-0500 6007008900 1000” Leura analégica Figura 1.12; Gréfico da fungdo PWM versus leitura analégica Ficana trés exercicios: ‘© Aprenda a utilizar um potencidmetro e o utilize para regular o brilho do LED, em ver. do LDR; ‘* Volte o LDR para seu lugar anterior e utilize o potenciém © para configurar os valores 0.25 e 255; ‘+ Leia o datasheet do circuito integrado LM35 e monte um cireuito parecido com 0 anterior, porém sensivel a temperatura (e nao mais a uz) Capitulo 2 Fundamentos de Eletrénica 21 22 LO 2, FUNDAMENTOS DE ELETRONICA 2.1 Resistores e Lei de Ohm Resistores so dispositives utilizados com a finalidade de transformar energia elétrica em energia térmica e/ou limitar a corrente dim como fungéo oferecer wna resisténcia A passagem da corrente elétrica — medimos essa resisténcia através da unidade 9 (ohm). Por consequéncia, eles causam wma queda de tensio na regido do cixcuito onde se encontram ~ muitas vezes acabamos utilizando esse efeito para conseguirmos tensbes intermedidrias, caso as fontes de tensio do circuito nao consigam fornet Sabendo-se a tensio e corrente em um resistor, podemos caleular sua resisténcia ‘rica em um cireuito. Como 0 proprio nome sugere, eles v R T Por sua vez, a resisténcia pode ser calculada através das caracteristicas do material resistivo _ pl a Onde p 6a resistividede da material, L 6 seu comprimento © A sua dea, ou soa, a resistencia & proporeional Se, para wn determinado citenito, Ve J tém uma relagio linear, ow seja, R é constante para insimeros valores de Ve I, entéo chamamos o material (que pose resistencia R) de dhmico. 2.1.1 Resistores em série Se possuirmos resistores em série em determinado cireuito, podemos calcular a resisténcia equivalente do mesmo somando-se as resistincias, através da f6rmula: Ray = Rit Ret.+R, Oo: ROR Figura 2.1: Resistores em série Retirado de http: //en. wikipedia. org/viki/Resistor 2.1.2 Resistores em paralelo Caso os resistores estejam em paralelo, a resisténcia equivalente seré o inverso da soma dos inversos das resis- ‘téncias, como na fSrmula a seguir: Figura 2.2: Resistores em paralelo Retirado de http: //en. wikipedia. org/viki/Resistor 2.2, CAPACITORES E INDUTORES 23 21.3 Cédigo de cores 0s resistores posstiem um eédigo de cores que nos permite identificar qual sua resisténcia. Para isso, mapeamos as cores das diversas faixas do resistor e utilizamos a seguinte férmula: R onde a, be © sio as primelras faixas ¢ ¢ a ultima faixa (geralmente prata ou dowada), que vepresenta a tolerancia. 10a +6) - 10° 4 ¢, VALOR NOMA ‘con EIN 7 valor ot I VALoRDA rournAnein ‘con [BOURADD Paata sen con Valor 5% am Figura 2.3: Cédigo de cores Retirado de http: //pt.wikipedia. org/viki/Resistor 2.1.4 Divisor de tensao Como citado acima, resistores criam uma queda de tensio na regiéo do circuito em que estio. Utilizando esse feito, podemos criar o que chamamos de divisores de tensio'; circuitos com resistores que, aplicada ume tensio, tém como saida uma fragio (dai o nome divisores) dessa tensio de entrada. Figura 2.4: Circuito divisor de tensio, A partir do cireuito acima, temos que Ry Vou = Te Vn Esse recurso 6 bastante itil quando precisamos medir um tenso maior do que nossos circuitos conseguem, Por exemplo: se quisermos medi uma tensao que varia de 9 a 12V no Arduino precisaremos colocé-la na faixa de 0 a BV, jé que as portas analégicas do Arduino trabalham nessa faixa menor. Para isso, poderfamos utilizar sum divisor de tensio cujos valores de resistencia resultassem em Vaye = Y. Dessa forma, o8 valores lidos em Vous seriam de 3 a AV, Porém, atengio: caso precisemos conectar resistores ou outros eixcnitos resistivos no pino Va, 0 eéleulo das tonsies muda © Vey passa a depender das novas resistincias do cireuito 2.2 Capacitores e indutores Apesar de nio estudarmos a fundo esses dois elementos bisicos de cireuitos, eles podem ser importantes no desenvolvimento de futuros projetos. Basicamente, capacitores e indutores ermazenam energia (pense como ry CAPITULO 2, FUNDAMENTOS DE ELETRONICA uma bateria em que vocd carrega e descarrega de tempos em tempos, porém com capacidade bem limitada) e sao bastante utilizados em filtzos de sinais, estabilizadores de tensao, circuitos ressonantes (como transmissores fe zeceptores de rédio), dentre outros. 2.2.1 Capacitores Os capacitores so componentes que armazenam energia em forma de campo elétrico. Sio formados por duas placas metélicas com wm dielétrco (isolante) no meio. A unidade de medida éo Farad (F), porém como 1 Farad € algo bem grande, comumente encontramos eapacitores na casa dos mP (miliFarad), juF (micxoFarad) © pF (icoFarad) Figura 2.5: Capacitor eletrolitico bastante comum no mercado Ah Figura 2.6: Representagao de um capacitor em cireuito elétrico 2.2.2 Indutores 0s indutores séo componentes que armazenam energia em forma de campo magnético. Geralmente so formados por bobinas (fio enrolado) com um condutor no meio, A unidade de medida é o Henry (H) Figura 2.7: Indutores de varios tipos, comuns no mercado 2.3, DIODOS 25 a aaae Figura 28: Representagdo de um indutor em circuito elétrico 2.3 Diodos Diodos sio componentes que tém a capacidade de conduszir comrente clétrica em uma dixogdo ¢ bloqued-la em outra — esse comportamento 6 chamado de retificagao e pode ser utilizado para converter corrente alternada (CA ou AC - alternating current, do Inglés -, a energia que temos em nossas tomadas) em corrente continua (CC ou DC = dtirect current, do Inglés -, a forma como as baterias nos fornecem energia). Outros usos de diodo sio protegao de cireuitos (contra corente reversa) ¢ extragdo de modulagao de sinais (por exemplo, para uso em circuits de comunicagao sem fo). \ \ Figura 2.9: Foto de um diodo cormum no mercado ~ a faixa menor (cinza, para esse diode) corresponde 80 terminal negativo Figura 2.10: Representagio de um diodo em cirenito elétrico 0 diodo conduzirs corrente elétrica caso a tensio em seu terminal positivo (+) seja maior que a tensio em seu terminal negativo (—), ou soja, funcionard como um curto-cireuito. Caso contrério, cle fmeionaré como cireuito aberto (no conduzira). E importante notar que para diodos reais existe uma queda de tensdo de 0,7V em sua jumgao P-N e, com isso, a tensio do lado positivo precisa ser maior que a tensio negativa + 0,7V para que ele conduza, 2.4 Transistores ‘Transistores so dispositivos semicondutores usados como amplificadores ou chaveadores. Sua entrada é uma corrente/tensio que altera a corrente, vensio de saida. Os transistores so a base de todos os eircuitos integrados ¢ placas modemos ~ alguns, como os microprocessadores, possuem milhoes dees. Para nossos estudos,iremos focar nos transistores de estrutura bipolar de jungio (ou BJT, Bipolar Junction Transistor, do Inglés) com polaridade NPN e PNP, porém existem outros tipos, como os FETs 26 CAPITULO 2, FUNDAMENTOS DE ELETRONICA Ic E B 8 E lc (@) NPN (©) PNP Figura 2.11: Simbolos do transistores BJT om circuito elétrico Os transistores possuem t1és terminais: base, coletor ¢ emissor. E suas principais equagies caracteristicas Jot le =Ie 6ln, onde ¢ é uma constante (também referida como hg) caracteristica do transistor (fator de amplificagao) A segunda equagio nos evidencia o poder de amplificagdo de um transistor: dependendo da corrente que colocarmos na base (corrente [g), ele permitiré maior ou menor corrente no coletor (corrente Ic). No mercado encontramos transistores NPN ¢ PNP com varios encapsulamentos diferentes. Alguns comuns sio 0 2N2904 (NPN) e 2N3906 (PNP). Figura 2.12: Componente 2N3904: transistor NPN com encapsulamento TO-92 2.4.1 Utilizagao de transistores com relés Relés so componentes titeis quando precisamos isolar eletronicamente um cireuito de controle de um eixcuito de poténcia. Se quisermos, por exemplo, aconder uma limpada incandescente (que utiliza corrente alternada) através do Arduino, podemos utilizar um relé: 0 Arduino controlaré o relé, que entao fara a conexio (ou nao) da lampada com a tomada. Existem relés mecanicos e de estado sélido (SSD ou Solid-state relay, do Inglés), porém iremos utilizar um relé mecdnico em nosso exemplo, por ser mais bazato e facil de se encontrar no mercado. Como relés possuem correntes de ativagio maiores que as portas digitais do Arduino conseguem suprie, precisamos amplificar a corrente que sai das portas digitais do Arduino para que ela seja capaz de acionar o relé =e isso faremos utilizando um transistor NPN, Utilizando um relé acionado por SV, um transistor NPN (2N3904) e dois resistores (1092 para o relé ¢ 4700 para a base do transistor) podemos utilizar o circuito a seguir para controlar qualquer carga de comente alternada — basta ligar a carga as saidas do relé, que nio estio indicadas no diagrama: 24, TRANSISTORES 7 Figura 2.13: Cireuito para ligar um relé (controlado por transistor) no Arduino Fica como exereieio para o leitor verificar como seria o uso de um transistor PNP. 2.4.2 Ponte-H Em alguns projetos precisamos inverter a tensio de entrada de determainado circuito. Por exemplo: os motores de corrente continua giram para um lado caso apliquemos tensio positiva em scx terminal esquerdo ¢ negativa, em seu terminal diteito. Porém, para fazé-los girar em sentido contrario, precisamos aplicar tensao negativa em seu terminal esquerdo e positiva em seu terminal direito. Podemos implementar circuitos que fazem essa inversio de tensio a partir de 4 transistores funcionando como chave. Esse tipo de cireuito se chama ponte-fl por conta da disposigao dos transistores com relagao a0 motor, como pode ser visto no diagrama a seguir: sl | \s2 s3 s4 CT iS) Figura 2.14: Diagrama de uma ponte-H 2B CAPITULO 2, FUNDAMENTOS DE ELETRONICA Quando fechamos as chaves SI ¢ S4, 0 terminal esquerdo do motor recebe tensio positiva ¢ © terminal direito recebe tensio negativa. JA quando fechamos as chaves $2 e $3, 0 terminal esquerdo do motor recebe tensio negativa eo terminal direito recebe tensao positiva. O que precisamos fazer é substituir as chaves por transistores, para entio podermos controlar o sentido de rotagio do motor através do Arduino. A seguir temos um circuito bastante completo de ponte-H que utiliza diodos de protegao ¢ acopladores Spticos para dar mais seguranga 3 solagao como um todo: Battery Fwo © Rev C os eNat Figura 2.15; Esquema de wma ponte-II com transistores Retirado de http://www mcranis .con/chuck/robotics/tutorial/h-bridge/ Para quem nio quer ter trabalho montando 0 cizeuito, existe a opgio de comprar wm cixcuito integrado pronto com a ponte-H - uma das opgies é o L293D. PWM e ponte-H para controle de velocidade Como com PWM conseguimos controlar a quantidade de poténcia que seré entregue a um circuito, caso utilize. mos PWM como entrada do controle de uma ponte-H, podemos limitar a quantidade de poténcia entregue ao motor ¢, com isso, controlar sua velocidade. Capitulo 3 Eletrénica Digital 30 CAPITULO 3, ELETRONICA DIGITAL 3.1 Introdugio Dizemos que um cirenito é digital quando suas entradas e saidas trabalham com sinais digitais, ou soja, sinais com valores bem dofinidos. Geralmente esses circuitos trabalham apenas com dois valores e, por isso, chamamos esses sistemas de digitais binérios. Quando estamos falando de cireuitos digitais, estamos falando de transporte de informagao. E como temos somente dois valores possiveis de tensdo, teremos toda a informagio codificada em binario ~ chamamos cada informagio binaria de bit (digito bindvio ou binary digit, do Inglés) e os representamos por 0 e 1 Dessa forma, se nossos cixcuitos trabalham com tensdes de OV e SV, dizemos que OV equivale ao bit 0 5V equivale ao bit 1 - agora passamos a falar de bits (informagdo) em ver de tensdes, ou seja, estamos pensando 3.2 Portas légicas Assim como na Matemética possuimos operagdes bisicas como soma, subtragao, multiplicagao e divisio, na aritmética binstia temos operagdes que podemos fazer com nossos bits. Para simplificar, vamos tratar as operagées com uma ou duas entradas, apenas uma safda, tratar o bit 0 como sindnimo de falso e 0 bit 1 como sindnimo de verdadeiro, Dessa forma, temos as seguintes operagoes: resulta ‘+ AND: operagio que resulta em bit 1 somente quando os dois bits de entrada so 1 (ow seja, em “verdadeiro” se somente o primeiro e o segundo bit forem “verdadeiros”) ‘* OR: operagio que resulta em 1 quando pelo menos uma das entradas é 1 (ou seja, resulta em “verdadeiro’ quando o primeito ou o segundo bit forem “verdadeiros",); * NOT: operagao que resulta na inversio do bit de entrada; * XOR: também chamade de exclusive or (“ou exchusivo”), essa operagao $6 resulta em bit 1 quando somente uum dos bits de entrada é 1. 0 circuito abaixo exemplifica a criagio de uma porta do tipo AND: +5V AAND B Figura 3.1: Porta légica AND eriada a partir de diodos ¢ resistor 3.2.1 Tabela-verdade Para um niimero finito de entradas podemos aplicar as operagdes ldgicas em todos os possiveis valores dessa entrada e obter todos os possiveis resultados da operagio/fungao légica. Chama-se tabela-verdade a tabela que lista todas essas possibilidades. Para as fungSes légicas acima, quando temos duas entradas temos um total de 4 possiveis combinagées de entradas diferentes (o niimero de combinagées bindrias é sempre 2"¥mere de entradas) 6 as soguintes tabelas 3.2, PORTAS LOGICAS 31 [A[B]AaNDB] «= [ABA ORB] 2[B]AXORB] (o[o o | | a [yora a fo o | bhi) boos Pps | pte oy 1[e | 1 0 T[o L| PRI) ERD) Gees The (e Opageo AND (b) Opeagio OF (a) Operagin KOR 1a 3.2: Tabelas-verdade das operagies Idgicas bésicas én das operagoes basicas, temos as negagSes nas mesmas, como NAND, NOR e XNOR. Para saber a tabela-verdade dessas, basta negar a saida da tabela verdade das outras operagdes (AND, OR e XOR, respec- tivamer 3.2.2 Representagdo das operacées As operagGes ldgicas citadas acima podem ser representadas em circnitos pelos seguintes simbolos: tS -D- D> DD WD DW (Nor (AND () NAND (a) oR (@) NOR () xoR (@) XNOR Figura 3.3: Simbolos das operagées Idgicas gm disso, podem ser escritas por extenso: Operacao | Representagao NOTA A AAND B. AVB ANAND B. A+B AORB AB ANORB. aE AXORB AB AXNORB 3.2.3. Fungdes légicas compostas Assim como na Matemitica, podemos fazer composigSes das func! (compostas). Af OR s I6gicas bésicas para obter novas sao XOR, por exemplo, pode ser obtida através da composig3o das fungdes NOT, AGB A-B+AB A®B B Figura 3.4: Diagrama da fimgio composta XOR 32 CAPITULO 3, ELETRONICA DIGITAL A partir de fungdes légicas compostas ¢ Uécnivas como realimentagio conseguimos criar dispositives mais complexos como latches, flip-flops, coders/decoders, muz/demuz, dentre outros, Esses dispositivos sio a base para criar circuitos Igicos de alto nivel, por exemplo: com alguns flip-flops conseguimos criar registradores, que podem evoluir para memérias e fazer parte do circuito de tm microprocessador. Capitulo 4 Fazendo barulho com o Arduino 33 34 CAPITULO 4, FAZENDO BARULHO COM O ARDUINO Para quem gosta de fazer misica, © Arduino possui uma fungao pronta para eriar uma onda quadrada na frequéncia e no tempo desejados. Apesar de serem notas simples e a onda ser quadada, adicionando circuits extras (para filtros e distorges) ¢ um poutco de eriatividade, conseguimos criar sons legais para nossos projetos. ‘A fungio que faz esse trabalho é chamada tone. Vamos eriar um projeto-exemplo ligando um buzzer ~ componente que reprodus sons de acordo com as variagGes de tensio em seus terminals ~ para tocar nosso som da seguinte forma Figura 4.1: Cizcuito com buzzer Utilizaremos o seguinte eddigo: define BUZZER $ int notas{] = { 524, 588, 660, 699, 785, 881, 989 >; void setup() { pinMode (BUZZER, OUTPUT); y void 1eopO ¢ for (int i= 0; <7; ise) { ‘tone (BUZZER, notas[i}, 1000); delay (1000) ; + deiay (1000) ; ? Além do laco for, utilizamos também wm vetor de inteizos chamado notas. Uma vetor nada mais é que wm local onde armazenamos varias varidveis de mesmo tipo. Os vetores sio indexados ¢ para acessar cada item guardado neles utilizamos indices que variam de 0 a ~1, onde n é 0 mimero total de elementos. No exemplo acima, utilizamos a varidvel 1 para percorter 0 vetor e, por isso, para acessar os elementos utilizamos 4, Os segredos do eédigo acima sio: ‘# Saber a frequéncia das notas! ‘+ Sabor utilizar a funcio tone. A funcio tone recebe trés pardmettos, respectivamente: pino (precisa ser tum pino que tenha supoxte a PWM), frequéncia da nota e duragio do som em milissegundos. ba mais em lp /pl wikipedia org wiki Série barminiea_(msies) cK Capitulo 5 Armazenando na EEPROM 36. CAPITULO 5. ARMAZENANDO NA EEPROM EEPROM (Electrically Erasable Programmable Read-Only Memory, do Inglés) 6 um tipo de meméria nfo volatil, ou seja, que nao se apage ao retirarmos energia de seu circuito (o que nao é verdade para as memérias do tipo RAM, por exemplo). O ATMega328, microcontrolador presente no Arduino Duemilanove, possui um circuito EEPROM integrado de 1024 bytes (ou 1KiB) ~ em outras versies do Arduino, como o Mega (que usa ATMegal280 ow ATMega2560, dependendo do modelo), a EEPROM pode chegar até 4KiB. Ter o circuito EEPROM integrado significa que nosso software pode armazenar LKiB de dados que nio serdo perdidos (mesmo que desliguemos o Arduino da fonte de alimentagéo) — funciona como se fosse um micro-pendrive. Para wtilizar a EEPROM nao precisamos de circuitos adicionais: precisamos apenas utilizar a biblioteca EEPROM.h. Porém, para nosso exemplo, vamos ligar um LED na porta 11 c utilizar o seguinte cédigo include define LED 11 void setup() { for Gnt i= 0; i < 18; an) { BEPROM.vrite(i, i * 1); } y void loop { for (int i= 0; 1 < 16; a6) ¢ byte leitura = EEPROM.read(i) ; analogirite(LED, leitura); aelay(50) 5 x deiay (1000) ; > A diretiva #inelude diz ao compilador que queremos incluir a biblioteca EEPROM. — isso quer dizer que, além do cédigo que digitamos, utilizaremos um cédigo jd criado pela equipe do Arduino para facilitar a utilizagio da EEPROM. 0 exemplo nada mais faz que escrever 16 bytes na EEPROM (na fungao setup), ler um por tm © configurar o valor lido como saida PWM da porta 11 (na funcio loop). ‘A funcao de escrita, EEPROM. write, revebe dois parametros: o enderogo onde ela vai escrever (um valor entre 0 © 1023, no caso do Arduino Duemilanove com ATMega328) e o byte que escreveremos nesse local, ja a fungao EEPROM. read recebe apenas um pardmetzo (0 enderego de onde ela far4 a leitura) ¢ nos retorna o valor lido na meméria (um byte).

You might also like