Baixe o app para aproveitar ainda mais
Prévia do material em texto
CAPACITAÇÃO TÉCNICA NA PLATAFORMA ARDUINO CONTROLE E PROCESSOS INDUSTRIAIS CARLOS BARREIRA DA SILVA FARINHAS A expansão do Ensino Técnico no Brasil, fator importante para melhoria de nossos recursos humanos, é um dos pilares do desenvolvimento do país. Esse objetivo, dos governos estaduais e federal, visa à melhoria da competitividade de nossos produtos e serviços, vis-à-vis com os dos países com os quais mantemos relações comerciais. Em São Paulo, nos últimos anos, o governo estadual tem investido de forma contínua na ampliação e melhoria da sua rede de escolas técnicas - Etecs e Classes Descentralizadas (fruto de parcerias com a Secretaria Estadual de Educação e com Prefeituras). Esse esforço fez com que, de agosto de 2008 a 2011, as matrículas do Ensino Técnico (concomitante, subsequente e integrado, presencial e a distância) evoluíssem de 92.578 para 162.105. A garantia da boa qualidade da educação profissional desses milhares de jovens e de trabalhadores requer investimentos em reformas, instalações/laboratórios, material didático e, principalmente, atualização técnica e pedagógica de professores e gestores escolares. A parceria do Governo Federal com o Estado de São Paulo, firmada por intermédio do Programa Brasil Profissionalizado, é um apoio significativo para que a oferta pública de ensino técnico em São Paulo cresça com a qualidade atual e possa contribuir para o desenvolvimento econômico e social do estado e, consequentemente do país. Almério Melquíades de Araújo Coordenador de Ensino Médio e Técnico Centro Estadual de Educação Tecnológica Paula Souza Diretora Superintendente Laura Laganá Vice-Diretor Superintendente César Silva Chefe de Gabinete da Superintendência Luiz Carlos Quadrelli Coordenador do Ensino Médio e Técnico Almério Melquíades de Araújo REALIZAÇÃO Unidade de Ensino Médio e Técnico Grupo de Capacitação Técnica, Pedagógica e de Gestão - Cetec Capacitações Responsável Cetec Capacitações Lucília dos Anjos Felgueiras Guerra Responsável Brasil Profissionalizado Silvana Maria Brenha Ribeiro Coordenador de Projetos Luiz Saito Revisão de Texto Yara Denadai Revisão de Conteúdo Marcos Augusto Cunha Couto Estácio Projeto Gráfico Diego Santos Fábio Gomes Priscila Freire Projeto de formação continuada de professores da educação profissional do Programa Brasil Profissionalizado - Centro Paula Souza - Setec/MEC “Para você beber vinho numa taça cheia de chá, é necessário primeiro jogar fora o chá para, então, beber o vinho.” Sumário Por que utilizar a Plataforma Arduino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 A família Arduino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Microcontrolador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Características: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Periféricos: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Descrição dos pinos:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 O conjunto didático da empresa EMPRETEC. . . . . . . . . . . . . . . . . . . . . . . . . . . 18 A placa Arduino compatível - EMPRETEC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Pinos Digitais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Pinos Analógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Pinos de alimentação (POWER). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 LEDs indicativos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 A Linguagem utilizada para programação.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Exemplo de programa.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Explicando o programa Blink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Instalação.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 O ambiente de programação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Escrevendo um programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Alterando o programa.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 EX-1 – Conectando LEDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 EX-2 – Conectando LEDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 EX-3 – Conectando LEDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Adicionando variáveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 EX-4 – Inserindo variável tempo 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 EX-5 – Inserindo variável tempo 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Ligando um botão e lendo o estado de um botão. . . . . . . . . . . . . . . . . . . . . 46 EX-6 – Ligando um botão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 EX-7 – Ligando um botão II. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 EX 8 – Ligando dois botões.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 EX-9 – Ligando botão com Pull up interno. . . . . . . . . . . . . . . . . . . . . . . . 50 Usando a biblioteca bounce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Resolvendo operações lógicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 EX-10 - Operações lógicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 EX-11 - Expressões lógicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Utilizando o monitor serial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 EX-12 – Calculando valores em um retificador. . . . . . . . . . . . . . . . . . . . . 58 EX-13 – Calculando a quantidade de azulejos. . . . . . . . . . . . . . . . . . . . . 59 EX-14 - Operações lógicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 EX-15 - Expressões lógicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 If (forma simples) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Estruturas condicionais – comando if - else . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 EX-16 - Utilizando comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 EX-17 - Utilizando comando if 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 EX-18 - Utilizando comando if 3.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Utilizando if else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 EX-19 - Utilizando comando if – else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Comando for. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Entradas analógicas.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Lendo sensores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Utilizando a função MAP.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 EX- 20 – Mapeando o potenciômetro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 EX- 21 – Controlando o Led com o LDR. . . . . . . . . . . . . . . . . . . . . . . . . . . 78 PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 EX- 22 – Controlando o Led com PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 O sensor de temperatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 EX- 23 – Mapeando o sensor de temperatura. . . . . . . . . . . . . . . . . . . . . 83 Utilizando o relé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 EX- 24 – Acionando o relé em uma determina temperatura. . . . . . . . 87 Utilizando o sensor reflexivo.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 EX- 25 – Reconhecendo cores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Controle de motor DC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 EX- 26 – Controle de velocidade e direção de um motor DC através de ponte H com transistores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Utilizando o L293D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 EX- 27 – Controle de velocidade e direção de um motor DC com CI L293D . . . . . . . . . . . . . . . . . . . . . . . 98 Motor de passo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 EX- 28 – Controle de motor de passo com ULN2003. . . . . . . . . . . . . . 102 Por que utilizar a Plataforma Arduino. Capítulo 1 Arduino é o nome dado a uma plataforma de desenvolvimento de microcontrola- dores feita para simplificar o projeto eletrônico, prototipagem e experimentação para artistas, hackers, amadores, pessoas que tenham pouco conhecimento de eletrônica e/ou de programação. Arduino contêm um microcontrolador Atmega - que é um “computador” com- pleto com CPU, RAM, memória Flash, e pinos de I/O todos em um único chip e foi projetado para que possa ser ligado diretamente nos pinos de I/O, diversos tipos de sensores, LEDs, pequenos motores, relés, etc. Através desses pinos, é possível ler tensões de entrada (digital ou analógico) entre 0 e 5 volts. O Arduino se conecta ao seu computador via USB e pode ser programado de forma simples, utilizando uma linguagem bem parecida com a linguagem C / C + + em uma IDE desenvolvida para esse fim. O projeto Arduino que conhecemos hoje, foi iniciado no ano de 2005 com a fina- lidade de ser uma opção barata para que alunos pudessem realizar seus projetos com microcontroladores. Foi desde o início desenvolvida para ser uma platafor- ma (um conjunto de soluções) open-source composto por uma placa, cujo es- quemas estão disponíveis no site oficial, um ambiente de desenvolvimento (IDE) disponível gratuitamente e por uma linguagem de programação simples e fácil de utilizar, além de ser multiplataforma, podendo rodar em ambientes Windows, Linux e MAC. A plataforma Arduino foi feita para aprender mexendo! Pode-se ensinar desde lógica de programação simples até avançada. É possível ensinar vários conceitos de eletrônica, como diversos componentes são ligados às saídas de microcontro- ladores e como o microcontrolador entende esses componentes. A plataforma Arduino é, sem exageros, um excelente recurso educacional. Atualmente, o projeto UNO é a placa de referência adotada pela equipe Arduino que mantém na página oficial – www.arduino.cc, toda a documen- tação atualizada com referências e exemplos de códigos de aplicação. Figura 1- Vista da frente e de traz da placa UNO-R3. Existem outras placas disponíveis como o DUE que é uma placa que possui um número maior de I/O, Figura 2 - Placa DUE Os outros produtos disponíveis podem ser vistos no site : http://arduino.cc/en/Main/Products A família Arduino. Capítulo 2 13 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Existem ainda placas que são adicionadas a placa do Arduino que acrescentam funcionalidades à plataforma. Essas placas são conhecidas com Shields. Um exemplo disso é o shield ethernet. Com ele o Arduino poderá ser conectado à internet a partir de qualquer tomada RJ45. Figura 3 - Shield Ethernet Outros modelos de Shields podem ser vistos em: http://arduino.cc/en/Main/Products Além dos modelos oficiais, como o projeto é aberto, existem diversas empresas e grupos que a partir da documentação disponível, desenvolvem produtos e em muitos casos também o comercializam. Uma lista com todos os modelos simila- res reconhecidos pode ser encontrada no endereço seguinte: http://playground.arduino.cc/Main/SimilarBoards Um ótimo exemplo de um produto nacional e reconhecido pela equipe Arduino é o Severino. O Severino é um projeto nacional que pode ser livremente reproduzido e toda a documentação pode ser encontrada nesta página: Figura 4 - Severino http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3 14 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Um outro exemplo é o projeto que será utilizado nesta capacitação comercializa- do pela empresa EMPRETEC que é uma placa Arduino compatível baseada no modelo Duemilanove. Figura 5 – Arduino compatível EMPRETEC O microcontrolador utilizado é o ATmega328P, um µC AVR integrante da série ATmegaXX8 da Atmel. Atualmente são os melhores µC de 8 bits disponibilizados pela Atmel em encapsulamento DIP de 28 pinos. O XX da série indica a quanti- dade de memória FLASH disponível. Portanto, o ATmega328P possui 32KBytes de memória FLASH com barramento de 8 bits. A letra P significa que este micro trabalha consumindo menos energia do que outros processadores. Figura 6 - Diagrama em blocos ATMEGA Capítulo 3 Microcontrolador. Watchdog Timer debugWIRE PROGRAM LOGIC SRAM Watchdog Oscillator Oscillator Circuits/ Clock Generation Power Supervision POR/BOD & RESET Flash EEPROM 8bit T/C 0 8bit T/C 2 Analog Comp. Internan Bandcap USART 0 PORT D (8) PORT B (8) PORT C (7) RESET AVCC AREF GND XTAL[1.2] ADC[6.7]PC[0.6]PB[0.7]PD[0.7] SP1 TW1 D AT A BU S 16bit T/C 1 A/D Conv. G N D VO C 16 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Características: • Arquitetura RISC. • 130 instruções otimizadas para trabalhar com compiladores de alto nível em especial o C, a maioria executada em apenas 1 ciclo de relógio. • Possui 32 registradores de propósito geral de 8 bits (R0 a R31) • Operação de até16MIPS (milhões de instruções por segundo) a 16MHz • 8 KBytes me memória de programa FLASH de auto programação In-System. • 512 Bytes de memória EEPROM. • 1KByte de memória SRAM. • Ciclos de escrita e apagamento: memória FLASH 10.000 vezes, EEPROM 100.000 vezes. Periféricos: • 23 I/O programáveis; • 2 temporizadores/contadores de 8 bits com Prescaler separado, 1 modo de comparação. • 1 temporizadores/contadores de 16 bits com Prescaler separado, modo de comparação e captura. • Contador de tempo real (com cristal externode 32.768 Hz) conta precisamen- te 1s. • 3 canais PWM. • 6 canais A/D com precisão de 10 bits • Interface serial para dois fios orientada a Byte (TWI), compatível com o pro- tocolo I2C. • Interface serial USART. • Interface serial SPI Master/Slave • Watchdog Timer com oscilador interno separado • Oscilador RC interno (não há necessidade de cristal externo ou outra fonte de clock). • 5 modos de Sleep: Idle; Redução de ruído do A/D; Power-Down; Power Safe e Standby. 17 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o D es cr iç ão d o s p in o s: Fig ur a 7 – Pi na ge m . A EMPRETEC é uma empresa nacional que desenvolveu um projeto próprio baseado na plataforma Arduino. Utilizando o modelo Duelmilanove como base, a placa é compatível com o modelo UNO, observando-se que as funcionalidades agregadas ao projeto UNO – R3 (última versão), não estão disponíveis neste modelo. O kit consiste basicamente de uma placa Arduino – compatível e um conjunto de peças disponíveis em pequenas placas de PCI contendo barramentos para conexões de fios, além de matriz de contatos e componentes soltos como LEDs e resistores. Figura 8 - Kit EMPRETEC Informações sobre o kit podem ser obtidas neste endereço: http://www.empretecnet.com.br/do/Home O conjunto didático da empresa EMPRETEC. Capítulo 4 A figura a seguir, mostra a placa desenvolvida pela EMPRETEC. Faremos uma pequena descrição de suas partes. Capítulo 5 A placa Arduino compatível - EMPRETEC. Figura 9 - Placa Arduino compatível Esta placa será conectada ao computador através da entrada USB. Por essa conexão, a placa será alimentada com 5V e também se comunicará com o computador. Figura 10 - Conexão USB Após a gravação do programa na memória do microcontrolador, a placa pode ser desligada do computador e conectada à uma fonte de alimen- tação externa através de um pino tipo P2. Ela pode ser alimentada com tensões de 7,5V até no máximo 12V. O projeto contém um regulador de tensão de 5V. Figura 11 - Conexão para fonte externa. 20 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o A conexão entre o microcontrolador e os di- versos componentes, sensores e demais dis- positivos é feita através de blocos de termi- nais disponíveis nas laterais da placa. Este é o diferencial do projeto da EMPRETEC para as demais placas compatíveis. Figura 12 - Blocos de terminais. Os terminais mais externos do são destina- dos à distribuição do GND. O GND também pode ser encontrado na linha de terminais que estão diretamente conectados à saída do microcontrolador e nos terminais destinados à distribuição da fonte de alimentação – POWER. Figura 13 - Distribuição GND. A segunda fileira de terminais é destinada à distribuição de 5V, que também pode ser encontrada nos terminais POWER. Figura 14 - Distribuição Vcc. Os terminais internos que estão na terceira fileira do conector, estão conectados aos pinos do microcontrolador e serão descri- tos a seguir. Figura 15 - Pinos conectados ao Micro controlador. 21 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Pinos Digitais. Nesta placa, existem 14 pinos digitais numerados de 0 até 13. Para estes pinos, o limite máximo de corrente é de 40mA (I/O), sendo recomen- dado utilizar valores até 20mA. Estes pinos têm também um resistor pull-up in- terno que vem desligado de fábrica e é ativado por software. Figura 16 - Pinos Digitais. Além de serem pinos de I/O, alguns tem funcionalidades específicas que estão descritas a seguir. Terminais Denominação Descrição 0 RX – Utilizado para receber dados seriais TTL Estes terminais além de estarem conectados aos pinos TXD e RXD do microcontrolador, também estão ligados ao CI FTDI que faz a comunicação serial entre o microcontrolador e o computador. 1 TX – Utilizado para transmitir dados seriais TTL 2 ,3 ISR (Interrupt Service Routine) Estes pinos podem ser configurados para chamar uma interrupção 3, 5, 6, 9, 10 e 11. PWM (Pulse Width Modulation) Fornecem uma saída PWM de 8 bits. 10 (SS) (Slave Select) Estes pinos são utilizados para permitir a comunicação do microcontrolador com um ou mais periféricos utilizando o protocolo SPI (Serial Peripheral Interface). 11 MOSI (Master Out Slave In) 12 MISO (Master In Slave Out) 13 SCK (Serial Clock) 13 LED O pino 13 também está conectado à um LED que está montado na placa. Tabela 1 - Função dos pinos digitais. 22 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Pinos Analógicos. O Arduino tem 6 pinos analógicos – A0 até A5 - todos pinos de entrada com resolução de 10 bits (0 a 1023). Por padrão, estas entradas recebem tensões de 0 até 5V. Através do pino AREF, o limite superior da tensão pode ser alterado. Figura 17- Pinos Analógicos. Assim como nos pinos digitais, alguns pinos têm funções especiais. Terminais Denominação Descrição A4 DAS (Serial Data Line) Estes pinos suportam comunicação I2C (TWI – Two- Wire Interface). A5 SCL (Serial Clock Line) Tabela 2- Pinos Analógicos. Pinos de alimentação (POWER) Os pinos de alimentação fornecem tensões para placas externas como os Shields. Estão disponíveis 2 tensões di- ferentes, 5V e 3,3V sendo esta limitada à 50mA. Além deles são fornecidos tam- bém dois pinos GND. Neste barramento, existem ainda dois outros pinos. Figura 18 - Pinos POWER. - RESET: fornece o comando RESET para uma placa externa. - VIN: Encaminha tensão de alimentação externa. 23 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o LEDs indicativos. A placa contém ainda 4 LEDs indicativos. Figura 19 - LEDS indicativos. Comunicação com o PC Estes LEDs indicarão quando um programa está sendo transferido do computador para o micro- controlador. LED conectado ao pino 13 POWER indica que a placa está ligada A Linguagem utilizada para programação. Capítulo 6 A plataforma Arduino utiliza a linguagem de programação Arduino baseada em Wiring que é uma linguagem de programação open-source para microcontrola- dores. A estrutura desta linguagem é muito parecida com a linguagem C sendo que aqueles que dominam a linguagem de programação C terão pouquíssima dificuldade para programar um Arduino. A estrutura básica da linguagem de programação do Arduino é bastante simples e é composta de pelo menos duas partes, que são os blocos setup e loop. O primeiro bloco é o setup. Nele serão declaradas as variáveis e as configurações dos pinos utilizados, se serão de entrada ou de saída. Nele também será iniciali- zada a comunicação serial se for utilizada. O bloco setup, é executado apenas uma única vez, quando o programa é inicia- lizado. No bloco loop, os pinos de entrada e saída serão constantemente “lidos”, sen- do os estados processados pelo µC (de acordo com as instruções do programa) e alterados quando for o caso. O processo é contínuo e será encerrado apenas quando uma interrupção acontecer ou o µC for desligado. Para escrever um programa, entre outros elementos, são utilizadas funções que são pequenos blocos de programas usados para montar o programa principal. São como sub-rotinas, procedimentos ou bibliotecas, escritas para realizar tare- fas repetitivas. Toda a função deve der declarada antes de ser chamada, atribuindo-lhe um tipo e um nome seguido de parênteses onde serão colocados os parâmetros da função. Entre chaves { }, serão escritos os procedimentos que afunção deverá executar. A função setup() É chamada apenas uma única vez e é responsável por iniciar os modos de traba- lho dos pinos, e a porta serial. Deve ser incluído no programa mesmo que não exista alguma declaração para ser feita. 25 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Como em qualquer linguagem de programação a forma como a palavra é escri- ta, determina se será ou não reconhecida dando então o necessário significado ao programa que está sem do feito. A palavra setup (e as outras utilizadas na linguagem de programação do Arduino) devem ser escritas como determina a referência da linguagem. Os dois parênteses escritos logo a seguir, nesta função, serão vazios, sem parâmetros, porém não poderão ser suprimidos. A função loop() Logo após a função setup, a função loop é escrita e dentro desse bloco é que estará distribuído o conjunto de instruções que caracterizarão o programa. Este bloco será lido sequencialmente e cada linha executada a partir da primeira até a última. Após isso, o programa volta para a primeira linha e executa novamente cada uma das linhas do programa, ciclicamente. Exemplo de programa. Capítulo 7 Vamos então utilizar um programa básico do Arduino que é o que faz o Led que está conectado ao pino 13 da placa piscar para exemplificar a estrutura de pro- gramação do Arduino. Figura 20 - Programa 1- Blink. O código escrito acima é de domínio público e pode ser encontrado na própria IDE do Arduino no menu exemplos. Como em todo programa, o recurso de co- mentar o texto, explicando o que ele faz e o que cada linha deve executar está presente. 27 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o /* */ é utilizado para escrever um comentário de duas ou mais linhas. // é utilizado em comentários de uma linha. O uso de comentários é importante para registrar a intenção do programador e servindo também para resgatá-la. Não serve apenas para traduzir o significado da função ou parâmetro más sim para explicar o que se espera que aconteça. Neste texto, vamos retirar os comentários do programa a fim de enfatizar a sequ- ência de instruções. Figura 21 - Programa 2 - Blink sem comentários. Explicando o programa Blink. int led = 13; Antes do bloco setup, é necessário declarar as variáveis que serão utilizadas no programa. int se refere ao tipo de números que a variável pode manipular. No caso, a variável é do tipo inteiro e pode armazenar números de até 16 bits com um range de -32.768 até 32.767. led se refere ao nome da variável. Pode ser qualquer nome, utilizando caracteres alfanuméricos. = operador de atribuição. 13 se refere a saída 13 da placa. Então, nesta linha, foi criada uma variável chamada led do tipo int (que armazena números na faixa de 2^-10 até 2^10 – 1) e que está fisicamente conectada ao pino 13 da placa, e que neste caso, também está conectado ao led da placa. No final existe o sinal ; (ponto e vírgula) que encerra um procedimento. 28 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o void setup() { pinMode(led, OUTPUT); } Este é o bloco setup. A função setup, não retorna valor algum e por isso, é do tipo void. Logo após, entre chaves { }, são apresentadas as funções e suas declarações. As chaves limitam um procedimento. Vários procedimentos podem ser escritos dentro da função setup sempre separados por chaves. pinMode – Esta função determina o modo do pino, se ele será um pino de entrada (INPUT) ou de saída (OUTPUT). Logo após a função, entre parênteses, é necessário informar o pino, no caso – led - e a palavra OUTPUT. Isto quer dizer que o pino led é uma saída. void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } Este é o bloco loop. Assim como no setup, loop é uma função do tipo void. digitalWrite é a função que escreve no pino digital, um determinado valor, um estado. Logo a seguir da função, entre parênteses, segue o nome do pino – led – e o estado que é HIGH. Ou seja, o pino led foi setado para 1. Em seguida, a função delay é iniciada. Esta função atrasa a execução do programa pelo tempo especificado a seguir, entre parentes. O valor declarado é 1000. Como a base desta função é o milissegundos, o programa ficará parado por 1000 ms, ou 1 segundo. Assim o led ficará aceso por 1 segundo. digitalWrite é novamente iniciado. Isto é necessário pois o primeiro digitalWrite, acendeu o led. Então é necessário apaga- lo (a finalidade do programa é fazer o led piscar). Então, o estado do led é definido como LOW ou 0. O led ficará apagado então por 1 segundo. O programa ficará executando o loop, linha por linha, até que o equipamento seja desligado. Tabela 3 - Explicando o programa. Instalação. Capítulo 8 Para utilizar qualquer placa Arduino oficial, basta ir até a página de download - http://arduino.cc/en/Main/Software - e escolher a opção do sistema operacional instalado em seu computador. No caso da versão para Windows, o arquivo estará compactado. Basta então fazer a descompactação do arquivo e executar os procedimentos comuns utilizados para instalação de qualquer software. Para os outros sistemas operacionais, o procedimento é semelhante. Este arquivo que será baixado e instalado em seu computador é o ambiente de programação do Arduino, ou IDE. Atualmente, a versão da IDE é a 1.0.5. Em placas Arduino compatíveis, como é o caso da placa da EMPRETEC, as ve- zes é necessário instalar um driver de comunicação próprio da placa. No CD que acompanha o kit, existe um instalador com um atalho para a instalação desse driver. Uma vez feito isso, a plataforma está praticamente pronta para uso. O ambiente de programação. Capítulo 9 É no IDE do Arduino que o programa será escrito e também transferido para a placa a fim de ser gravado no µC. Para isso, é necessário conectar a placa do µC através de um cabo USB ao computador. Inicie então a IDE que terá a aparência mostrada abaixo. Figura 22 - IDE do Arduino. Barra de menus Área onde o programa será escrito Área de mensagens Barra de botões Modelo da placa e porta serial COM utilizada Nome provisório do código e versão da IDE 31 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o É possível alterar a linguagem do ambiente para português. Isso é feito selecio- nando preferencias no menu Arquivo. Figura 23 - Menu Arquivo. Na caixa aberta, selecione a língua e depois reinicie o IDE. Figura 24 - Preferencias. O próximo passo é configurar o tipo de placa que será utilizado. A placa da EM- PRETEC é do tipo Duelmilanove. Então no menu Ferramentas, selecione Placa. Da lista de opções aberta, selecione o modelo Arduino Duemilanove w/ ATme- ga328. Figura 25 - Configurando o modelo de placa. 32 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Após definir o modelo da placa é necessário verificar em qual porta COM a placa está conectada. Vá até o painel de controle e em Sistema, selecione Gerenciador de Dispositi- vos. Procure em Portas (COM E LPT) qual é a COM que a placa está conectada. Figura 26 - Localizando a COM. Voltando a IDE, confirme o número da COM selecionada. Ela deve ser a mesma que a indicada no painel de controle.No exemplo, a porta COM deve ser a 6. En- tão vá no menu Ferramentas e selecione Porta Serial. Na lista de COM selecione a indicada no painel de controle. Figura 27 - Conferindo a porta COM. Pronto!Agora é necessário escrever o programa. Vamos utilizar o programa “Pis- car” que já detalhamos. Escrevendo um programa. Capítulo 10 Escreva na IDE o programa blink (piscar) como mostrado abaixo. Figura 28 - Blink escrito no IDE. Após a escrita é necessário compilar o código. Nesta etapa, o código escrito será “conferido” e caso algo esteja er- rado, uma mensagem será mostrada. Caso tudo esteja correto, o código será reescrito em linguagem de máquina pela própria IDE. Para fazer isso, clique no botão verificar disponível na barra de botões. Ao terminar, o programa está pronto para ser transferido para o µC. Figura 29 - Compilando. Não se esqueça de salvar o programa. Isso pode ser feito no menu Arquivo. Perceba que ao escrever o programa na IDE, as palavras assumem cores, Cinza para comentários; Laranja para funções; Azul para constantes; Preto para nome de variáveis e demais símbolos. Quando uma palavra que remete a uma função ou a um estado for escrita errada, ele aparecerá preta. 34 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Para transferir o programa para o µC, é necessário pressionar o botão carregar disponível na barra de botões. Observando a placa, perceba que os dois leds TX e RX piscam rapidamente. Este é o sinal de que o programa está sendo trans- ferido e gravado no µC. Ao terminar a transferência, o LED 13 co- meça a piscar, ficando 1 segundo aceso e 1 segundo apagado. Caso isso não acon- teça, reveja os passos anteriores e repita a operação. Figura 30 - Gravando o programa no micro. Alterando o programa. Capítulo 11 O que pode ser alterado neste último programa, o “piscar”. Para alterar o programa, basta fazer as mudanças na própria IDE, escrevendo ou reescrevendo o programa que está lá. Vamos mudar o tempo em que o LED per- manece aceso ou apagado e para isso, altere o programa para que o LED perma- neça aceso por 100ms e apagado por 500ms. Figura 31 - Alterando o programa. Após fazer as alterações, salve este programa com um nome diferente e repita os passos de verificar e carregar. Observe o LED da placa. Ele pisca mais rapi- damente. Mas, e se for necessário ligar dois LEDs? Como fazer? 36 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Fácil, é só utilizar a velha matriz de contatos e alguns componentes. Relembrando alguns conceitos... Para ligar um LED em uma das portas de saída é necessário ligar um resistor em série com o LED. A tensão na porta no estado 1 é 5V e portanto um resistor entre 150Ω a 330Ω deve satisfazer essa condição. Vamos primeiro montar o circuito. Ligue na matriz de contatos dois LEDs, cada um com o seu resistor em série como mostra o esquema a seguir. Figura 32 - Ligando dois LEDs. Uma vez montado o circuito, é necessário alterar o programa. Então vamos para a IDE. Declarando as variáveis: tipo e onde estão ligadas. int led1 = 2; int led2 = 3; Setup void setup() { Agora configurar o pino como saída. pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } A função loop. void loop() { O estado (aceso ou apagado) e o tempo que cada LED ficará aceso. digitalWrite (led1, HIGH); digitalWrite (led2, LOW); delay(500); digitalWrite (led1, HIGH); digitalWrite (led2, LOW); delay(500); } Tabela 4 - Programa 2 LEDs. Salve o programa, compile e grave-o no µC e observe o funcionamento. 37 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-1 – Conectando LEDs. Figura 33 - Circuito com 4 LEDs. int led1 = 2; int led2 = 3; int led3 =_________; int led4 =_________; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led_____ , OUTPUT); pinMode(led_____ , ____________); } void loop() { digitalWrite (led1, HIGH); delay(500); digitalWrite (led2, HIGH); delay(_______); digitalWrite (led ______ , HIGH); delay(_______); _________________________________ _________________________________ } Figura 34 - Completando o programa. 38 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-2 – Conectando LEDs. Figura 35 - Conectando Leds 2. Neste espaço, escreva programa solicitado. 39 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-3 – Conectando LEDs. Conectando LEDs 3. Neste espaço, escreva programa solicitado. Adicionando variáveis. Capítulo 12 Nos programas anteriores, o tempo que determinava quando cada LED acendia ou apagava era escrito dentro da função delay. Isto significa que cada vez que for necessário modificar o tempo, é necessário alterar cada um dos valores. Em vez disso, uma variável “tempo” pode ser criada e será esta variável que ficará dentro da função delay. Assim, para alterar o valor do “tempo” basta alterar apenas uma esta variável. Para criar uma variável o primeiro passo é determinar qual deve ser o tipo da va- riável. O tipo determina qual o tipo de dado e sua extensão além de diretamente influenciar no tamanho do arquivo. Tipo Descrição void A palavra reservada void é usada em declarações de funções. Este tipo indica que a função não retorna nenhum valor quando é executada. Boolean O tipo boolean pode representar valores booleanos, verdadeiro (true) ou falso(false). Um tipo boolean ocupa um byte da memória. char O tipo char armazena valores de 1 byte. Caracteres são codificados em um único byte e são especificados na tabela ASCII. O tipo char é sinalizado e representa números de -128 a 127. Para números não sinalizados usa-se o tipo byte. unsigned char unsigned char armazena valores de 1 byte não sinalizados, é mesmo que utiliza o tipo byte. A faixa de valores vai de 0 a 255. byte Armazena valores de 8 bits não sinalizados de 0 a 255. int Inteiros são tipos primários de armazenamento. No Arduino Uno( e em outras placas baseadas em ATMEGA) um int armazena valores de 16 bits(2 bytes). Esse tipo compreende valores de -32768 a 32767. unsigned int No Arduino UNO e em outras placas baseadas em ATMEGA armazenam valores de 16 bits não sinalizados, ou seja, apenas valores positivos de 0 a 65535. word O tipo armazena valores de 16 bis não sinalizados que compreendem valores de 0 a 65535. 41 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o long O tipo de dado Long armazena valores inteiros sinalizados de 32 bits (4 bytes) que compreendem a faixa de -2147483648 a 2147483647. unsigned long O tipo unsigned long armazena valores de 32 bits (4 bytes) não sinalizados que compreendem a faixa de 0 a 429967295. short O tipo short armazena valores de 16 bits (2 bytes) sinalizados. float O tipo float armazena valor em ponto flutuante, ou seja, um valor que possui casas decimais. O tipo float armazena valores de 32 bits (4 bytes) e compreendem a faixa de -3,4028235 E+38 a 3,4028235 E+38.4. double O tipo double também armazena valores de ponto flutuante, porém no Arduino Uno e outras placas baseadas em ATMEGA esse tipo é exatamente o mesmo que o tipo float, sem ganho de precisão, Figura 37 - Variáveis De acordo com a tabela, é preferível utilizar o tipo byte para a variável tempo e também para as variáveis led. Isto resultará em um programa que ocupa menos espaço de memória. 42 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-4 – Inserindo variável tempo 1. Figura 38 - Ligando 4 LEDs. byte led1 = 2; byte led2 = 3;byte led3 = 4; byte led4 = 5; byte tempo = 0; void setup() { . . . } void loop() { digitalWrite (led1, HIGH); delay(tempo); … } 43 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-5 – Inserindo variável tempo 2. Figura 39 - Ligando 4 LEDS. Neste espaço, escreva programa solicitado. Operadores são símbolos utilizados para construir expressões aritméticas, lógicas e comparação. A tabela a seguir mostra os tipos e exemplifica o uso. Tipo Operador Símbolo Exemplo Retorno A rit m ét ic os Atribuição = a = x “x” guarda o valor de a Resto da divisão % x= 7%5 “x” guarda 2, o resto da divisão Soma + x = a + 3 “x” guarda o resultado da soma Subtração - x = a - 3 “x” guarda o resultado da subtração Produto * x = a * 3 “x” guarda o resultado da multiplicação Divisão / x = a / 3 “x” guarda o resultado da divisão Co m pa ra çã o Comparação == y == b 1 se “y” é igual a “b”, se não 0 Diferença != y! = b 1 se “b” é diferente de “y”, se não 0 Menor que < y < b 1 se “y” é menor do que “b”, se não 0 Maior que > y > b 1 se “y” é maior do que “b”, se não 0 Menor ou igual <= y <= b 1 se “y” é menor ou igual a “b”, se não 0 Maior ou igual >= y >= b 1 se “y” é maior ou igual a “b”, se não 0 Operadores. Capítulo 13 45 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Ló gi co s AND && z > 0 && c < 2 1 se a expressão for verdadeira OR || z > 0 || c < 2 1 se a expressão for verdadeira NOT ! !x > 0 1 se a expressão for falsa Tabela 5 - Operadores Além desses, existem também os operadores bit a bit que realizam operações de bit e os operadores compostos. Tipo Operador Símbolo Exemplo Retorno Bi t a b it AND bit a bit & 0011 & 0001 0001 OR bit a bit | 0011 | 0001 0011 XOR bit a bit ^ 0011 ^ 0001 0010 NOT bit a bit ~ ~1100 0011 Desloca para a esquerda << w << 3 Se w = 000011, após o deslocamento w = 111000 Desloca para a direita >> w >> 3 Se w = 111000, após o deslocamento w = 000111 Co m po st os Soma += w+ = d w = w+d Subtração -= w- = d w = w-d Produto *= w* = d w = w*d Divisão /= w/ = d w = w/d Incremento ++ w ++ w = w+1 Decremento -- w -- w = w-1 AND bit a bit &= w &=d w = w & d OR bit a bit |= w !=d w = w ! d Tabela 6 - Operadores bit a bit. Botões, chaves ou interruptores estão presentes em diversas situações nos circuitos digitais. A configura- ção básica para montar um botão é utilizando um re- sistor de pull-up. Desta forma, o pino do µC receberá sempre nível lógico 1. Ao pressionar o botão, o pino será levado ao referencial de terra, recebendo nível lógico zero. O resistor de 10KΩ sempre será ligado ao positivo da fonte de alimentação (pull-up) e esta deve ser a mesma que alimenta o µC. Já na parte de programação, é necessário que a por- ta em que o botão foi ligado seja constantemente lida para saber se o valor é igual à 1 ou igual à 0. A função digitalRead(pino) é utilizada para ler o esta- do do botão que retornará HIGH ou LOW dependen- do do estado do botão. O programa abaixo, será utilizado para ler o estado de um botão que controlará o LED que está no pino 5 da placa Arduino. int LED = 5; int BOTAO = 6; Inicie declarando as variáveis globais LED e BOTAO. int val = 0; É necessário criar uma outra variável para determinar o estado inicial do botão. Chamaremos de “val” e o estado “0” inicial é atribuído. void setup() { pinMode(LED, OUTPUT); pinMode(BOTAO, INPUT); } Definem-se os modos dos pinos. void loop(){ val = digitalRead(BOTAO); Nesta linha, a variável “val” recebe o valor lido no botão. digitalWrite(led, val); } Nesta linha, o valor escrito na variável “val” é atribuído ao LED Tabela 7- Programa para ler um botão. Ligando um botão e lendo o estado de um botão. Capítulo 14 47 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-6 – Ligando um botão. Figura 41 - Esquema de ligação com 4 LEDS e 1 botão. Transfira este programa para o µC. int BOTAO = 6; int LED = 5; int val = 0; void setup () { pinMode (LED,OUTPUT); pinMode(BOTAO,INPUT); } void loop(){ val=digitalRead(BOTAO); digitalWrite(LED,val); } Após observar o funcionamento do circuito, complete o quadro abaixo: Como está a chave? Estado Lógico da chave Estado do LED Estado lógico do LED Sem ser pressionada Sendo Pressionada Tabela 8 - Registro do funcionamento do circuito. 48 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-7 – Ligando um botão II. Escreva no espaço abaixo a solução. int BOTAO = 6; int LED = 5; int val = 0; void setup () { pinMode (LED,OUTPUT); pinMode(BOTAO,INPUT); } void loop(){ } 49 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX 8 – Ligando dois botões. • Acrescente ao circuito mais um botão. • Modifique o programa para que cada um dos botões controle um dos LEDs. Escreva no espaço abaixo a solução. int BOTAO = 6; int LED = 5; int val = 0; void setup () { } void loop() { } Existe a possibilidade de não utilizar resistores de Pull up ao utilizar chaves, pois o AtMega 328 possui resistores de Pull up internos e são ligados através de uma linha de comando. Para acionar o resistor de Pull up interno basta acrescentar a seguinte linha de código: digitalWrite(nome_da_variavel_pino, HIGH); Outra forma de ativar o pull up interno é utilizar a seguinte expressão: pinMode(numero_do_pino , INPUT_PULLUP); 50 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-9 – Ligando botão com Pull up interno • Modifique o circuito utilizado no EX-8, retirando o resistor de Pull up da en- trada 6. • Modifique o programa indicando o uso do resistor de Pull up interno. Escreva no espaço abaixo a solução. Sabemos que uma chave ao ser acionada, cria uma série de ruídos que poderão ser “entendidos” pelas entradas do microcontrolador e erroneamente interpreta- dos pelo programa. Esses “ruídos” são denominados de bounce e em alguns ca- sos, é necessário eliminá-los para que o programa não interprete um valor errado. Uma das maneiras de eliminar esse ruído, é proporcionando um atraso entre o primeiro acionamento do interruptor e a leitura na entrada do microcontrolador. Existem algumas maneiras de reduzir ou mesmo eliminar a influência desse tipo de ruído. Vamos abordar a maneira que emprega o uso de uma biblioteca pronta e feita exatamente para isso que está disponível na página: http://arduino.cc/playground/Code/Bounce Nesta página, é possível através do link baixar a biblioteca que está compactada. Os passos seguintes mostrarão como instalar esta biblioteca no IDE do Arduino. 1 – Comece baixando o arquivo. 2 – Salve o arquivo na área de trabalho. 3 – Descompacte o arquivo. Uma pasta com o nome do arquivo será criada. 4 – Agora é necessário levar esta pasta para a pasta no computador, criada durante a instalação do programa, onde estão as bibliotecas denominada de libraries. 5 – Reinicie o IDE e pronto, a nova biblioteca está disponível. Usando a biblioteca bounce. Capítulo 15 Utilizando operadores lógicos, podemos escrever expressões lógicas. Aprovei- tando o circuito montado com 4 Leds e duas chaves, vamos escrever o programa que faça a operação lógica AND entre as chaves ligadas aos pinos 6 e 7. Escreva o programa abaixo na IDE e teste o funcionamento.int Botao1 = 6; int Botao2 = 7; int LED = 2; int val1 = 0; int val2 = 0; int resultado = 0; void setup () { pinMode (LED,OUTPUT); pinMode(Botao1,INPUT); pinMode(Botao2,INPUT); } void loop(){ val1=digitalRead(Botao1); val2=digitalRead(Botao2); resultado = val1&&val2; digitalWrite(LED,resultado); } Resolvendo operações lógicas. Capítulo 16 53 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-10 - Operações lógicas. • Acrescente ao programa anterior, as operações lógicas OR, XOR e NOT que serão realizadas entre os botões 1 e 2 e o resultado de cada uma, mostrado nos LEDS 3, 4 e 5. • Utilize o espaço abaixo para registrar o programa. 54 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-11 - Expressões lógicas. • Elabore 4 programas para resolver cada uma das expressões lógicas seguintes: • S1 = (A.B) + (/A . /B) • S2 = /B + (/A . B) • S3 = {/(A + B) + (/A . B)} • S4 = A ^ B + /A • Utilize o espaço a seguir para registrar os programas. Toda a placa da família Arduino, possui pelo menos uma porta serial que serve para comunicação entre a placa Arduino e o PC ou entre outros dispositivos se- riais. A UART - Universal Asynchronous Receiver Trasmitter – no Arduino está disponível tanto na própria entrada USB como também nos pinos 0 e 1 da placa. A interface é utilizada para comunicação com o PC e outros dispositivos que con- tenham saídas USB e os pinos 0 e 1 para comunicação entre outros dispositivos como outras placas Arduino ou Shields que trabalham em conjunto com o Ardui- no. A comunicação serial no Arduino é do tipo Full Duplex assíncrona e a taxa de transmissão mais utilizada é de 9600bps, más esta taxa pode ser alterada em fun- ção da velocidade que o dispositivo que se quer conectar trabalhe. A visualização da comunicação entre o Arduino e o PC, por exemplo, será feita no Monitor Serial, que pode ser acessado de duas formas: - através do menu Ferramentas: Figura 42 - Menu Ferramentas. Utilizando o monitor serial. Capítulo 17 56 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o - através do botão monitor serial. Figura 43 – Localização do botão do monitor serial. Ao iniciar o monitor de uma das duas maneiras, será aberta uma caixa, onde é possível enviar dados para o Arduino como também receber dados processados por ele. Figura 44 - Monitor serial. Funções básicas utilizadas na comunicação serial. Serial.begin(9600); Função empregada para configurar a comunicação serial. A taxa de comunicação Serial [Arduino x PC], padrão é de 9600 bps. Sempre que a comunicação serial for utilizada, esta função será escrita dentro do setup e quando ativa a comunicação serial, os pinos 0 e 1 da placa Arduino não podem ser utilizados como entrada. Serial.available(); Esta função fica constantemente lendo a porta serial do Arduino. Caso algum valor estiver sendo mandado, ela enviará um valor maior do que 0, retornando o número de Bytes disponíveis para leitura. Caso nada estiver sendo enviado, a porta retornará 0. Serial.read(); Lê o primeiro byte que está no buffer que comporta-se como uma FIFO. Quando retornar -1, significa que não existem dados a serem resgatados. Serial.write(); Esta função será utilizada para escrever na Serial, ou seja, envia algo para o com- putador que se estiver disponível, receberá a informação. 57 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Serial.println(); Esta função, escreve o caractere em ASCII e ao final, transmite o caractere Carrier Return (retorno ao início da linha) e o caractere New Line (mudança para a pró- xima linha). Quando for necessário retornar o valor em ASCII, basta alterar a última linha do programa. Em vez de Serial.write (valordigitado); escreva, Serial.println(valor digitado); Vamos escrever uma mensagem de boas-vindas. Escreva o programa a seguir no IDE e grave no Arduino. void setup() { Serial.begin(9600); } void loop() { Serial.print (“ Ola, ESCREVA SEU PRIMEIRO NOME ! Seja bem-vindo(a) a “); Serial.println (“Capacitação Técnica na Plataforma Ar- duino. “); } Abrindo o monitor serial será possível ler a frase. 58 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-12 – Calculando valores em um retificador. • Escreva um programa que mostre no monitor serial os valores de tensão em um circuito retificador como o mostrado na figura abaixo. O valor da tensão aplicado ao primário do Trafo é a única variável que poderá ser alterada no programa. Considere: relação de transformação - 10:1 e Vd = 700mV. O moni- tor serial deve mostrar os valores de: • 1 – Tensão eficaz do primário do Trafo; • 2 – Tensão de pico no primário do Trafo; • 3 – Tensão eficaz no secundário do Trafo; • 4 – Tensão de pico no secundário do Trafo; • 5 – Tensão máxima presente na saída do retificador; • 6 – Tensão na carga considerando que o capacitor está fora do circuito; • 7 – Tensão na carga considerando o capacitor de filtro. O esquema do circuito está mostrado na figura abaixo. Figura 45 - Circuito retificador em ponte com filtro capacitivo. 59 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-13 – Calculando a quantidade de azulejos. • Escreva um programa para ler as dimensões de uma cozinha retangular com altura de 3m, largura de 5m e o comprimento é a única variável que pode- rá ser modificada no programa. Calcule e mostre a área total da cozinha a quantidade de caixas de azulejos para se colocar em todas as suas paredes sem descontar a área ocupada por portas e janelas e com o desconto de 5m2 para a área ocupada por portas e janelas. Informe a quantidade de caixas de azulejos necessária para as situações descritas acima com e sem uma sobra de 10% do total. Considere que cada caixa de azulejos pode preencher 1,5m2 de parede. • Mostre os valores solicitados no monitor serial. 60 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Utilizando operadores lógicos, podemos escrever expressões lógicas. Aprovei- tando o circuito montado com 4 Leds e duas chaves, vamos escrever o programa que faça a operação lógica AND entre as chaves ligadas aos pinos 6 e 7. Escreva o programa abaixo na IDE e teste o funcionamento. int Botao1 = 6; int Botao2 = 7; int LED = 2; int val1 = 0; int val2 = 0; int resultado = 0; void setup () { pinMode (LED,OUTPUT); pinMode(Botao1,INPUT); pinMode(Botao2,INPUT); } void loop(){ val1=digitalRead(Botao1); val2=digitalRead(Botao2); resultado = val1&&val2; digitalWrite(LED,resultado); } 61 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-14 - Operações lógicas. • Acrescente ao programa anterior, as operações lógicas OR, XOR e NOT que serão realizadas entre os botões 1 e 2 e o resultado de cada uma, mostrado nos LEDS 3, 4 e 5. • Utilize o espaço abaixo para registrar o programa. 62 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-15 - Expressões lógicas. • Elabore 4 programas para resolver cada uma das expressões lógicas seguin- tes: • S1 = (A.B) + (/A . /B) • S2 = /B + (/A . B) • S3 = {/(A + B) + (/A . B)} • S4 = A ^ B + /A • Utilize o espaço a seguir para registrar os programas. O comando if – else é utilizado para controle de fluxo. Existem três formas de uti- lização– a forma simples, composta e a forma aninhada. If (forma simples) O comando if será utilizado quando em um programa quisermos que determina- da parte deste seja executada apenas se uma condição for alcançada. A estrutura onde o comando if é utilizado é a seguinte: If (condição de teste “argumento”) { Função que será executada se for verdadeiro; } Se a condição testada não for verdadeira, então é entendido que é falsa e o loop continua. Vejamos o programa exemplo a seguir: int LED = 2; int tempo = 100 void setup() { pinMode (LED , HIGH); } void loop(){ pinMode (LED , HIGH); delay (tempo); pinMode (LED , LOW); delay (tempo); tempo = tempo + 100; if(tempo > 3000) { tempo =100; } } Estruturas condicionais – comando if - else Capítulo 18 64 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-16 - Utilizando comando if • Modifique o programa exemplo anterior de modo que cada um dos 4 LEDS sejam acesos, nas seguintes condições: • LED ligado ao pino 2 pisca desde o início do programa. • LED ligado ao pino 3 pisca a partir de 500ms; • LED ligado ao pino 4 pisca a partir de 1000ms; • LED ligado ao pino 5 pisca a partir de 2000ms; 65 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-17 - Utilizando comando if 2. • Elabore um programa utilizando o comando if de maneira que os botões con- trolem os LEDs da seguinte forma: • LED ligado ao pino 2 pisca a um ritmo de 100ms se nenhum botão estiver pressionado. • LED ligado ao pino 3 pisca a um ritmo de 100ms se o botão ligado ao pino 6 for pressionado. • LED ligado ao pino 4 pisca a um ritmo de 100ms se o botão ligado ao pino 7 for pressionado. • LED ligado ao pino 5 pisca a um ritmo de 100ms se os botões ligados aos pinos 6 e 7 forem pressionados simultaneamente. 66 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o É possível acender LEDs utilizando o teclado do computador através do Monitor Serial. O programa abaixo mostra como fazer isso. Escreva-o no IDE e faça o teste. int LED = 2; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { char tecla; tecla = Serial.read(); if(tecla == ‘V’) { digitalWrite(ledPin, HIGH); } delay(1000); } Como pôde observar, este programa faz apenas o LED acender. Modifique-o para que seja possível também apagar o LED. Faça isso no próximo exercício. 67 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-18 - Utilizando comando if 3. • Modifique o programa anterior para que seja possível acender e apagar o LED utilizando teclas do teclado do computador e o monitor serial. 68 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Utilizando if else. O comando if else, permite o teste de uma condição e realizar duas coisas. Se o teste for verdadeiro, executa a parte 1 e se o teste for falso, realiza a parte 2 É possível acender LEDs utilizando o teclado do computador através do Monitor Serial. O programa abaixo mostra como fazer isso. Escreva-o no IDE e faça o teste. int LED = 2; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { char tecla; tecla = Serial.read(); if(tecla == ‘V’) { digitalWrite(LED, HIGH); } else { if(tecla == ‘v’) { digitalWrite(LED, LOW); } delay(1000); } } 69 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX-19 - Utilizando comando if – else. • Modifique o programa exemplo anterior de modo que cada um dos 4 LEDS possam se r acesos e apagados nas seguintes condições: • Atribuir uma tecla para cada LED. Cada LED será aceso pela tecla relacionada à ele. • Atribuir uma tecla para cada LED. Cada LED sera apagado pela tecla relacio- nada à ele. • Atribuir uma tecla que faça todos os LEDS acenderem; • Atribuir uma tecla que apague todos os LEDS. 70 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Comando for. O comando for é utilizado em estruturas de repetição quando queremos que uma operação seja realizada algumas vezes, como por exemplo, fazer um led piscar um certo número de vezes. A estrutura do comando for é a seguinte: For (condição inicial; teste; incremento ou decremento) { Comandos; } Para entender melhor a utilização do comando for, vamos estudar o programa abaixo que deve fazer o LED ligado ao pino 2 piscar exatamente 15 vezes. int LED = 2; int tempo = 100; void setup() { pinMode(LED, OUTPUT); } Void loop() { digitalWrite(LED, HIGH); delay(tempo); digitalWrite(LED, LOW); delay(tempo); digitalWrite(LED, HIGH); delay(tempo); digitalWrite(LED, LOW); delay(tempo); REPETIR ESTAS ÚLTIMAS 4 LINHAS POR MAIS 13 VEZES. delay(1000); } Então, para fazer o LED piscar exatamente 15 vezes, é necessário escrever 15 ve- zes os comandos para acender e apagar o LED. Uma maneira mais simples e curta de fazer o mesmo utilizando o comando for pode ser visto no exemplo a seguir: int LED = 2; 71 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o int tempo = 100; void setup() { pinMode(LED, OUTPUT); } Void loop() { For(int i = 0; i<15; i ++) { digitalWrite (LED, HIGH); delay(tempo); digitalWrite (LED, LOW); delay(tempo); } delay(1000); } Na plataforma Arduino, existem 6 entradas analógicas, A0 até A5, que são utili- zadas para a leitura dos valores de tensão analógica provenientes de sensores analógicos. Estas entradas podem receber tensões entre 0 à 5V VDC. A tensão proveniente do sensor (sinal, informação), será entregue à um circuito conversor analógico – digital (A/D) que converterá o valor analógico do sinal em um valor digital (binário) de 10 bits. A resolução do conversor será: Equação 1- Cálculo da resolução. Então a cada 5mV aproximadamente, a palavra binária será modificada. De (V) Até (V) Valor binário 0,00 0,00488 00000000002 0,00488 0,00976 00000000012 0,00976 0,01464 00000000102 ... ... 4,9776 4,98248 11111111012 4,98248 4,98736 11111111102 4,98736 4,99712 11111111112 Tabela 9 - Valores da converção. A função utilizada para ler os pinos analógicos é analogRead(). Os pinos analógicos serão constantemente lidos, sendo o tempo de leitura apro- Entradas analógicas. Capítulo 19 73 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o ximado de 100 microssegundos o que leva a uma taxa de leitura próxima de 10.000 leituras por segundo. O valor de retorno, é um número int de 0 a 1023. Para simular um sensor analógico, podemos utilizar um potenciômetro. Ele for- mará um divisor de tensão e a tensão do cursor em relação ao negativo será aplicada à entrada analógica. Desta forma, quando a posição do cursor do poten- ciômetro for alterada, a tensão em relação ao cursor também irá variar. O programa para isso pode ser escrito da seguinte forma: int pot = A0; int led = 10; int valmed = 0; Nesta linha, são declaradas as variáveis “pot” – potenciômetro, que será ligado ao pino A0. A variável “led” – LED, que será ligado ao pino 10 e também a variável “valmed” – valor medido cujo valor inicial atribuído é zero. void setup() { pinMode(led,OUTPUT); } No setup, é definido com de saída o pino onde o LED está ligado. void loop() { valmed = analogRead(pot);digitalWrite(led, HIGH); delay(valmed); digitalWrite(led, LOW); delay(valmed); } No loop, o valor lido através de analogRead na entrada analógica A0 (potenciômetro), é atribuído à variável valmed. digitalWrite, define o estado inicial da variável led com HIGH, ou seja, o LED ficará aceso e a função delay, define o tempo que o LED permanecerá assim que será igual ao valor lido no potenciômetro. O mesmo acontece a seguir quando o LED é apagado, pois digitalWrite define o estado em LOW e ficará assim pelo tempo definido em valmed. Isto se repetirá indefinidamente, e o tempo que o LED permanece aceso ou apagado é definido pelo valor do potenciômetro lido na entrada A0. Figura 46 – controlando o ritmo das piscadas do LED.. Outra função interessante no monitor serial é poder ver a leitura dos valores lidos em uma entrada analógica. Desta forma, podemos “ver” o comportamento de um sensor e a partir daí, aperfeiçoar o código. Vamos utilizar o programa a seguir para testar isso. // Monitor 6 // monitorando sensores: Nome do programa. int sensor = 0; Cria uma variável chamada sensor que está ligada ao pino 0 (A0) do tipo int. void setup() { Inicia-se o setup. Serial.begin(9600); } Inicia-se a comunicação serial. void loop() { Inicia-se o método setup; sensor = analogRead(A0); Atribui-se à variável sensor, o valor lido na porta A0 analógica. Serial.print(“Valor lido=”); Escreve na serial “Valor lido =” Serial.println(sensor); Escreve o valor contido na variável sensor, pula linha e retorna ao início da linha. delay(1000); } Atraso de 1 segundo. Figura 47- Lendo a varivel analógica no monitor serial. Grave o programa no microcontrolador; Ligue o cursor do potenciômetro ao pino A0 e os extremos ao Vcc e GND. Abra o monitor serial e varie a posição do cursor do potenciômetro. Os valores Lendo sensores. Capítulo 22 75 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o dos extremos do potenciômetro correspondem aos valores mostrados 0 e 1023. Figura 48 - Valores mostrados no monitor serial. A função map(), é uma função matemática que pode ser utilizada para transfor- mar uma sequência de números em uma outra sequência. Para utilizá-la é neces- sário inserir a primeira faixa numérica, o número menor e o maior que foi medido e depois, a faixa que se quer transformar com o seu número menor e maior cor- respondente. A sintaxe da função map é a seguinte: map(variável, do valor menor , do valor maior , para menor valor , para o maior valor); O programa abaixo, faz isso. // Monitor 7 // monitora map: Nome do programa. int sensor = 0; Cria a variável sensor do tipo int e já atribui-se o valor 0 à ela. void setup() { Inicia-se o método setup. Serial.begin(9600); } Inicia-se a comunicação serial. void loop() { Inicia-se o método loop. sensor = map (analogRead(A0),0,1023,0,100); Atribui-se o valor lido em A0 já mapeado para a variável sensor. Serial.print(“Valor=”); Serial.println(sensor); Escreve na serial o valor da variável sensor e pula linha. delay(1000); } Espera 1 segundo para nova leitura. Figura 49 - Programa exemplo de uso da função MAP. Utilizando a função MAP. Capítulo 23 77 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX- 20 – Mapeando o potenciômetro. • Monte um circuito com 5 LEDs, sendo dois verdes, um vermelho e dois ama- relos conectados nas saídas 2,3,4, 5 e 6 do Arduino, respectivamente. • Faça o mapeamento do potenciômetro. • Elabore um programa que faça o LED vermelho acender quando o potenciô- metro estiver na metade do seu curso. O LED verde conectado ao pino 2 deve acender com o potenciômetro em 230°. O LED verde ligado ao pino 3, acende quando o potenciômetro estiver em 185°. O LED amarelo conectado ao pino 6 acende com o potenciômetro em 50° e o LED ligado ao pino 5 acende com o potenciômetro em 95°. Use o espaço abaixo para fazer suas anotações. 78 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX- 21 – Controlando o Led com o LDR. • Modifique o programa mostrado na figura 46 substituindo o potenciômetro pelo LDR. O ritmo das piscadas do LED deve aumentar com a intensidade da luz que atinge o LDR. Caso o resistor ligado esteja conectado ao positivo da fonte de alimentação (pull-up), o LDR quanto menos luz chegar até o LDR, maior será a tensão aplicada à entra- da analógica. Então o circuito se comportará como um sensor de sombra. Figura 50 - Sensor de sombra. Já se o LDR é que for diretamente conectado ao positivo da fonte de alimentação, então quando mais luz chegar ao LDR, maior tensão será aplicada à porta analógica e o circuito se comportará como um sensor de luz. Figura 51 - Sensor de sombra. O LDR (Light Dependent Resistor) resistor dependente da luz, é um dispositivo cujo o valor da resistência entre os seus terminais, depende da quantidade de luz que chaga até o seu corpo. Quanto mais luz chega até o dispositivo, menor será o valor da resistência. E quanto menos luz chega até o dispositivo, maior será a resistência entre os seus terminais. Para ligar um LDR à uma porta analógica do Arduino, é necessário montar um circuito divisor de tensão. PWM (Pulse Width Modulation) – modulação por largura de pulso – é uma técnica utilizada para obter um valor analógico a partir de uma variação digital. Em uma saída digital, a tensão poderá variar entre +5V e 0. Se o nível lógico da saída for sempre 1 ou sempre 0, o resultado será um valor constante. Porém se em vez de fixar a saída em um valor único e sim fazer variá-lo entre 1 e 0 (+5V e 0), a tensão resultante não será mais constante e sim uma proporção do valor máximo da ten- são, ou seja uma porcentagem de +5V. Independentemente da frequência, se uma saída variar o entre 1 e 0 de tal for- ma que em cada período, o valor da tensão seja +5V perdure por exatos 50% do tempo total do período (o nível 0 terá a mesma duração), o valor médio da tensão serão exatos 2,5V. Observando a figura abaixo. t1 equivale ao tempo de duração do nível lógico 1 e t2 corresponde ao tempo de duração do nível lógico 0. T vale portanto t1 + t2. Figura 52 - Onda quadrada. O valor médio da tensão poderá ser obtido usando a seguinte fórmula: Equação 2 - Cálculo do valor médio. PWM. Capítulo 24 80 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o Assim, se o tempo de duração do nível alto, também conhecido como ciclo ativo, for alterado, será possível obter um valor médio de tensão entre 0 e 5V. Na placa do Arduino UNO e equivalentes, apenas algumas saídas digitais podem ser utilizadas como saídas PWM, são as saídas dos pinos 3, 5, 6 ,9, 10 e 11, sen- do que a frequência da tensão nessas saídas quando utilizadas como PWM é de 490Hz. A função analogWrite(pino,valor) configura o pino indicado como sendo uma saída PWM e portanto, nele existirá um sinal com frequência igual a 490HZ, com o ciclo ativo definido pelo valor dentro do parênteses. O parâmetro valor corresponde a variação de 0 até 255. Se valor = 0; a tensão na saída será 0V, Se valor = 255; a tensão na saída será 5V. EX- 22 – Controlando o Led com PWM. • O objetivo é controlar o brilho de um LED utilizando a técnica de PWM. Para isso, ligue um potenciômetro à uma entrada analógica e o LED a uma das I/O digitais que podem executar a função PWM. • Elabore o código utilizando as funções analogRead para ler o valor do po- tenciômetro e transformar em um valor binário, e a função analogWriteque escreve na saída digital, o valor indicado. O CI LM35 é um circuito integrado com a função de trabalhar como sensor tem- peratura de precisão, com tensão de saída linearmente proporcional à tempera- tura dada em ºC. O LM35 não necessita de qualquer calibração externa e pode proporcionar precisão de ± 0,5 ° C à temperatura ambiente. De baixo custo está classificado para operar em uma faixa de -55 ° C a +150 ° C. Como o CI fornece uma tensão de ~10mV a cada ºC de variação de temperatura ele não percorre toda a gama possível de valores disponíveis na entrada analógi- ca (0 – 5), então, é comum aplicar uma fórmula para melhorar a faixa de leituras que é a seguinte: Temperatura = AVcc* analogRead(pinoanalógico)*100/1024 Equação 3 - fórmula de ajuste para temperatura. O programa que pode ser utilizado para a leitura da temperatura no terminal se- rial é o seguinte: int pinoSensor = 0; Declaração da variável pinoSensor onde será ligado o terminal de saída do LM35 e deve ser conectado no pino A0 da placa. int valorLido = 0; float temperatura = 0; Declaração da variável valorLido e temperatura. void setup() { Serial.begin(9600); } Inicia-se o método setup e a comunicação serial. void loop() { Inicia-se o método loop. valorLido = analogRead(pinoSensor); Atribui-se à variável “valorLido” o valor que está na variável “pinoSensor”. O sensor de temperatura. Capítulo 25 temperatura = 5.0*analogRead(pinoSensor)*100.0/1024; Aplica-se a fórmula para ampliação da faixa de leitura. Serial.print(“Temperatura atual: “); Serial.println(temperatura); Escreve na serial o valor da temperatura lido. delay(1000); } Atrasa o programa em 1 segundo. Figura 53 - Lendo temperatura com o LM35. Verifique se o código escrito está correto e grave-o no micro. Abra o monitor serial e veja a indicação da temperatura. Para variar o valor da temperatura, basta segurar com os dedos o corpo do LM35. Fazer o mapeamento deste sensor permite atribuir ao valor lido, uma outra gama de leituras. //temperatura com map. Nome do programa int pinoSensor = 0; int valorLido = 0; float temperatura = 0; Declarando as variáveis pinoSensor atribuindo o valor 0 que corresponde ao pino A0 da placa Arduino. valorLido é uma variável onde será guardado o valor já transformado em binário apresentado à entrada A0. Temperatura é a variável que guardará o valor lido e aplicada a função map da temperatura lida. void setup() { Serial.begin(9600); } Início do método setup Inicia-se a comunicação serial void loop() { Método loop valorLido = analogRead(pinoSensor); Atribui-se à variável valorLido, o valor existente em pinoSensor, ou seja, em A0. temperatura = 5.0* analogRead(pinoSensor)*100.0/1024; Aplica a fórmula no valor lido do pinoSensor (A0). temperatura = map (temperatura, 25,31,0,100); Aplica a função map Serial.print(“Temperatura atual: “); Serial.println(temperatura); Imprime a frase e o valor lido. delay(1000); Retarda em 1 segundo. Figura 54 - Mapeando o LM35. 83 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o EX- 23 – Mapeando o sensor de temperatura. • Monte um circuito com 5 LEDs, sendo dois vermelhos, dois amarelos e um verde conectados nas saídas 3,4,5, 6 e 7 do Arduino, respectivamente. • Faça o mapeamento do sensor de temperatura. • Elabore um programa que faça o LED verde acender entre 0 e 50%. Os LEDs amarelos, devem acender entre 50 e 60% e entre 60 e 70% respectivamente. Os LEDs vermelhos, acendem entre 70 e 80% e entre 80 e 100%. • Os LEDs devem permanecer acesos e só apagarão quando a condição não for verdadeira. Sempre que a tensão requerida pela carga e/ou a corrente solicitada pela carga forem maiores do que a tensão de alimentação da placa Arduino (5V) ou maior do que a máxima corrente que uma saída pode fornecer (40mA), é necessário utilizar um dispositivo de interface entre a plataforma Arduino e o que se quer utilizar. O Relé é um dispositivo muito utilizado quando a tensão da carga não é com- patível com a utilizada na plataforma Arduino e em especial, quando a carga for por exemplo uma lâmpada ou um dispositivo eletrônico alimentado pela rede elétrica. Não é recomendado, embora possa ser possível a ligação direta da bobina do relé na saída da plataforma Arduino e por isso, utiliza-se um transistor que terá a fun- ção de trabalhar como uma chave eletrônica, recebendo em sua base, um sinal de tensão em baixíssima potência e podendo acionar com folga a bobina do relé. O esquema abaixo mostra como o relé está interligado como o transistor. Existe ainda um LED e um resistor, não mostrados no esquema que tem a função de indicar quando o módulo recebe um sinal na entrada. O diodo em paralelo com a bobina do relé, serve para eliminar os efeitos da des- carga da bobina no momento do seu desligamento. O acionamento do relé pode ser parecido com o tipo de acionamento utilizado para o LED. Basta estabelecer uma condição relacionada ao estado do botão. Se o botão estiver em 1, o relé deve permanecer desligado e se o botão estiver em 0, o relé deve ser acionado. Figura 55 - Relê acionado por transistor. Utilizando o relé. Capítulo 26 85 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o O código a seguir mostra isso. //Acionando rele com botão. Nome do programa int BOTAO = 5 ; Variável botão relacionada ao pino 5 int RELE = 7 ; Variável relé relacionada ao pino 7 int val = 0; Variável val que armazenara valores intermediários void setup(){ Método setup. pinMode(RELE,OUTPUT); Estabelece o pino 7 como saída digital. pinMode(BOTAO,INPUT); } Estabelece o pino 5 como entrada digital. void loop(){ Método loop val=digitalRead(BOTAO); Atribui a variável val, o valor lido na variável botão. if(val==HIGH) { Testa o valor de val se igual a 1 digitalWrite(RELE,LOW); } Se verdadeiro, a variável relé vai para 0 else { Se não digitalWrite(RELE,HIGH); } } A variável relé vai para 1. Figura 56 - Código para acionar um relé. Para montar o circuito utilize um botão com o seu resistor pull-up conectado ao pino 5 e o módulo do relé que será conectado ao pino 7 da placa Arduino. As vezes utilizamos um botão para ligar e outro botão para desligar o circuito. O programa a seguir faz isso. //Botao liga e botao desliga Nome do programa const int bliga = 5; Declara a variável bliga e atribui o pino 5. const int bdesliga = 4; Declara a variável bdesliga e atribui o pino 4. const int ledPin = 3; Declara a variável ledPin e atribui o pino 3. int bliga1 = 1; Declara a variável bliga1 e atribui o valor inicial igual a 1.. int bdesliga1 = 1; Declara a variável bdesliga1 e atribui o valor inicial igual a 1. void setup() { Inicia o setup pinMode(ledPin, OUTPUT); Estabelece a variável ledPin como saída 86 C ap ac it aç ão t éc n ic a n a p la ta fo rm a A rd ui n o pinMode(bliga, INPUT); Estabelece a variável bliga como entrada pinMode(bdesliga,INPUT); Estabelece a variável bdesliga como entrada. } void loop(){ Método loop bliga1 = digitalRead(bliga); Atribui a variável bliga1 o valor lido em bliga bdesliga1 = digitalRead(bdesliga); Atribui a variável bdesliga1 o valor lido em bdesliga if (bliga1 == LOW) { Lê e compara o estado de bliga1 se igual a 0 digitalWrite(ledPin, HIGH); Se verdadeiro, a variável ledPin assume 1 } if (bdesliga1 == LOW) { Lê e compara a variável bdesliga se igual a 0 digitalWrite(ledPin,LOW); Se verdadeiro, a variável bdesliga assume 0 } } Figura 57 - Botão
Compartilhar