Baixe o app para aproveitar ainda mais
Prévia do material em texto
Robótica Flávio Luiz Puhl Junior Entradas e saídas digitais Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar os comandos de leitura das entradas digitais. � Examinar as configurações do hardware utilizado nas entradas e saídas digitais. � Analisar as aplicações das entradas e saídas digitais. Introdução O uso de entradas e saídas digitais é o recurso que permite a interação do sistema microcontrolado com o meio no qual ele está inserido, na sua forma mais básica. Esse recurso é responsável, por exemplo, por realizar o acionamento de cargas, a verificação do estado dos botões, a comunicação com displays, etc. Neste capítulo, você vai estudar os códigos de programação utilizados para comandar os pinos do microcontrolador para que atuam como entradas ou saídas digitais. Vai também conhecer o funcionamento dos circuitos eletrônicos compreendidos nas entradas e saídas digitais e entender a aplicação em sistemas reais. Comandando entradas e saídas digitais Vamos começar este capítulo estudando os comandos de software envolvi- dos na leitura e escrita nos pinos de entradas e saídas digitais de uma placa eletrônica Arduino, que é open-source, ou seja, é disponibilizado livremente para qualquer um que deseje ter acesso. As entradas digitais têm a função de interpretar a condição externa do pino quanto à existência ou não de tensão nele. Por outro lado, quando o pino assume a função de saída digital, ele externa uma condição previamente definida em código para o meio externo. Um clássico exemplo é um LED e um botão. Se quisermos ligar o LED, devemos configurar o pino com saída digital, e se quisermos obter a informação da condição do botão, devemos configurar o pino como entrada digital. Para fazer a programação do Arduino, precisamos de um ambiente de programação (IDE, Integrated Development Environment), que é onde são colocados, de forma lógica, os comandos de programação para obtermos os resultados esperados. A IDE desenvolvida especialmente para o Arduino costuma ser a mais utilizada, mas existem muitas outras, de diferentes origens e características. As placas de desenvolvimento Arduino fazem uso de microprocessa- dores ATmega328, que têm o recurso de pinagem configurável. Assim, ao contrário dos antigos microprocessadores (por exemplo, o 8051), que tinham pinos dedicados para serem saídas e pinos dedicados para serem entradas, no ATmega, os pinos podem ser definidos como entrada ou saída via programação. Veremos os seguintes comandos para fazer essa programação: digitalRead( ), digitalWrite( ) e pinMode( ). Na primeira etapa de nosso código, ou software, é necessário declarar qual a função de cada pino de acordo com a necessidade do projeto. Por padrão, inicialmente o Arduino assume que todos os seus pinos são entradas digitais, portanto, não é necessário declará-las. Mesmo assim, é uma boa prática que haja essa declaração, até mesmo para uma melhor interpretação posterior do código. A função que provê a definição da funcionalidade do pino é a pinMode(pin,Mode), cujos parâmetros são pin, onde devemos informar qual o pino estamos configurando, e Mode, onde devemos informar a configuração do pino. Essa configuração pode assumir as seguintes possibilidades. Entradas e saídas digitais2 � INPUT: define o pino como uma entrada digital. O pino assume um estado de alta impedância, na ordem de 100Mohm. � OUTPUT: define o pino como uma saída digital. O pino assume um estado de baixa impedância. � INPUT_PULLUP: define o pino como uma entrada digital e ainda aciona um circuito de pull-up interno do microprocessador. A função digitalRead(pin) faz a leitura do estado digital do pino. Ela possui como único parâmetro o pin, que é onde devemos indicar qual o pino estamos utilizando. Essa função pode retornar somente dois valores: HIGH ou LOW, sendo que HIGH significa que o pino tem tensão aplicada e LOW, que não tem tensão aplicada. A função digitalWrite(pin, value) faz a escrita digital no pino e possui dois parâmetros: pin, que assim como a função anterior indica qual o pino está sendo tratado, e value, que é o valor que será externado pelo pino e que pode assumir somente duas condições, HIGH ou LOW. Como recurso pronto para uso no Arduino, a placa tem um LED conectado ao pino 13 (conhecido como built-in LED). Um exemplo clássico da utilização do pino como saída digital é o código-exemplo blink disponível na IDE do Arduino, que faz o built-in LED piscar. Veja um exemplo dele na Figura 1. Figura 1. Exemplo da montagem e código blink para acionar o built-in LED. Fonte: Arduino (2019c). Como você pode observar na Figura 1, o código se divide em duas etapas: setup, que é executado somente uma vez e define a funcionalidade do pino, e loop, que é a função que executa infinitamente e possui as instruções para ligar e desligar o pino. 3Entradas e saídas digitais Vejamos um exemplo de uso da entrada digital. Infelizmente, o Arduino não tem um interruptor built-in, portanto precisamos adicionar os componentes externamente à placa. O exemplo a seguir demonstra a integração das duas funções (leitura e escrita) em um único código com o intuito de fazer o aciona- mento do built-in LED quando o interruptor estiver acionado. Veja a Figura 2. Figura 2. Montagem eletrônica e código de leitura e escrita digitais. Inicialmente, é realizada a configuração dos pinos conforme a necessidade do seu projeto. Aqui, vamos definir o pino 2 como entrada digital, o pino 13 como saída digital e as instruções incorporadas ao void loop(), onde digitalRead(2) retornará o valor HIGH ou LOW dependendo da condição do interruptor. Por ser um projeto com o objetivo de ser financeiramente acessível e fácil de ser reproduzido, a placa de desenvolvimento Arduino não possui componentes eletrô- nicos, para proteção de seus pinos. Os pinos do microprocessador estão diretamente ligados ao barramento que utilizamos para fazer nossas conexões (PROGRAMMING ELECTRONICS ACADEMY, 2019). Portanto, alguns cuidados devem ser observados para que o hardware não seja danificado. � Não conectar os pinos para ground. Isso poderá exceder a corrente máxima per- mitida do pino (40 mA). � Não conectar os pinos uns aos outros. Como o item anterior, isso poderá exceder a capacidade de corrente do(s) pino(s). � Não exceder a tensão de 5VDC aplicada nos pinos. Como a tensão de funciona- mento é de 5VDC, aplicar tensão maior do que essa no pino ocasionará inversão da corrente, e o dano ocorrerá pelo evento “corrente reversa”. Entradas e saídas digitais4 Hardware das entradas e saídas digitais A placa de desenvolvimento Arduino possui um barramento com os pinos de entrada e saída digitais. Esse barramento também pode ser conhecido como conectores de expansão, que ficam expostos na borda da placa. Existem 14 pinos que podem ser configurados individualmente como entrada ou saída digitais, conforme a necessidade de seu projeto. Eles são numerados de 0 a 13, como você pode ver na Figura 3 (WHEAT, 2016). Figura 3. Arduino Uno com destaque para o barramento de entradas e saídas digitais. Fonte: Adaptada de Souza (2013). Entradas / saídas digitais Os pinos 0 e 1 do barramento de entradas e saídas digitais têm a nomenclatura de TX e RX, pois são os pinos responsáveis pela comunicação serial com o computador para gravação dos códigos na placa de desenvolvimento. Não é recomendado utilizar esses pinos no projeto, pois isso pode causar perda da funcionalidade de comunicação e, consequentemente, não será possível realizar a gravação do código, a não ser que o circuito adicionado seja removido para gravação e depois recolocado. Portanto, apesar de dizermos que o Arduino tem 14 pinos digitais dedicados disponíveis, na prática, são 12 pinos. 5Entradas e saídas digitais Os pinos de entrada analógica também podem ser configurados como entradas e saídas digitais, possibilitando a adição de mais seispinos para seu projeto. Entradas digitais A arquitetura de hardware do Arduino segue o padrão TTL, no qual, tipi- camente, a condição “desligada” (LOW, 0) é considerada quando o nível de tensão aplicado está entre 0 e 0,8 V e a condição “ligada” (HIGH, 1) é considerada quando a tensão aplicada está entre 2,0 V e 5,0 V. Entre 0,9 V e 1,9 V não existe uma condição definida, e o sistema assume valores aleatórios (OMEGA, [199-?]). Quando os pinos são configurados para assumir a função de entrada digi- tal, com uso da instrução pinMode(pin, Mode), ocorre que, internamente ao microprocessador, alguns registradores são definidos para essa função. Para um correto desempenho da função de entrada digital, o pino deve ser ligado a resistores de pull-up ou pull-down, de acordo com seu projeto. Via código é possível ativar o resistor de pull-up interno do microprocessador. Se o pino estiver conectado ao circuito sem os resistores adicionais, durante o funcionamento ele pode assumir valores aleatórios de ligado e desligado devido à sensibilidade do circuito e aos ruídos elétricos inerentes ao meio em estamos. Sendo assim, é recomendado que o pino faça uso dos resistores conforme indicado na Figura 4. Alguns pinos de entrada digital ainda podem ter funcionalidades especiais e dedicadas, como, por exemplo, os pinos com funcionalidade PWM e os pinos para comunicação SCK, MISO, MOSI, SCL e SDA. Os pinos 13, 12 e 11 têm a funcionalidade adicional de comunicação SPI (Serial Peripheral Interface). A SPI é uma comunicação serial síncrona de alta velocidade e é normalmente utilizada para comunicação entre o Arduino e periféricos externos, tipicamente displays, EEPROM, cartões SD, etc. (TEXAS INSTRUMENTS, 2012). Os pinos A4 e A5 têm a funcionalidade de comunicação I2C (Inter-Inte- grated Circuit), que é um sistema desenvolvido pela Phillips Semiconductor para comunicação entre periféricos. A grande diferença entre este modo de comunicação e o SPI é que ele utiliza apenas dois fios e não permite fluxo simultâneo entre os periféricos (BARNETT; COX; O’CULL, 2006). Entradas e saídas digitais6 Figura 4. Possíveis configurações das entradas digitais. Ar du in o AT m eg a 32 8 Ar du in o AT m eg a 32 8 Ar du in o AT m eg a 32 8 Ar du in o AT m eg a 32 8 Ar du in o AT m eg a 32 8 Ar du in o AT m eg a 32 8 VSS VSS VSSVSS A) Sem resistor, conexão direta B) Pull-up resistor Chave aberta, entrada digital em HIGH D) Pull-down resistor Chave aberta, entrada digital em LOW E) Pull-down resistor Chave fechada, entrada digital em HIGH F) Pull-up resistor interno Chave aberta, entrada digital em HIGH C) Pull-up resistor Chave fechada, entrada digital em LOW Saídas digitais Os mesmos pinos que acabamos de ver como entradas digitais podem ser configurados como saídas digitais. Cada pino de saída digital pode fornecer até 40 mA, mas a corrente total dos pinos utilizados não pode exceder 200 mA. Essa corrente individual é suficiente para energizar um LED, sendo necessário adicionar em série um resistor de pelo menos 470ohms, para limitar a corrente e proteger a placa. Para acionamento de cargas que exigem mais corrente, como uma lâmpada residencial, é necessário incluir uma etapa física de amplificação de corrente, também conhecida como driver. Essa etapa física pode ser composta por relés ou optoacopladores, que manterão a corrente dos pinos do Arduino dentro 7Entradas e saídas digitais de limites aceitáveis de operação enquanto a carga opera com seus valores nominais. Os pinos 3, 5, 6, 9, 10 e 11 podem prover o recurso de PWM (Pulse With Modulation), que é uma técnica de modulação do tempo de acionamento do pino (duty cycle) com a frequência fixa. No caso do Arduino, essa frequência é fixa em 490 Hz, sendo esses pinos considerados de alta frequência de acionamento. Os outros pinos não conseguem realizar a troca de estados ligado/desligado de forma tão rápida. O PWM é utilizado para controle de velocidade de motores, controle de luminosidade, etc. Acompanhe um exemplo de driver na Figura 5. Figura 5. Exemplo de driver do Arduino para acionamento de uma lâmpada. Fonte: Adaptada de MaxPhi (2017). Arduino Uno (Rev3) R2 1 kΩ R3 1 kΩ LED1 Vermelho (633 nm) U2 Q1 BC548 Relé Conectar a alimentação de corrente alternada em série J1 Terminal Interagindo com o meio externo Os hardwares de desenvolvimento Arduino possibilitam inúmeras aplica- ções, pois o baixo custo desses hardwares, combinado com a facilidade de programação e grandes comunidades fazendo uso e divulgando o conheci- mento, colaborou para a permeabilidade do uso em diferentes áreas e níveis de conhecimento. Veremos agora algumas aplicações práticas do Arduino utilizando entradas e saídas digitais. Entradas e saídas digitais8 Com uma placa de desenvolvimento e alguns LEDs, podemos criar um dado eletrônico para substituir o tradicional dado utilizado nos jogos de tabuleiro. Para este projeto, utilizaremos as funções de entrada e saída digitais e uma função matemática chamada random(max), na qual a função retornará um número aleatório limitado ao valor estipulado em max (MONK, 2010). Neste exemplo, podemos observar que os pinos conectados aos LEDs são inicializados como saídas digitais dentro da função void setup( ) logo no início do código. Em seguida, é definido o estado lógico LOW, ou desligado, para que as saídas iniciem em baixo nível e os LEDs iniciem desligados. Não é necessário declarar a entrada digital, pois, naturalmente, os pinos já estão configurados como entradas. Observe que os LEDs estão conectados direta- mente aos pinos, utilizando somente um resistor para a limitação de corrente; a entrada digital possui um resistor de pull-down para evitar acionamentos indesejados. Ao apertar o botão de “rolar o dado”, a função random retorna um valor inteiro aleatório entre os limites definidos para a função e então o resultado é exibido nos LEDs. O código apresentado na Figura 7 (e seu esquema elétrico e circuito, mostrados na Figura 6) tem uma funcionalidade mínima, mas mais características podem ser adicionadas para uma apresentação mais parecida com a de um dado usual, como, por exemplo, os LEDs piscarem gradualmente até chegarem no valor final. Figura 6. Esquema elétrico e circuito montado do dado eletrônico. Fonte: Monk (2010). 9Entradas e saídas digitais Figura 7. Código-fonte para o dado eletrônico. Fonte: Adaptada de Monk (2010). Um dos temas mais populares em discussão atualmente é a Internet das Coisas (IoT, Internet of Things), que trata da utilização de placas de desenvolvi- mento como o Arduino para atuação a distância, via Internet, de praticamente qualquer coisa. Um exemplo clássico de IoT é o acionamento a distância de lâmpadas, motores, sistemas de irrigação ou algum outro periférico, algo que, até algum tempo atrás, teria um custo significativo para o usuário residencial comum. No próximo exemplo, utilizaremos o pino de saída digital com fun- cionalidade PWM para controlar a velocidade de um pequeno ventilador, mas que poderia ser uma iluminação LED ou alguma outra carga (MONK, 2014). Como a corrente necessária para o funcionamento do motor é muito maior do que a corrente máxima permitida para o pino digital do Arduino (40mA máximo), precisamos implementar uma etapa de potência, ou driver, para que não haja danos à placa e para que o motor possa funcionar em pleno regime. O funcionamento desse programa é simples: por meio do terminal na IDE do Arduino, o usuário irá digitar um valor numérico de 0 a 9 e o código irá mapear esse valor para a saída PWM, que fornecerá de 0 a 100% de tensão para a carga. Acompanhe como fazemos isso nas Figuras 8 e 9. Entradas e saídas digitais10 Figura 8. Esquema elétrico e circuito montado do controle de velocidade. Fonte: Monk (2014, p. 139). Figura 9. Código-fonte para o controle de velocidade. Fonte: Adaptada de Monk (2014, p. 140). Note que esse exemplo utilizaa função analogWrite( ) para enviar o co- mando de PWM para o pino digital. Apesar de fazer referência a uma escrita analógica, trata-se de uma saída digital PWM. 11Entradas e saídas digitais ARDUINO. Blink. [S. l.], 2019c. Disponível em: https://www.arduino.cc/en/tutorial/blink. Acesso em: 27 mar. 2019. ARDUINO. DigitalRead( ). [S. l.], 2019a. Disponível em: https://www.arduino.cc/reference/ en/language/functions/digital-io/digitalread/. Acesso em: 27 mar. 2019. ARDUINO. DigitalWrite( ). [S. l.], 2019b. Disponível em: https://www.arduino.cc/reference/ pt/language/functions/digital-io/digitalwrite/. Acesso em: 27 mar. 2019. BARNETT, R. H.; COX, S.; O’CULL, L. Embedded C programming and the Atmel AVR. 2. ed. New York: Cengage, 2006. MAXPHI. Relay interfacing with Arduino. [S. l.], 2017. Disponível em: https://www.maxphi. com/relay-interfacing-arduino-tutorial. Acesso em: 27 mar. 2019. MONK, S. 30 Arduino projects for the evil genius. New York: McGraw-Hill, 2010. MONK, S. 30 projetos com Arduino. 2. ed. Porto Alegre: Bookman, 2014. (Série Tekne). OMEGA. Digital I/O Functionality. [S. l.], [199-?]. Disponível em: https://www.omega.com/ literature/transactions/volume2/digitalio.html. Acesso em: 27 mar. 2019. PROGRAMMING ELECTRONICS ACADEMY. 5 ways to destroy an Arduino. [S. l.], 2019. Disponível em: https://programmingelectronics.com/5-ways-to-destroy-an-arduino/. Acesso em: 27 mar. 2019. SOUZA, F. Usando os pinos digitais do Arduino. Brasil, 2013. Disponível em: https://www. embarcados.com.br/pinos-digitais-do-arduino/. Acesso em: 27 mar. 2019. TEXAS INSTRUMENTS. KeyStone Architecture Serial Peripheral Interface (SPI). Dallas, 2012. Dis- ponível em: http://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf. Acesso em: 27 mar. 2019. WHEAT, D. Arduino internals. New York: Apress, 2016. Leituras recomendadas ATMEL CORPORATION. ATmega328P Datasheet. San Jose, 2015. Disponível em: http://ww1. microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers- -ATmega328P_Datasheet.pdf. Acesso em: 27 mar. 2019. BENETTA, A. et al. Stepper motor drives for robotic applications. In: IEEE International Power Engineering and Optimization Conference, 2012, Melaka, Malaysia. Anais ele- trônicos… Disponível em: https://ieeexplore.ieee.org/abstract/document/6230890. Acesso em: 27 mar. 2019. RUGGED CIRCUITS. 10 ways to destroy an Arduino. Michigan, [201-?]. Disponível em: https://www.rugged-circuits.com/10-ways-to-destroy-an-arduino. Acesso em: 27 mar. 2019. Entradas e saídas digitais12
Compartilhar