You are on page 1of 82

NOME DO CURSO

MICROCONTROLADORES

MICROCONTROLADORES

SISTEMA FIES CONSELHO REGIONAL DE SERGIPE Eduardo Prado de Oliveira Presidente SUPERINTENDENTE CORPORATIVO Paulo Srgio de Andrade Bergamini SENAI DEPARTAMENTO REGIONAL Paulo Srgio de Andrade Bergamini GERNCIA DE EDUCAO PROFISSIONAL - GEP Silvia Regina Delmondes Freitas Dantas NCLEO RESPONSVEL PELA ELABORAO DE MATERIAL DIDTICO Marco Antnio Moreira Pacheco

FEDERAO DAS INDSTRIAS DO ESTADO DE SERGIPE SERVIO NACIONAL DE APRENDIZAGEM INDUSTRIAL DEPARTAMENTO REGIONAL DE SERGIPE

MICROCONTROLADORES

2013

2013.SENAI.DR.SE Qualquer parte desta obra pode ser reproduzida, desde que citada a fonte SENAI.DR.SE Centro de Educao e Tecnologia Albano Franco - Aracaju Este trabalho foi elaborado por uma equipe cujos nomes esto relacionados na folha de crdito

Ficha Catalogrfica MICROCONTROLADORES. Aracaju: SENAI-SE, 2013. 130p.il.

1. MICORCONTROLADOR. 2. ARDUINO. 3. ELETRNICA I. Ttulo.

CDU: 681.2

SENAI.DR.SE CETAF AJU - Centro de Educao e Tecnologia Albano Franco Aracaju Av. Tancredo Neves, 2001 Incio Barbosa 49.040-490 Aracaju SE Tel.: 0800-728-0303 E-mail: materialdidatico@se.senai.br

SUMRIO
1 INTRODUO 1.1 MICROCONTROLADORES 1.2 ARDUINO 1.3 HARDWARE E SOFTWARE LIVRE 2 HISTRICO 3 HARDWARE ARDUINO UNO 3.1 CARACTERSTICAS 4 SOFTWARE ARDUINO 4.1 AQUISIO DO SOFTWARE 4.2 INSTALAO (SOFTWARE E HARDWARE) 4.3 CONFIGURAO DO SOFTWARE 4.4 DETALHES DO SOFTWARE 5 LGICA DE PROGRAMAO 5.1 FASES DE DESENVOLVIMENTO 5.2 DIAGRAMA DE BLOCO 5.3 ALOCAR DADOS TEMPORARIAMENTE NA MEMRIA 5.4 INSTRUES DE LER E ESCREVER 5.5 OPERADORES 5.6 ESTRUTURA DE SELEO 5.7 CONTADOR E ACUMULADOR 5.8 ESTRUTURA DE REPETIO 5.9 VETORES 5.10 EXERCCIOS 6 PRTICA DE PROGRAMAO 6.1 ATIVIDADE 1: LED ACESO 6.2 ATIVIDADE 2: LED PISCANDO 6.3 ATIVIDADE 3: LED ACIONADO POR BOTO 6.4 ATIVIDADE 4: CONTROLE LUMINOSO POR PWM 6.5 ATIVIDADE 5: SEMFORO 6.6 ATIVIDADE 6: LED RGB 6.7 ATIVIDADE 7: LED RGB MULTICOLORIDO 6.8 ATIVIDADE 8: ACENDENDO LEDS EM SEQUNCIA 6.9 ATIVIDADE 9: COMUNICAO SERIAL 6.10 ATIVIDADE 10: ESCREVER NO DISPLAY LCD 7. OUTROS PROJETOS PROPOSTOS REFERNCIAS FOLHA DE CRDITOS 7 7 8 9 10 11 11 14 14 14 15 15 17 19 19 20 21 21 23 24 24 27 27 28 29 33 36 42 47 52 57 63 67 73 79 81 82

1 INTRODUO
O componente Microcontrolador proporciona o acesso ao conhecimento de dispositivos eletrnicos programveis aos alunos dos cursos relacionados eletrnica ou eletroeletrnica. A caracterstica dos componentes programveis a abertura criao do usurio, permitindo o desenvolvimento de equipamentos eletrnicos complexos que operem conforme a necessidade da aplicao, embarcados ou no.

1.1 MICROCONTROLADORES
Microcontroladores so dispositivos integrados criados para integrar controlar dispositivos embarcados de certa complexidade que no dependam de um grande processamento. Porm estes equipamentos precisam de um processamento local para administrar suas aes. Para diferenci-los dos microprocessadores de maneira simples, podemos dizer que os microprocessadores precisam de componentes adicionais para se comunicar com o mundo externo e os microcontroladores possuem os componentes adicionais instalados em seu prprio encapsulamento, ou seja, o circuito integrado de um microcontrolador j contm sua forma de relacionamento com o mundo externo. Podemos ento dizer que o microcontrolador um microprocessador com seus perifricos embutidos. Porm, mesmo sendo um componente integrado verstil, sua utilizao depende de uma programao Assembly, um pouco complexa para atividades que dependam de um aprendizado rpido, pois exige que o usurio tenha conhecimento de todo o sistema interno do microcontrolador. Adquirir este conhecimento demanda tempo do usurio, o que o mesmo pode no ter disponvel. Outro fator a dificuldade encontrada pelos usurios para programar o microcontrolador, pois a linguagem Assembly uma linguagem de baixo nvel, exigindo do usurio um bom entendimento da programao para utilizar o equipamento. Logo, o usurio de um microcontrolador necessita entender de lgica de programao e ter um bom conhecimento de eletrnica e, principalmente do microcontrolador que utiliza. Essas justificativas no querem nos levar a entender que os microcontroladores sejam inutilizveis, mas que uma ferramenta que exige grande dedicao do usurio.

Com a ideia de desmistificar um microcontrolador e tornar os sistemas embarcados mais acessveis, um grupo desenvolveu um projeto baseado em um microcontrolador, produzindo um hardware especfico que visava agilizar e facilitar o trabalho com os microcontroladores. Dois projetos semelhantes foram desenvolvidos: o Wiring (2003) e o Arduino (2005), sendo que o segundo recebeu uma aceitao maior pelos desenvolvedores e por isso trataremos deste elemento em nosso trabalho.

1.2 ARDUINO
O Arduino um dispositivo estruturado na forma de hardware livre, uma ideia de desenvolvimento sem patente, livre para que qualquer pessoa possa construir seu hardware a partir do projeto j desenvolvido pelos colaboradores ou comprar de um fabricante, original ou no. Isto significa que o hardware e suas tecnologias esto totalmente disponveis para o conhecimento de qualquer pessoa. Alm da estrutura livre do hardware, o software de programao tambm est disponvel para download gratuitamente no site (www.arduino.cc). A programao neste caso no Assembly, na verdade uma programao baseada na linguagem C. Construiu-se o software e a programao do microcontrolador baseado na plataforma de programao chamada Processing, tambm utilizada na formulao do Wiring. O site oficial do Arduino (www.arduino.cc) a principal referncia para entender e desenvolver equipamentos utilizando a plataforma Arduino. O inconveniente de utiliz-lo o fato de no estar disponvel em portugus, o que pode dificultar um pouco o entendimento, mas a quantidade de exemplos desenvolvidos grande o suficiente para testar e entender como funciona a plataforma. Segundo os desenvolvedores, Arduino uma plataforma eletrnica livre baseada em hardware e software flexveis, fceis e de cdigo aberto. indicada para artistas, designers, hobistas, e qualquer outra pessoa interessada em criar ambientes e objetos interativos. [1] Arduino uma ferramenta computacional capaz de captar informaes e controla-las com mais facilidade do que seu computador. uma plataforma computacional livre baseada em um simples microcontrolador e um ambiente de desenvolvimento para escrever os programas para o hardware. [1] Utiliza-se o Arduino para desenvolver equipamentos interativos, com diversas entradas para sensores e botes e controlar uma variedade de sadas, como luzes, motores e outros equipamentos. [1] A utilizao do Arduino se justifica pelo baixo custo, multi-plataforma, programao simplificada, software de programao livre e hardware livre.
8

Existem vrios modelos de hardware Arduino, porm o utilizado nos laboratrios do SENAI-SE o Arduino Uno, por isso trataremos somente dele em nossa apostila.

1.3 HARDWARE E SOFTWARE LIVRE


Vamos entender as nomenclaturas Hardware e Software Livre e Open Source (Cdigo Aberto). Primeiro, vale lembrar que Hardware o nome dado aos equipamentos com capacidade de processamento e armazenamento de informaes, porm, este equipamento necessita de Softwares ou programas, responsveis pelo tipo de informao a ser processada. Logo, hardware a parte fsica e o software, a parte virtual do processamento. No incio das mquinas computacionais, os softwares eram embutidos na venda da mquina e com cdigo aberto, pois os usurios poderiam melhorlos para atender a suas necessidades. Porm, em 1969 o Governo dos Estados Unidos moveu uma ao antitruste contra a IBM e impediu a venda casada. Desde essa poca, os softwares passaram a ser vendidos separadamente [9]. Por conta disso, os softwares passaram a tratados como propriedade intelectual e software proprietrio. O software proprietrio construdo de maneira restrita, ou seja, o cdigo fonte inacessvel ao usurio. Toda a responsabilidade de desenvolvimento da empresa que vende o programa. O usurio apenas utiliza os recursos permitidos. A ideia do software livre est fundamentada no fato de que quanto mais pessoas analisarem o cdigo, pode-se encontrar e corrigir uma quantidade maior de erros. Richard Stallman comeou a estruturar essa ideia quando encontrou dificuldades para resolver problemas de equipamentos que utilizava no laboratrio de Inteligncia Artificial do MIT, em 1984. Saiu de seu trabalho para desenvolver a Free Software Foundation (FSF), idealizando trabalhos com programas abertos de desenvolvimento livre, tanto do ponto de vista tcnico quanto tico. A ideia principal se concentrava na liberdade do usurio. [9] Em 1998 Eric Raymond junto com outros colaboradores, dentre eles Linus Torvalds, criou a Open Source Initiative (OSI). Esta se diferencia da FSF porque d maior ateno as questes tcnicas e corporativas do software de cdigo aberto. [10] Dentro deste contexto, muitas licenas foram desenvolvidas para proteger os desenvolvedores de software livre. A Creative Commons a fundao que mais licencia trabalhos livres, atribuindo o mesmo ao criador. A ideia do Hardware livre semelhante do Software livre, pois fundamentada no compartilhamento das estruturas como esquemticos do hardware e layout da placa de circuito impresso. A forma para manter viva a
9

ideia de hardware livre se produzir os mdulos, desenvolver mdulos adicionais e vende-los a um preo adequado. Alm disso, manter uma constante atualizao e desenvolvimento de novos mdulos mantem as pessoas interessadas na utilizao do equipamento. Esta frmula procura garantir a existncia do hardware livre.

2 HISTRICO
importante ressaltar que alguns fatos foram determinantes para o desenvolvimento da eletrnica, permitindo utilizarmos equipamentos muito sofisticados. Neste histrico tratamos desde a criao de componentes eletrnicos at o desenvolvimento da ferramenta Arduino. 1873: Frederick Guthrie descobre a emisso terminica, mas sem muito sucesso no meio acadmico [2]; 1883: Thomas Edison patenteia um regulador de voltagem utilizando a emisso terminica, chamada por ele de Efeito Edison [2]; 1904: John Ambrose Fleming criou o tubo de vcuo ou vlvula de Fleming, posteriormente conhecida como diodo. Esta criao se torna o marco inicial da eletrnica [3]; 1907: Lee De Forest inventou o trodo, mas o trodo era frgil e consumia muita potncia [4]; 1925: Julius Edgar Lilenfeld criou um novo trodo (FET), mas por falta de divulgao, praticamente no o utilizaram na dcada de 30 [5]; 1939: Russel Shoemaker Ohl descobre a juno PN [6]; 1947: John Bardeen, Walter Brattain e Willian Shockley inventaram o primeiro transistor com pequenos contatos [5]; 1948: Herbert Matar e Heinrich Welker tambm inventaram um transistor similar ao inventado em 1947 [5]; 1958: Jack Kilby patenteia o primeiro circuito integrado, ideia difundida por toda a dcada de 50 [7]; 1959: Robert Noyce, em trabalho paralelo, tambm inventa um circuito integrado [7]; 1969 a 1974: As empresas Garrett AiResearch, Texas Instruments e Intel desenvolvem simultaneamente os primeiros microprocessadores e/ou microcontroladores [8]; 2003: Hermando Barragn cria o Wiring, primeira plataforma de desenvolvimento com microcontroladores baseada em hardware livre [9]; 2005: Massimo Banzi e David Cuartielles criam o Arduino, plataforma de desenvolvimento com microcontroladores baseada em hardware livre, atualmente difundida em todo mundo [1].

10

3 HARDWARE ARDUINO UNO


Como j dissemos anteriormente, o hardware utilizado ser o Arduino UNO, uma ferramenta compacta para desenvolvimento de dispositivos microcontrolados.

FIGURA 1: VISTAS ANTERIOR E POSTERIOR DA PLACA ARDUINO UMO R3 [1]. FONTE: www.arduino.cc/en/main/arduinoboarduno

3.1 CARACTERSTICAS
O Arduino Uno uma ferramenta desenvolvida com um microcontrolador ATMEL ATmega328. As caractersticas mais importantes do hardware so as seguintes: Microcontrolador Tenso de operao Tenso de alimentao Tenso de alimentao limite Pinos I/O (E/S) Digitais Pinos de Entrada Analgica Corrente DC por pino I/O Corrente DC por pino 3,3V Memria Flash ATmega328 5V 7 a 12 V 6 a 20 V 14 (6 funcionam como sada PWM) 6 40 mA 50 mA 32 kB (ATmega) das quais 0,5kB utilizadas para o bootloader 2 kB (ATmega) 1 kB (ATmega) 16 MHz

SRAM EEPROM Velocidade do clock Conexo USB; ICSP header (In-Circuit Serial Programming); Alimentao externa; Boto de reset.

A estrutura eletrnica da placa permite conexes rpidas com os elementos adicionais necessrios o desenvolvimento desejado. Na figura 1 encontramos o esquema eletrnico da placa Arduino UNO Reviso 3. Vemos que o hardware no muito complexo.
11

FIGURA 2: ESQUEMTICO DO ARDUINO UNO R3 [1]. FONTE: www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

12

3.1.1 Terminais de I/O Digital Como auxilio da figura 1, identificamos as portas de entrada e sada, que esto no barramento de conexo superior identificados de 1 a 13. Suas atribuies, alm das de entrada e sada digital, so: Pinos 0 e 1: Comunicao serial, onde o pino 0 o receptor (RX) e o pino 1 o transmissor (TX). Esta comunicao serve para conectar o Arduino ao computador atravs da USB (ATmega8), tanto para download dos programas, como para comunicao com o Serial Monitor. O Arduino UNO possui dois LEDs identificados com RX e TX para o usurio visualizar se a comunicao serial est em uso. Pinos 2 e 3: Pinos que trabalham com interrupo externa. A interrupo externa acionada quando a porta recebe 0 V (nvel lgico 0). Pinos 3, 5, 6, 9, 10 e 11: Podem funcionar como sada PWM (Modulao por Largura de Pulso). Estas portas so identificadas com um til (~) antes do nmero da porta (Ex.: ~3) Pinos 10, 11, 12 e 13: Estes pinos podem trabalhar como comunicao SPI (Interface Serial Perifrica). Pino 13: O pino 13 j possui um led conectado a ele na prpria placa para sinalizao. Este led est indicado com a letra L e est prximo do pino 13. 3.1.2 Terminais de Sadas Analgicas As portas de entradas analgicas esto na parte inferior direita da placa, de acordo com a figura 1, e so identificadas com a letra A, variando de A0 at A5. No conector superior, ao lado do pino 13 temos a identificao AREF (referncia analgica), tenso de referncia para as entradas analgicas. 3.1.3 Reset Para realizar o reset do microcontrolador, pode-se tanto utilizar o boto localizado no canto superior esquerdo (figura 1), como utilizar a entrada no terminal inferior identificada como reset. 3.1.4 Alimentao (Power) O conector inferior possui algumas sadas de alimentao para alimentar os circuitos adicionais, Shields Arduino ou circuitos desenvolvidos pelo usurio. Encontramos os seguintes terminais: Vin: Alimentao externa (conector jack), quando no utiliza a alimentao pela porta USB. GND: So os pinos de terra da placa.
13

5 V e 3,3 V: Tenses estabilizadas pelo regulador instalado na placa. No alimentar o Arduino Uno atravs destes pinos. IOREF: O pino IOREF serve como referncia de tenso digital para outros equipamentos instalados junto ao Arduino UNO, como os Shields Arduino. Outras caractersticas sobre o hardware sero comentadas durante o estudo.

4 SOFTWARE ARDUINO
O papel de um software de programao permitir que o usurio crie funes para o Arduino executar, j que o microprocessador no possui funes operacionais instaladas. O usurio escreve no software o programa que o Arduino executar. Depois, instala o programa no Arduino e monta o circuito eletrnico necessrio ou instala o shield respectivo para o Arduino executar aquela operao.

4.1 AQUISIO DO SOFTWARE


Primeiramente, para programar o Arduino UNO ou outra verso, necessrio realizar o download do software na internet. Assim, acesse o site www.arduino.cc. Em seguida, acesse a pgina chamada Download. Em Download, acesse o link para o Sistema Operacional Windows, que utilizamos no laboratrio, ou realize o download da verso para o sistema que preferir. Certifique-se que a verso utilizada a mais atual para instalar a ltima verso desenvolvida. O arquivo baixado est zipado e possui todas as informaes necessrias para a utilizao do Arduino.

O software Arduino j se encontra instalado nos laboratrios de eletrnica do SENAI, dispensando a instalao.

4.2 INSTALAO (SOFTWARE E HARDWARE)


Para instalar o software Arduino no computador, deve-se somente extrair os arquivos zipados na raiz (C:\) do computador. Dentro da pasta criada encontra-se o executvel Arduino para programao.

14

Para configurar o driver do dispositivo Arduino, deve-se conectar uma extremidade do cabo na placa do Arduino UNO e a outra em uma das portas USB do computador. O dispositivo Plug & Play tentar o reconhecimento do driver, mas no encontrar um driver compatvel. Ser necessrio buscar o driver na pasta instalada. Para tanto, acesse o Gerenciador de Dispositivos e entre no item identificado com um alerta. Acesse Atualizar Driver e busque a pasta C:\arduino-1.0x\drivers, selecionando-a. Este procedimento instalar o driver do dispositivo e automaticamente o computador reconhecer o Arduino UNO como dispositivo compatvel.

4.3 CONFIGURAO DO SOFTWARE


O funcionamento do software simples, tendo poucas aes para executar. O mais importante integrar o software e o hardware. Para isto, deve-se entrar em Tools->Boarder e selecionar o hardware utilizado. necessrio configurar tambm a porta serial que o Arduino est instalado. Para isso, entre em Tools->Serial Port e selecione a porta correta.

Ateno! Nos laboratrios de eletrnica do SENAI, o hardware utilizado o Arduino UNO, basta selecion-lo.

4.4 DETALHES DO SOFTWARE


O software Arduino uma ferramenta de desenvolvimento que possui uma tela de edio para escrever os programas, uma tela de mensagens para informar o andamento das aes em operao, uma barra de botes rpidos, para executar mais facilmente as aes e alguns menus para configuraes mais avanadas. A tela de edio chamada de sketch (esboo) porque durante a escrita ou desenvolvimento do programa ele ainda apenas uma ideia. Ela ser tratada com este nome sempre, mas no instante que o programa for compilado e estiver pronto para ser carregado no Arduino UNO, j no mais um esboo, mas sim um projeto concludo, apesar de continuar com o nome sketch. O nome das telas de edio possui sempre o mesmo formato, como o exemplo a seguir: sketch_feb08a. Veja que feb a abreviao do ms em ingls, no caso fevereiro. O nmero (08) significa o dia de abertura do sketch. A

15

letra final numera quantos sketchs foram criadas no dia, iniciando com a letra a. A imagem da figura 3 contm o mesmo sketch do exemplo. Quando o usurio concluir o desenvolvimento de um programa, o software verificar (Verify) se o cdigo est correto. Se o cdigo no contiver erros, o programa Arduino passar este cdigo para o compilador AVR-GCC (compilador para microcontroladores ATMEL), transformando-o em um arquivo intermedirio. Este cdigo intermedirio combinado com bibliotecas padro Arduino e o resultado um arquivo com cdigos prontos para a leitura realizada por um microcontrolador Atmel.

FIGURA 3: IMAGEM DO SOFTWARE ARDUINO. FONTE: AUTOR

J dissemos que o ambiente de programao possui alguns botes de acesso rpido, que so comentados a seguir:

16

Verify/Compile: Verifica se no h erros sintticos no programa escrito no sketch. Realiza tambm a compilao do programa para o formato carregado no hardware Arduino. Upload: Envia o cdigo existente no sketch para a placa Arduino. New: cria um novo sketch para edio. Open: Lista todos os modelos existentes no software Arduino, lista os ltimos 12 programas criados pelo usurio e ainda permite o mesmo buscar em alguma pasta. Save: Salva o programa desenvolvido em Documentos/Arduino/ NomeDoArquivo/NomeDoArquivo.ino.

5 LGICA DE PROGRAMAO
Autor: Alisson Freire Batista Este captulo foi editado a partir da apostila de Lgica de Programao do Senai DR Sergipe. Lgica de programao como o programador consegue entender como os computadores executam as instrues. LGICA uma sequencia de instrues desenvolvidas pelo programador que executam um programa independente da linguagem. SEQUENCIA LGICA Passo que so executados por meio de instrues de computador para realizar uma tarefa. INSTRUES So conjuntos de regras em que os computadores executam comandos, de modo ordenado, para realizar as operaes. PROGRAMAS um conjunto de algoritmos criada em uma linguagem qualquer, tais como: PHP, Java, Delphi, C etc, para realizar diversas tarefas nos computadores.

17

Os programas possuem diversas utilidades: Controle de estoque, controle areo, diagnostica um paciente, possibilita compras pela internet, realizar comunicao entre pessoas, editar imagens, controlar os computadores, fazer a comunicao entre computadores etc. ALGORITMO uma descrio objetiva de como os comandos devem ser executados. Algoritmo um roteiro pelo qual os desenvolvedores seguem fielmente as suas sequencia para que possam fazer programas que realizam diversas tarefas. Exemplo: Trocar Pneu de um Carro Folgar os parafusos Posicionar o macaco no lugar devido Acionar o macaco para levantar o carro; Retirar os parafusos Retirar o pneu furado Colocar o pneu reserva no local do pneu que furou Posicionar um leve aperto dos parafusos Acionar o macaco para descer o carro Apertar os parafusos

No exemplo acima vimos uma sequencia em que possvel substituir um pneu furado pelo pneu reserva. Os algoritmos so chamados de pseudocdigo, uma vez que, o que foi descrito neles sero implementados em uma linguagem de desenvolvimento. Nos algoritmos no rgido o seu desenvolvimento, diferente das linguagens que necessitam de um padro. O algoritmo em geral um elo entre a linguagem humana para linguagem de mquina. Algumas regras so estabelecidas no desenvolvimento dos algoritmos. Os algoritmos devem ser claros e objetos de modo que at mesmo uma pessoa leiga a rea de informtica seja capaz de entender, ao menos ler. Algumas regras so usadas no desenvolvimento: Usar somente um verbo por frase Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica Usar frases curtas e simples Ser objetivo Procurar usar palavras que no tenham sentido dbio
18

5.1 FASES DE DESENVOLVIMENTO


Na prtica os algoritmos devem seguir trs sequencias bsicas: Entrada de Dados Processamento Sada

Entrada de Dados: So os dados de entrada do algoritmo. Processamento: So os procedimentos utilizados para chegar ao resultado Final. Sada: So os dados j processados.

5.2 DIAGRAMA DE BLOCO


uma maneira para demonstrar de modo padronizado para representar a sequncia lgica do processamento. Simbologias Diversos smbolos so utilizados para descrever os passos que uma sequencia executa.

Esse smbolo determina incio e o fim de um processamento. Processamentos em geral.

Indicam entrada de dados pelo teclado.

Exibir uma informao ou resultado.

Usado para tomada de deciso.

Smbolo de conexo.

19

Exemplo de simbologia:

INCIO

ESCREVA OL MUNDO

FIM

5.3 ALOCAR DADOS TEMPORARIAMENTE NA MEMRIA


Constantemente os programas fazem diversas execues temporrias e de diversos tipos. Esses dados so colocados na memria do computador, porm, quando sofrem uma atualizao estes so substitudos por novos dados. A funcionalidade das execues temporria depende muito do desenvolvedor, pois o excesso de reserva de memria acarreta em sobrecarga de memria o que deixa o computador lento. Varivel Toda linguagem de desenvolvimento tem a capacidade de alocar na memria os dados, essa tcnica chamamos de criar ou definir varivel. Em geral, as variveis possuem um tipo de dado, ou seja, a depender da linguagem de programao, preciso definir que tipo de dados a varivel deve receber: caractere, nmero inteiro, nmero decimal, data hora etc. Para declarar uma varivel em algoritmo usamos o operador var. Exemplo: var valor1, valor2, valor3 0;

Tipo de dados Os tipos de dados esto relacionados a que informao deve ser executada em determinado instante. Assim temos vrios tipos de dados. Abaixo descrevemos os diversos modos:

20

a. Caracteres: Esse tipo de dados utilizado para guardar informaes que no sejam do tipo numrico. b. Numricas: Usado para manipular nmeros, que podem ser inteiro ou real. So reais os nmeros com casas decimais. c. Alfanumricas: Armazenamento de dados em que encontramos caracteres e nmeros. d. Lgicas: Para definir se um tipo verdadeiro ou falso. Atribuio modo pelo qual utilizamos para inserir dados em uma varivel, representado por diversas formas a mais comum o uso da seta para esquerda, mais diversos smbolos so utilizados. Exemplos: Varivel Valor Varivel Varivel Varivel Expresso Constante Constantes so variveis que mantem o valor mesmo aps a sua execuo. Seu valor nico at o final do processo. valor1 10 (ler-se valor1 recebe 10) valor1 valor2 valor1 valor2 + valor3

5.4 INSTRUES DE LER E ESCREVER


Duas instrues importantes no uso dos algoritmos, Ler e Escrever. Quando desejamos que uma informao seja impressa na tela do computador usamos o comando de Escrever. Quando se faz necessrio ler uma informao digitada pelo teclado usase a instruo LER. Exemplo: escreval( Ol Mundo) leia(valor1)

5.5 OPERADORES
21

Os operadores so meios pelos quais realizamos diversos clculos, assim temos os operadores aritmticos, relacional e lgico. Operadores aritmticos So os operadores usados para realizar as operaes matemtica de clculo como: Adio, Subtrao, Multiplicao e Diviso. Adio Subtrao Multiplicao Diviso Exemplo: total 10 + 12; total 50 - 30; Hierarquia dos clculos A hierarquia determina a ordem de execuo dos clculos: 1 ( ) Parnteses 2 Potenciao 3 Multiplicao, diviso (o que aparecer primeiro) 4 + ou (o que aparecer primeiro) + * /

Exemplo: 1 + 7 * 2 * 2 1 = 28 Operadores relacionais So operadores usados para comparar com caracteres ou nmeros. Seu retorno verdadeiro ou falso ou true ou false. Igual Maior Menor Maior ou Igual Menor ou Igual Diferente = > < >= <= <> ou !=

Exemplo: Tendo as variveis os seguintes valores:


22

Valor1 = 10 Valor2 = 5 Valor1 Valor1 Valor1 Valor1 Valor1 Valor1 Operadores Lgicos So operadores utilizados para determinar se as expresses so verdadeiras ou falsas. E OU NO AND OR NOT Retorna o valor verdadeiro se todas as expresses forem verdade. Retorna o valor verdadeiro se uma das expresses for verdadeira. Tem a funo de inverter o resultado da expresso. Exemplo: se todos forem verdadeiro ele retorna falso. = > < >= <= <> Valor2 Valor2 Valor2 Valor2 Valor2 Valor2 Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro

Exemplo: Tendo as variveis os seguintes valores: Valor1 = 10 Valor2 = 5 Valor3 = 8 Valor1 Valor2 Valor1 > > > Valor2 Valor3 Valor2 AND OU NOT Valor1 Valor3 Valor1 > > > Valor3 Valor1 Valor3 Verdadeiro Verdadeiro Falso

5.6 ESTRUTURA DE SELEO


Estrutura de seleo um modo que temos para executar instrues. Estas instrues dependem de como os resultados do valor de teste lgico ser realizado. Exemplo: inicio var valor =10 se valor >= 10 ento escreval(o valor maior que 10) fim se fim
23

Seleo aninhada Um uma seleo aninhada consiste em executar ou uma instruo ou outra, depende do resultado do teste lgico. Exemplo: inicio var valor =10 se valor >= 10 ento escreval(o valor maior que 10) seno escreval(o valor menor que 10) fim se fim

5.7 CONTADOR E ACUMULADOR


Um contador uma varivel que tem como funo armazenar uma contagem. Exemplo: cont cont + 1;

Acumulador uma varivel cuja funo acumular um clculo; Exemplo: var valor1 = 1; acum acum + valor1

Observao: Tanto um contador, bem como um acumulador, so uteis apenas em uma Estrutura de repetio.

5.8 ESTRUTURA DE REPETIO


Os comandos de repetio executam instrues at encontrar uma condio de parada.

24

Esses comandos so utilizados constantemente quando desejamos executar por diversas vezes alguma instruo. Enquanto Faa O comando Enquanto Faa, s ir executar as repeties caso o teste lgico seja verdadeiro. No incio do comando feito o teste lgico que pode no executar as repeties instrues se o teste no for verdadeiro.

Sintaxe enquanto <Condio Lgica> faa Instrues fim-enquanto Condio Lgica Exemplo: Incio i=0 acum = 0 enquanto i<10 faa acum acum + i fimenquanto fim Repita at Quando usamos essa estrutura de repetio ao menos uma execuo de instruo realizada, visto que, sua condio lgica lida no final dessa estrutura, assim, o comando ficar repetindo at encontrar uma condio verdadeira. Condio de parada se verdadeira

Sintaxe repita instrues at <condio Lgica>

25

Condio Lgica Exemplo: Inicio var valor = 0; repita escreval(Ol mundo) valor valor + 1 at valor < 10 fim Para Faa

Condio de parada se verdadeira

Como toda estrutura de repetio esse comando repetira at que uma condicional chegue ao fim. A estrutura de comando exige um incio, um fim e um passo, que o modo como deve percorrer um lao. Sintaxe para <varivel de incio> at <fim> passo <incremento> faa instrues fim-para

Varivel de incio Fim Incremento

Valor inicial Condicional de trmino passo como deve ser percorrido. Ex.: i de 0 ate 10 passo 2 significa que i assumir os valores 0,2,4,6,8,10. Nesse caso, o lao seria executado 5 vezes.

Exemplo: incio var i : inteiro para i de 0 ate 20 passo 1 faca escreval(i) fimpara fim

26

5.9 VETORES
uma coleo de posies nas quais armazenamos informaes. Genericamente uma varivel de diversas posies. Vetores tambm podemos dizer que um conjunto de variveis, onde cada posio armazena diversos dados com o mesmo nome. Exemplo: Vetor [nomes] ndice das posies Elementos das posies 0 1 2 3 Marcos Antnio Tales Ana 4 5 6 7 8 9

O exemplo acima demonstra um vetor com nome, posies e seus elementos. Para inserir uma informao no vetor basta informar o ndice e digitar o contedo. Nomes[0] Marcos Nomes[1] Antnio Para visualizar uma posio basta informa o nome e a posio. Exemplo: escreva nomes[3]

5.10 EXERCCIOS
1. Faa um algoritmo que receba dois nmeros e ao final mostre a soma, subtrao, multiplicao e a diviso dos nmeros lidos. 2. Escrever um algoritmo para determinar o consumo mdio de um automvel sendo fornecida a distncia total percorrida pelo automvel e o total de combustvel gasto. 3. Escrever um algoritmo que leia o nome de um aluno e as notas das trs provas que ele obteve no semestre. No final informar o nome do aluno e a sua mdia (aritmtica). 4. Ler dois valores para as variveis A e B, e efetuar as trocas dos valores de forma que a varivel A passe a possuir o valor da varivel B e a varivel B passe a possuir o valor da varivel A. Apresentar os valores trocados.

27

5. Ler uma temperatura em graus Celsius e apresent-la convertida em graus Fahrenheit. A frmula de converso : F=(9*C+160) / 5, sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. A Loja Mamo com Acar est vendendo seus produtos em 5 (cinco) prestaes sem juros. Faa um algoritmo que receba um valor de uma compra e mostre o valor das prestaes. Faa um algoritmo que receba um nmero e mostre uma mensagem caso este nmero seja maior que 10. Faa um algoritmo que receba um nmero e diga se este nmero est no intervalo entre 100 e 200. Ler 80 nmeros e ao final informar quantos nmero(s) est()o no intervalo entre 10 (inclusive) e 150 (inclusive).

6.

7. 8. 9.

10. Faa um algoritmo que receba um nmero e mostre uma mensagem caso este nmero seja maior que 80, menor que 25 ou igual a 40. 11. Faa um algoritmo que leia dois nmeros e identifique se so iguais ou diferentes. Caso eles sejam iguais imprima uma mensagem dizendo que eles so iguais. Caso sejam diferentes, informe qual nmero o maior, e uma mensagem que so diferentes. 12. Faa um algoritmo que leia um nmero de 1 a 5 e escreva por extenso. Caso o usurio digite um nmero que no esteja neste intervalo, exibir mensagem: nmero invlido.

6 PRTICA DE PROGRAMAO
Neste captulo trataremos de programas que leve o aluno a entender o funcionamento do Arduino UNO e a familiarizao com a estrutura de programao do software Arduino. As informaes pertinentes quanto aos elementos de programao utilizados ou quanto aos detalhes da estrutura do hardware Arduino UNO estaro nas caixas de aviso. Este mtodo de trabalho far o trabalho com o Arduino mais interessante, focando nos projetos, sem deixar de falar de como funcionam. Os trabalhos so divididos em atividades e projetos. As atividades j esto solucionadas, servem para o estudo do sistema Arduino. J os projetos so propostos e no possuem soluo.

28

6.1 ATIVIDADE 1: LED ACESO


Vamos desenvolver um programa para acender o LED instalado no pino 13 do Arduino UNO. O programa simples, mas nos trar muitas informaes sobre a programao do Arduino. IMPLEMENTAO DO PROGRAMA

- Componentes necessrios a. Placa Arduino Uno; b. Cabo USB.

- Programao O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Blink encontrado no Software Arduino.

Programa /* AcendeLed Este commando serve para acender um led. O led que acender est instalado no pino 13 da placa Arduino UNO. Todas as placas possuem um led neste pino. adapted 10 Feb 2013 by Gualter Atanasio Junior and Maycon Novais */ // D um nome ao pino utilizado: int led = 13; // Funo setup void setup() { // configurao do pino como sada: pinMode(led, OUTPUT); } // Funo loop (ciclo). void loop() { digitalWrite(led, HIGH);

// acende o led
29

} // fim do programa

Conceitos Para aprendermos a programar, temos que entender alguns conceitos que se encontram no programa acima. Estes conceitos estaro entre as atividades e projetos. Por isto, quando encontrar esta imagem, j sabemos que o objetivo fornecer fundamentos tericos ao estudo.

/* .. */ Comentrio: todas as linhas entre o incio e o fim se tornam comentrios, no so comandos do programa. // Comentrio: a linha se torna um comentrio. { .. } Como a linguagem estruturada, para sinalizar o incio e o fim de uma funo, utiliza-se as chaves. ; Toda vez que terminar uma linha de comando, ela necessita ser encerrada por um ponto e vrgula. Conceito 1: FUNES As funes so fragmentos de cdigos que podem ser utilizados mais de uma vez na programao. O Arduino possui, alm da possibilidade de utilizar funes, duas funes especiais, identificadas abaixo: FUNO SETUP Os microcontroladores possuem perifricos internos e alguns no podem operar simultaneamente. Para isso, necessrio escolher o perifrico a utilizar e ento configurar o microcontrolador. Esta configurao realizada atravs da funo setup. Esta funo executada toda vez que ocorrer o reset do sistema. O reset do sistema ocorrer caso o boto de reset seja pressionado ou o programa for inicializado a primeira vez aps a alimentao da placa. void setup() { } A palavra void (vazio) indica que a funo no retorna nenhum valor. Trataremos a questo de funes com retorno posteriormente.

30

Observe o uso das chaves { } para delimitar o incio e o fim dos comandos da funo. Os cdigos inseridos entre as chaves so cdigos executados quando a funo setup chamada.

FUNO LOOP void loop() { } A funo loop outra funo especial da programao Arduino. Ela tem o objetivo de conter os comandos principais. Isto porque o loop funciona como um lao infinito, ou seja, repetido enquanto o sistema estiver alimentado. Conceito 2: VARIVEIS As variveis servem para armazenar alguma informao, ou seja, ela armazena essa informao na memria do microprocessador. Para declarar a varivel deve-se indicar o tipo de varivel, o nome da varivel e o valor da varivel, como o exemplo abaixo: int led = 13; Neste caso, a varivel do tipo inteiro (int), o nome da varivel led e o valor atribudo 13. A qualquer momento da programao, o usurio pode alterar o valor da varivel, mas isto deve ocorrer dentro de uma funo. led = 10; Conceito 3: COMANDOS Os comandos so a estrutura das aes do programa. Eles so os responsveis por executar aes que orientam o programa.

Comando pinMode() O comando pinMode() serve para configurar os pinos digitais como entrada ou sada. O comando exige a especificao do pino, em nmero ou nome de varivel (led) e se este pino funcionar como entrada (INPUT) ou sada (OUTPUT). Veja os exemplos: pinMode(13, OUTPUT); pinMode(led, OUTPUT); pinMode(4, INPUT); // // // // sada no pino 13 sada no pino de valor da varivel led entrada no pino 4

31

Comando digitalWrite () Este comando escreve nvel lgico (NL) alto (HIGH) ou baixo (LOW) em uma porta configurada como sada digital. digitalWrite(led, HIGH) A identificao led indica o pino que ter sua sada alterada. Pode ser utilizado o nmero do pino para identificao da porta.

DICA Nomear a varivel conveniente porque o usurio no tem a necessidade de decorar o nmero da porta e sim a varivel que possui a informao necessria. Neste caso o pino 13 est identificado com a varivel led, que inclusive indica que o que est instalado no pino.

PROGRAMANDO Agora que voc j conhece os elementos do programa, realize a sequncia abaixo para programar o Arduino UNO e rodar o programa:

a. b. c. d. e.

Instale o Arduino UNO no computador atravs da porta USB. Escreva o programa da Atividade 1 no sketch do software Arduino; Verifique se o programa est correto e corrija se necessrio; Realize o upload do programa no Arduino UNO; Se tudo estiver correto, o Arduino UNO executar a o programa e o led amarelo da placa Arduino UNO ficar permanentemente aceso.

ANLISE DO PROGRAMA a. Declaramos uma varivel chamada led com valor 13, o nmero do pino que vamos trabalhar; b. Vemos que na funo setup, o programa configura o pino 13 como sada atravs da varivel led; c. Por ltimo, na funo loop, o programa acende o led, executando a ao HIGH no pino, elevando sua tenso para 5 V, ou seja, seu NL para alto.

32

6.2 ATIVIDADE 2: LED PISCANDO


Esta atividade tem como objetivo inserir duas questes: uma o fato de podermos inserir leds em outros pinos externamente, a outra como programar o Arduino para a ao de piscar um led. Para isto, vejamos a sequncia da atividade. - Componentes necessrios a. b. c. d. Placa Arduino Uno; Cabo USB; Protoboard; Resistor de 320 ohms (o valor depende do Led

utilizado); e. LED de 5 mm; f. Diversos fios jumpers (fios).

- Esquemtico Aqui encontramos a representao esquemtica do circuito. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 4: ESQUEMA ELTRICO DA ATIVIDADE 2. FONTE: AUTOR

33

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

FIGURA 5: MONTAGEM DA ATIVIDADE 2. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- Programao O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Blink encontrado no Software Arduino. PROGRAMA /* Este programa serve para alternar a sada entre nvel lgico alto (NL1) e baixo (NL0), mudando a cada 1 segundo. adapted 15 Feb 2013 by Gualter Atanasio Junior and Maycon Novais */
34

// Declarao de variveis int led = 9; // configurao do Arduino: void setup() { pinMode(led, OUTPUT); //pino 9 como sada. } // Rotina Principal void loop() { digitalWrite(led, HIGH); // acende o led delay(1000); // espera 1 segundo digitalWrite(led, LOW); // apaga o led delay(1000); // espera 1 segundo }

Conceitos FUNO delay() Esta funo realiza uma pausa no sistema durante um tempo em milissegundos especificado no parmetro. Exemplo: delay(50);

No exemplo acima, a pausa ser de 50 milissegundos. Este parece ser um valor pequeno, mas podemos criar pausas maiores, como a do programa, de 1000 milissegundos, ou seja, 1 segundo.

PROGRAMANDO Agora que voc j conhece os elementos do programa, realize a sequncia abaixo para programar o Arduino UNO e rodar o programa:

a. b. c. d.

Instale o Arduino UNO no computador atravs da porta USB. Escreva o programa da Atividade 2 no sketch do software Arduino; Verifique se o programa est correto e corrija se necessrio; Realize o upload do programa no Arduino UNO;
35

e. Se tudo estiver correto, o led externo ficar piscando, a cada 2 segundos.

ANLISE DO PROGRAMA a. Declaramos uma varivel chamada led com valor 9, o nmero do pino que instalamos o led; b. Vemos que na funo setup, o programa configura o pino 9 como sada atravs da varivel led; c. Na funo loop, o programa acende o led durante 1 segundo; d. Aps o tempo determinado, o programa apaga o led por mais 1 segundo; e. Lembramos que a funo loop repete as aes, logo, volta ao item c e repete a operao.

- Projetos Propostos As atividades abaixo so propostas como trabalho adicional. 1. Crie um programa e execute no Arduino UNO que pisque alternadamente 2 leds montados externamente. 2. Crie um programa e execute no Arduino UNO que pisque um led que permanea 2 segundos aceso e 0,5 segundos apagado e outro que fique acendendo e apagando a cada 1 segundo.

6.3 ATIVIDADE 3: LED ACIONADO POR BOTO


Nesta atividade vamos utilizar um boto para acionar um led. Toda vez que o boto estiver pressionado, o led ser aceso, e quando o boto for solto, o led apagar.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. Protoboard; d. R1:Resistor de 320 (o valor depende do Led utilizado); e. R2: Resistor de 10 k;
36

f. LED1: LED; g. S1: Boto; h. Diversos fios jumpers

- Esquemtico Aqui encontramos a representao esquemtica do circuito. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 6: ESQUEMA ELTRICO DA ATIVIDADE 3. FONTE: AUTOR

Observe a seguinte conexo: a. O boto S1 est ligado em 5V e no pino 2, porm h o resistor R2 conectado tambm no pino 2 e em terra (GND). A funo do resistor R2 garantir que o nvel lgico do pino quando o boto no pressionado fique em 0. Se esta tcnica no for utilizada, o terminal fica sujeito a interferncias eltricas, e o microcontrolador pode entender que o nvel lgico 1.

37

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

FIGURA 7: MONTAGEM DA ATIVIDADE 3. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Debounce encontrado no Software Arduino. /* Debounce created 21 November 2006 by David A. Mellis modified 30 Aug 2011 by Limor Fried adapted 01 Feb 2013
38

by Gualter Atanasio Junior and Maycon Novais This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Debounce */ // Constantes: no mudam de valor // so utilizadas para indicar os pinos das portas I/O const int Bot = 2; const int Led = 9; // Variveis: podem mudar de valor durante o programa int EstadoBot; int UltimoEstadoBot = LOW; // variveis do tipo long // seu nmero muito maior que o inteiro long TempoUltimoDebounce = 0; long TempoDebounce = 50; // Configurao do microcontrolador void setup() { pinMode(Bot, INPUT); pinMode(Led, OUTPUT); } // Loop void loop() { // Varivel local: s funciona dentro do loop // Armazena o estado atual do boto int Leitura = digitalRead(Bot); // Inicia contagem do tempo de Debounce if (Leitura != UltimoEstadoBot) { TempoUltimoDebounce = millis(); } // Testa se o tempo de Debounce estourou if ((millis() - TempoUltimoDebounce) > TempoDebounce) { EstadoBot = Leitura; } // Ajusta o sinal do led conforme o estado do boto digitalWrite(Led, EstadoBot); // Armazena o estado atual do boto no ltimo estado UltimoEstadoBot = Leitura; }

39

Conceitos Funo if() Explicamos a funo if() no captulo anterior, no item 5.5 Estrutura de Seleo. Lembre-se que ele testa uma condio e s executa a sequncia de comandos caso a condio for verdadeira. Comando millis() O comando millis() tem a caracterstica de retornar como valor o tempo em milissegundos desde que iniciou-se a execuo do programa atual. Esse tempo dura aproximadamente 50 dias, antes de acontecer um estouro, ou seja, chegar ao fim da contagem e reiniciar novamente do zero. Varivel: long A varivel long uma varivel real (float) estendida. A varivel real um nmero de 16 bits estruturado com casas decimais. O long possui o dobro do tamanho, ou seja, uma varivel real com 32 bits. Constantes: const As constantes so semelhantes s variveis, pois elas possuem um valor, um nome e um tipo, como a varivel. A diferena que as constantes no podem receber um novo valor durante a programao. Elas permanecero com seus valores inalterados durante toda a execuo do programa.

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 3 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

40

DICA: Ateno quando escrever os cdigos do programa. A maioria dos erros de programao devido digitao incorreta do programador.

ANLISE DO PROGRAMA a. Declaramos duas constantes para identificar os pinos do Arduino onde estaro o boto e o led; b. Declaramos duas variveis inteiras, sendo uma para armazenar o estado atual do boto e outra para o estado anterior do boto. Declaramos ainda duas variveis long, sendo uma para a contagem do tempo e a outra para o valor do atraso do Debounce; Na funo setup, o programa configura o pino 9 como sada atravs da varivel led e o pino 2 como entrada para o boto; Na funo loop, declaramos uma varivel interna para receber a leitura da entrada; Depois testamos se o estado atual do boto diferente do estado atual. Se for verdadeiro, armazena o valor do millis() para saber o valor de start do temporizador Debounce; Na sequncia, testa se a contagem de tempo j ultrapassou o limite. Se for verdadeiro, altera a varivel de informao atual do boto com o valor lido da entrada (boto); Por ltimo, atualiza a sada Led (acende ou apaga) com o estado atual do boto e altera a varivel de informao passada do boto com o valor lido da entrada (boto).

c. d. e. f.

g.

h.

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1. Crie um programa que utilize dois botes e um led. O boto 1 acende o led e o boto 2 apaga o led. 2. Crie um programa para o Arduino que tenha 3 botes e um led. Apertando boto 1, o led fica acendendo e apagando a cada 1 segundo; apertando o boto 2, o led pisca a cada 0,5 segundos; e apertando o boto 3, o led apaga.
41

6.4 ATIVIDADE 4: CONTROLE LUMINOSO POR PWM


Nesta atividade vamos utilizar o sistema PWM para controlar a luminosidade de um LED instalado externamente ao Arduino UNO.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. d. e. f. Protoboard; Resistor de 320 (o valor depende do Led utilizado); LED; Diversos fios jumpers.

- Esquemtico Aqui encontramos a representao esquemtica do circuito. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 8: ESQUEMA ELTRICO DA ATIVIDADE 4. FONTE: AUTOR

42

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

FIGURA 9: MONTAGEM DA ATIVIDADE 4. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Fading encontrado no Software Arduino. /* Fading This example shows how analogWrite() function. to fade an LED using the

The circuit: * LED attached from digital pin 9 to ground.

43

Created 1 Nov 2008 By David A. Mellis modified 30 Aug 2011 By Tom Igoe adapted 04 Mar 2013 by Gualter Atanasio Junior and Maycon Novais http://arduino.cc/en/Tutorial/Fading This example code is in the public domain. */ // Constantes const int tempo = 100; //constante de tempo const int Led = 9; //constante da porta do Led // Configurao do Arduino void setup() { // no acontece nada no setup } // Rotina de loop void loop() { // for: rotina para aumentar a intensidade luminosa for(int intens = 0 ; intens <= 255; intens +=15) { analogWrite(Led, intens); delay(tempo); } // for: rotina para diminuir a intensidade luminosa for(int intens = 255 ; intens >= 0; intens -=15) { analogWrite(Led, intens); delay(tempo); } }

Conceitos PWM O PWM (pulse-width modulation) ou Modulao por Largura de Pulso uma forma de onda quadrada que possui uma frequncia constante e seu pulso possui uma largura altervel. Isto significa que o pulso pode durar de 0 a 100% do tempo de pulso. Para explicar melhor, se o PWM estiver a 50%, isso significa que o pulso dura metade do tempo, logo, nesta metade, o nvel
44

lgico do sinal 1 e na outra metade, 0. Se aumentarmos o valor da porcentagem do PWM, o pulso em NL1 dura mais tempo que em NL0. Se diminuirmos, o tempo maior em NL0. A figura 10 exemplifica o funcionamento do PWM.

FIGURA 10: EXEMPLOS DE FORMA DE ONDA DO PWM FONTE: HTTP://ARDUINO.CC/EN/TUTORIAL/PWM

Comando analogWrite() O comando analogWrite(pino, valor) escreve na porta de sada um valor analgico atravs de PWM. A primeira varivel (pino) indica o terminal onde ser a sada PWM; a segunda varivel (valor), indica o tempo que o sinal ficar em nvel lgico 1. O valor varia de 0 (sem sinal) a 255 (sinal mximo), representando 0 a 100% do duty cycle, respectivamente.

Funo for() Explicamos a funo for() no captulo anterior, no item 5.7 Estrutura de Repetio Para-Faa. Lembre-se que esta funo funciona como um lao e
45

testa uma condio at que ela chegue a um limite estipulado e executa a sequncia de comandos caso a condio for verdadeira.

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 4 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

ANLISE DO PROGRAMA a. Declaramos duas constantes para identificar o pino do Arduino onde estar o led e a outra com um tempo de atraso; b. Neste caso a funo setup no executa nenhuma configurao. Na funo loop, declaramos uma varivel interna para receber o valor que enviaremos ao PWM. So dois laos, sendo um para aumentar a intensidade do led e outro para diminuir a intensidade; Depois, enviamos o valor do PWM para a sada, regulando a intensidade luminosa do led; Ao final, a rotina de atraso cadencia o aumento ou a diminuio da intensidade luminosa. O loop se repete infinitamente, acendendo e apagando o led.

c.

d. e. f.

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1 Crie um programa que tenha um LED em um dos pinos digitais, mas em vez do brilho ser controlado de forma automtica, ele ser controlado manualmente atravs de dois botes (B1 e B2), em que uma sempre que for pressionada ir incrementar o brilho em 2 unidades at seu valor mximo (B1) e outra decrementar o brilho em 2 unidades at seu valor mnimo (B2).

46

2 Inclua no programa anterior (exerccio 1) as seguintes caractersticas: - Sempre que B1 for pressionado ele ir incrementar o brilho em 2 unidades, e se ele permanecer pressionado o brilho continuara a ser incrementado de 2 em 2 a cada 20 ms. - Sempre que B2 for pressionado ele ir decrementar o brilho em 2 unidades, e se ele permanecer pressionado o brilho continuara a ser decrementado de 2 em 2 a cada 20 ms. 3 Crie um novo programa que tenha dois botes um led utilizando o PWM para controle de intensidade. O boto 1 acende o led com intensidade mxima e o boto diminui a intensidade at apagar o led. Utilize um dos decrementos de intensidade j utilizados nos exerccios anteriores. 4 O mesmo comando do exerccio 3 pode controlar a velocidade de um servo motor ou motor DC. Monte o circuito que seja capaz de realizar esta atividade. 5 Crie um comando para piscar um led durante 10 vezes a cada 1 segundo, toda vez que o boto 1 for pressionado. O boto deve ficar inutilizado at que o comando termine, ou seja, caso seja acionado durante a execuo da ao de piscar o led, nada acontece. O boto 2 sendo pressionado, interrompe a contagem e mantem o programa aguardando o acionamento do boto 1 novamente.

6.5 ATIVIDADE 5: SEMFORO


Nesta atividade vamos construir um semforo utilizando trs leds instalados externamente ao Arduino UNO.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. d. e. f. g. h. Protoboard; 3 Resistores de 320 (o valor depende do Led utilizado); LED Vermelho; LED Amarelo; LED Verde; Diversos fios jumpers.

47

- Esquemtico Aqui encontramos a representao esquemtica do circuito utilizado. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 11: ESQUEMA ELTRICO DA ATIVIDADE 5. FONTE: AUTOR

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir: No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB

48

FIGURA 12: MONTAGEM DA ATIVIDADE 5. FONTE: AUTOR

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Blink encontrado no Software Arduino. PROGRAMA /* adapted 15 Feb 2013 by Gualter Atanasio Junior and Maycon Novais */ // Declarao de constantes const int ledvm = 10; const int ledam = 6;
49

const const const const

int int int int

ledvd = tempovm tempoam tempovd

5; = 8000; = 2000; = 6000; Arduino: OUTPUT); OUTPUT); OUTPUT);

// configurao do void setup() { pinMode(ledvm, pinMode(ledam, pinMode(ledvd, } // Rotina Principal void loop() {

// vermelho aceso digitalWrite(ledam, LOW); digitalWrite(ledvd, LOW); digitalWrite(ledvm, HIGH); delay(tempovm); // verde aceso digitalWrite(ledam, LOW); digitalWrite(ledvm, LOW); digitalWrite(ledvd, HIGH); delay(tempovd); // amarelo aceso digitalWrite(ledvm, LOW); digitalWrite(ledvd, LOW); digitalWrite(ledam, HIGH); delay(tempoam); }

Conceitos Detalhes do programa A estrutura deste programa repete algumas linhas desnecessrias, a cada mudana de cor no semforo, mas garante que somente uma cor estar acesa a cada vez. Os tempos de cada cor foram dimensionados individualmente, pois em um semforo normalmente eles so diferentes.
50

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 5 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

ANLISE DO PROGRAMA a. Declaramos trs constantes para identificar os pinos de sada do Arduino para os leds e trs para a contagem do tempo de cada led aceso (vermelho, amarelo e verde); b. Na funo setup, configura-se os terminais como sada; c. A funo loop divide-se em 3 setores semelhantes, sendo cada um para ligar uma cor; d. Cada setor apaga os leds das cores que ficaro desligadas e depois acende a cor da vez. Depois utiliza-se o delay para aguardar o tempo que a cor ficar acesa; e. Aps a execuo dos trs setores: vermelho, verde e amarelo, o loop retorna, tornando o sistema cclico.

f. Ateno! Nas prximas atividades a Anlise do programa ser uma atividade a se realizar, e no mais um item j resolvido. g.

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional.

51

1 Desenvolva um controle para um semforo de um cruzamento onde asruas so de mo nica. Lembre-se de que no podem ocorrer colises. 2 Insira no comando do exerccio 1 semforos de pedestres nas ruas, para facilitar os pedestres atravessarem. 3 Inclua tambm no programa do exerccio 2 o boto para o pedestre solicitar o fechamento. Lembre-se que o fechamento do semforo de pedestres no imediato, por isto, inclua um atraso na mudana do semforo aps o acionamento do boto. 3 Desenvolva o programa para um semforo de um cruzamento entre duas ruas de mo dupla. Lembramos que de nenhuma das ruas os veculos podem virar esquerda. Os nicos caminhos so virar direita ou seguir em frente.

6.6 ATIVIDADE 6: LED RGB


Nesta atividade vamos analisar o funcionamento do led RGB (red-greenblue) instalados externamente ao Arduino UNO.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. d. e. f. Protoboard; Resistor de 220 (o valor depende do Led utilizado); LED RGB; Diversos fios jumpers.

- Esquemtico Aqui encontramos a representao esquemtica do circuito utilizado. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

52

FIGURA 13: ESQUEMA ELTRICO DA ATIVIDADE 6. FONTE: AUTOR

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

53

FIGURA 14: MONTAGEM DA ATIVIDADE 6. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Blink encontrado no Software Arduino. PROGRAMA /* adapted 21 Feb 2013 by Gualter Atanasio Junior and Maycon Novais */ // Declarao de const int ledR = const int ledG = const int ledB = const int tempoR const int tempoG const int tempoB constantes 11; 10; 9; = 2000; = 2000; = 2000;

// configurao do Arduino: void setup() { pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT); }
54

// Rotina Principal void loop() { // vermelho aceso digitalWrite(ledB, LOW); digitalWrite(ledG, LOW); digitalWrite(ledR, HIGH); delay(tempoR); // verde aceso digitalWrite(ledR, LOW); digitalWrite(ledB, LOW); digitalWrite(ledG, HIGH); delay(tempoG); // azul aceso digitalWrite(ledG, LOW); digitalWrite(ledR, LOW); digitalWrite(ledB, HIGH); delay(tempoB); }

Conceitos LED RGB O led RGB tem uma caracterstica interessante, pois ele possui 3 cores embutidos dentro do mesmo encapsulamento (LED). Cada as cores utilizadas so as do sistemas de televisores e computadores, o RGB, que utiliza as cores vermelho (Red), verde (Green) e azul (Blue).

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 6 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio;
55

d. Realize o upload do programa no Arduino UNO.

ANLISE DO PROGRAMA Analise as aes do programa e escreva-as abaixo:

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1 Desenvolva um programa que tenha 1 boto e um led RGB para executar a seguinte funo: o led inicialmente est apagado; pressionando o boto na 1 vez, acende a cor vermelha; pressionando novamente o boto, a cor do led muda para azul; pressionando pela terceira vez o led, a cor muda para verde; e pressionando pela quarta vez, o led apaga novamente. 2 Com a mesma ideia do exerccio anterior, podemos realiza-lo utilizando 4 botes, sendo B1 para acender o vermelho, B2 para acender o azul, B3 para acender o verde e B4 para apagar o led.
56

6.7 ATIVIDADE 7: LED RGB M ULTICOLORIDO


Nesta atividade vamos analisar outro funcionamento do led RGB (redgreen-blue) instalados externamente ao Arduino UNO. Iremos utiliz-lo com as 3 cores acesas, mas com intensidades diferentes.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. d. e. f. Protoboard; Resistor de 220 (o valor depende do Led utilizado); LED RGB; Diversos fios jumpers.

- Esquemtico Aqui encontramos a representao esquemtica do circuito utilizado. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 15: ESQUEMA ELTRICO DA ATIVIDADE 7. FONTE: AUTOR

57

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

FIGURA 16: MONTAGEM DA ATIVIDADE 7. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico Blink encontrado no Software Arduino. PROGRAMA /* adapted 25 Feb 2013 by Gualter Atanasio Junior and Maycon Novais */ // Declarao de constantes const int ledR = 11; const int ledG = 10; const int ledB = 9; const int tempo = 2000;
58

// configurao do Arduino: void setup() { randomSeed(analogRead(5)); pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT); } // Rotina Principal void loop() { int intensR = randNum(); int intensG = randNum(); int intensB = randNum(); analogWrite(ledR,intensR); analogWrite(ledG,intensG); analogWrite(ledB,intensB); delay(tempo); } // Funo para criar o nmero randmico int randNum() { randomico = random(256); return (randomico); }

Conceitos Funo Na atividade 1 explicamos como funciona uma funo e detalhamos as duas especiais que so sempre utilizadas na programao (setup e loop). Agora, estamos criando uma funo para facilitar a execuo do clculo do nmero randmico. Esta funo possui um nome escolhido de forma a explicar indicar a atividade da funo. Diferente das funes especiais, que no possuem retorno, esta deve fornecer um valor ao trmino dos seus comandos. int randNum() No caso do exemplo da Atividade 7, o retorno do valor na varivel do tipo inteiro como vemos acima. O nome randNum foi escolhido conforme a
59

atividade e os parnteses () esto vazios pois esta funo no necessita nenhuma entrada. Para executar a funo, necessrio inserir no comando uma linha onde uma varivel recebe o uma informao da funo. int intensR = randNum();

Isto significa que a varivel inteira chamada intensR recebe o retorno da funo tambm numrica e inteira (veja que a funo definida como inteira e no void). COMANDOS randomSeed() O comando randomSeed() serve para inicializar a gerao de nmeros aleatrios. Este comando deve, obrigatoriamente, fazer parte da funo setup. Para que esta funo trabalhe corretamente, ela necessita de um pino analgico no utilizado e que no contenha nenhum circuito eletrnico instalado no mesmo. Ser ento fundamental que seja identificado na funo o pino de entrada analgica reservada para esta funo. randomSeed(analogRead(5));

No programa acima, o pino utilizado o 5. analogRead() O comando analogRead(pino) responsvel pela leitura do pino de entrada analgica atravs de um conversor A/D de 10 bits que est embutido no microcontrolador. Para funcionar necessrio indicar o pino utilizado entre parnteses (). O pino utilizado pode ser nomeado ou indicado pelo nmero. analogRead(3);

random(min,max) O comando random() o responsvel por gerar o nmero aleatrio. Ele escolher um nmero entre os valores mnimo e mximo indicados entre parnteses no comando. Quando o valor gerado incluir o nmero zero (0), no necessrio escrev-lo no comando, basta escrever o valor mximo. importante lembrar que o valor mximo no includo nas possibilidades de nmeros gerados. Logo, se como no programa acima

60

utilizamos o nmero random(256), isto significa que possvel gerar nmeros entre 0 e 255. return() O comando return() serve para, ao encerrar uma funo, retornar a informao nela tratada para uma varivel. No caso do programa desta Atividade, o comando retorna o nmero randmico gerado para uma varivel que se encontra na funo loop. Funo randNum() Analisando a funo randNum(), temos: int randNum() { randmico = random(256); return(randmico); }

Esta funo, quando executada, gera em randomico um valor entre 0 e 255. Este valor encaminhado como retorno da funo. Na funo loop, ela chamada da seguinte maneira: int intensG = randNum();

Aqui, vemos que, ao chamar a funo, j indicamos a varivel que receber o retorno da funo. Lembremos que devemos definir o tipo da varivel, tipo este idntico ao tipo da funo.

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 7 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

61

ANLISE DO PROGRAMA Analise as aes do programa:

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1 Pesquise as cores do arco ris no sistema RGB e desenvolva um comando que execute a funo de forma a acender a sequncia de cores do arco ris, do vermelho para o violeta, a cada 1 segundo. 2 Crie outro programa que conforme a atividade 1, mas agora tenha 2 botes de controle, sendo que pressionando B1, ele aciona ou para a execuo automtica das cores conforme j descrito na atividade 1. O boto B2 tambm para a execuo automtica, mas tambm, conforme pressionado repetidamente, alterna as cores do arco ris, partindo do violeta para o vermelho. O led RGB apaga se B2 no for pressionado em 5 segundos. Enquanto o led no estiver apagado, B1 no retoma a execuo automtica.

62

6.8 ATIVIDADE 8: ACENDENDO LEDS EM SEQUNCIA


Nesta atividade vamos aplicar conceitos para acender uma srie de dez leds em sequncia. Simultaneamente a sequncia vai do primeiro para o ltimo e tambm outra sequncia vai do ltimo para o primeiro. Para isto, precisamos de:

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. 10 LEDS; d. 10 Resistores de 320 (o valor depende do Led utilizado); e. Fios jumper.

- Esquemtico Aqui encontramos a representao esquemtica do circuito. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

FIGURA 17: ESQUEMA ELTRICO DA ATIVIDADE 8. FONTE: AUTOR

63

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligada, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:

FIGURA 18: MONTAGEM DA ATIVIDADE 7. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa Abaixo temos o programa para acender a sequncia de leds. /* Este comando serve para acionar uma sequncia de leds Adapted 9 Mar 2013 By Gualter Atanasio Junior and Maycon Novais
64

*/ // Definio de variveis // Cria um array para os pinos dos LEDs byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // intervalo entre as alteraes int ledDelay(500); // Define a direo que os leds acendero int direcao = 1; // Define o 1 e o ultimo LED int atualLED1 = 0; int atualLED2 = 9; // varivel do tempo unsigned long mudaTempo; void setup() { //define todos os pinos como sada for(int x=0; x<10; x++) { pinMode(ledPin[x], OUTPUT); } mudaTime = millis() } void loop() { for (int x=0; x<10; x++) { // apaga todos os LEDs digitalWrite(ledPin[x], LOW); } // acende os LEDS atuais digitalWrite(ledPin[atualLED1], HIGH); digitalWrite(ledPin[atualLED2], HIGH); atualLED1 += direcao; // incrementa de acordo com o valor de direcao // altera a direo se tivermos atingido o mximo atualLED2 -= direcao; if (atualLED1 == 9) { direcao = -1; } if (atualLED1 == 0) { direcao = 1; } } Conceitos
65

Variveis Byte A varivel byte um nmero binrio composto por 8 bits. Por conveno, os bits so identificados de 0 a 7, sendo 0 o menos significativo ( direita) e 7 o mais significativo ( esquerda). Abaixo temos alguns exemplos de nmeros em bytes: 00101101 00000000 11011011 Unsigned Esta caracterstica da varivel serve para que os valores armazenados no tenham sinal, ou seja, no caso do unsigned long, um valor armazenado em 32bits que vai de 0 (zero) a 4.294.967.295. PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 8 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

ANLISE DO PROGRAMA Analise as aes do programa:

66

- Projetos Propostos Os projetos abaixo so propostos como trabalho adicional. 1 Desenvolva um projeto que acenda gradualmente os leds do primeiro at o ltimo, mas, diferente da Atividade 8, no deve apagar o led anterior. Ao acender o dcimo led, apagar os leds do ltimo para o primeiro. Na prxima vez, acender do primeiro para o dcimo e depois apagar tambm do primeiro para o dcimo. Abaixo temos a sequncia para ligar/desligar leds: Acende na 1 sequncia: L0 L1 L2 L3 L4 L5 L6 L7 L8 L9; Apaga na 1 sequncia: L9 L8 L7 L6 L5 L4 L3 L2 L1 L0; Acende na 2 sequncia: L0 L1 L2 L3 L4 L5 L6 L7 L8 L9; Apaga na 2 sequncia: L0 L1 L2 L3 L4 L5 L6 L7 L8 L9;

6.9 ATIVIDADE 9: COMUNICAO SERIAL


Nesta atividade vamos entender a comunicao serial entre o Arduino e o computador. Para isto, o que for escrito no Monitor Serial do Software Arduino ser enviado ao Arduino UNO e este retornar a mesma informao para o computador, e a informao ser reescrita no Monitor Serial.

- Componentes necessrios a. Arduino UNO; b. Cabo USB.

67

- programa Abaixo temos o programa para comunicar atravs da USB dados entre o computador e a placa Arduino Uno. /* Serial Event example Created 9 May 2011 by Tom Igoe adapted 07 Mar 2013 by Gualter Atanasio Junior and Maycon Novais This example code is in the public domain. http://www.arduino.cc/en/Tutorial/SerialEvent */ // string para armazenar os dados String entradaString = ""; // flag: aviso de que a string est completa boolean stringCompleta = false; // Configurao do Arduino void setup() { // inicializao da porta serial Serial.begin(9600); // reserva de 200 bytes para a entrada de strings: entradaString.reserve(200); } // Rotina Loop void loop() { // envia a string quando chegar o flag for verdadeiro if (stringCompleta) { Serial.println(inputString); // apaga a string: entradaString = ""; // desativa o flag stringCompleta = false; } } /* SerialEvent occurs whenever a new data comes in the hardware serial RX. This routine is run between each time loop() runs, so using delay inside loop can delay response. Multiple bytes of data may be available. */

68

// Funo evento serial executada caso ocorra // uma transmisso serial void serialEvent() { while (Serial.available()) { // recebendo o novo byte char inChar = (char)Serial.read(); // adiciona o caractere no inputString: entradaString += inChar; // caso o caractere enviado indique o uso de uma // nova linha (pressionado o ENTER), o flag ser // acionado. A rotina principal pode trabalhar esta // ao. if (inChar == '\n') { // \n o cdigo ASCII para a tecla ENTER // seta o flag stringCompleta = true; } } }

Conceitos Flag (Bandeira) O flag no um elemento da programao, mas sim um artifcio do programador para sinalizar a ocorrncia de um evento. No programa acima, o flag chamado de stringCompleta, e somente considerada verdadeira (acionado) quando o caractere recebido for ENTER. Variveis Boolean A varivel booleana uma varivel de dois estados. Este estado pode ser verdadeiro (true) ou falso (false) e serve para identificar esta condio. Para declarar um boolean, precisamos identificar o seu valor, conforme abaixo: boolean exemplo1 = false; No exemplo acima, a varivel exemplo1 tem valor falso. String A string uma varivel que armazena caracteres, ou seja, letras maisculas e minsculas, nmeros, e todos os outros sinais encontrados em
69

um teclado. Para declarar uma string, devemos informar o seu valor conforme abaixo: String exemplo2 = ; Como no h nada dentro das aspas, criamos uma string vazia.

Comandos Comando nomeDaVarivel.reserve(valor); Este comando serve para reservar alguns bytes para uma determinada varivel. entradaString.reserve(200); Para fazer a reserva de bytes, necessrio concatenar o nome da varivel, um ponto de separao, o nome do comando ( reserve) e indicar a quantidade de bytes que se deseja reservar, entrando com um nmero entre parnteses.

Comandos da Comunicao Serial A comunicao serial possui diversos comandos para as suas atividades. Vamos analisar os comandos utilizados no exemplo. Serial.begin(velocidade) Este comando serve para definir a velocidade de comunicao (baud rate) em bits por segundo da porta serial. prefervel que a comunicao seja realizada em valores padres (300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ou 115200), justamente porque o computador somente utiliza algum destes valores. A comunicao mais comum 9600 bps. A inicializao da porta serial normalmente realizada dentro da rotina setup. Serial.inputln(varivel) Envia para a porta serial (transmissor) caracteres ASCII. No lugar da varivel que contem a informao, podemos utilizar a sequncia de caracteres. Exemplos de uso do comando: serial.inputln(dados); serial.inputln(Ol mundo!);

70

Este comando no diferencia o tipo de caractere enviado (decimal, binrio, etc.), apenas os transfere como caractere ASCII. Serial.avaliable() Captura o nmero de bytes (ou caracteres) disponveis para leitura na porta serial. Estes dados chegam e so armazenados no buffer de recepo serial (que possui 64 bytes). Serial.read() Comando utilizado para capturar os dados que chegaram pela transmisso serial. Retira-os do buffer e envia a uma varivel pertinente. char inChar = (char)Serial.read(); No exemplo do comando acima, as informaes que chegam serial so lidas como caracteres, como se v entre parnteses a palavra char, e as armazena em uma varivel tambm do tipo caractere. Operando += Variavel1 += Variavel2 Este sinal soma a varivel 2 com a varivel1 e salva a informao na varivel1. No caso de um char, o comando insere o caractere na varivel aps os caracteres j escritos. Exemplo: Varivel1: Ol Mun Varivel2: d; Variavel1 += Variavel2; Varivel1: Ol mund;

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

c. Instale o Arduino UNO no computador atravs da porta USB. d. Escreva o programa da Atividade 9 no sketch do software Arduino; e. Verifique se o programa est correto e corrija se necessrio; f. Realize o upload do programa no Arduino UNO.
71

g. Quando um novo valor chega atravs da porta serial, o valor armazenado em uma string; h. Quando o comando de ENTER (ou Nova Linha) recebido, o loop envia a string para o transmissor serial e apaga a string.

ANLISE DO PROGRAMA Analise as aes do programa:

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1 Desenvolva uma projeto que, da mesma forma que a atividade 8, trabalhe com a comunicao serial, mas, incremente um boto B1 que comande a sada das informaes para o computador. A ideia fazer com que o Arduino somente retorne ao computador a informao se o boto for pressionado. 2 Desenvolva um projeto que contenha um led RGB ligado ao Arduino. O Arduino deve acender o led RGB conforme a cor especificada pela
72

comunicao serial. As cores sero identificadas por palavras enviadas atravs da serial. As cores devem ser: vermelho, azul e verde. Exemplo: quando escrever vermelho no monitor, o computador envia a palavra para o Arduino e este acende o led RGB com a cor vermelha. Para azul e verde, deve acontecer a mesma coisa. 3 - Desenvolva um projeto semelhante ao exerccio 2, que contenha um led RGB ligado ao Arduino. O Arduino deve acender o led RGB conforme a cor especificada pela comunicao serial. As cores sero identificadas por palavras enviadas atravs da serial. As cores devem ser: vermelho, azul, verde, amarelo, violeta, rosa, laranja, marrom e branco. 4 Com base no exerccio 3, desenvolva agora o retorno da informao, ou seja, o Arduino informando ao computador que o led foi aceso. Para isto, ele deve retornar a seguinte mensagem: Operao concluda. Led aceso na cor x..

6.10 ATIVIDADE 10: ESCREVER NO DISPLAY LCD


Nesta atividade vamos escrever palavras no teclado do computador utilizando o Monitor Serial e as palavras sero enviadas para o Arduino UNO e este ir redirecion-las ao Display LCD.

- Componentes necessrios a. Arduino UNO; b. Cabo USB; c. Protoboard; d. 2 Resistores de 220 ; e. Display LCD compatvel com Hitachi HD44780 driver; f. Diversos fios jumpers. - Esquemtico Aqui encontramos a representao esquemtica do circuito. Sempre que encontrar alguma dvida na interligao dos componentes, consulte este diagrama.

73

FIGURA 19: ESQUEMA ELTRICO DA ATIVIDADE 8. FONTE: AUTOR

O circuito acima conecta as seguintes funes do LCD: LCD RS pin to digital pin 12 LCD Enable pin to digital pin 11 para abilitar o LCD; LCD D4 pin to digital pin 5 bit 0 da comunicao; LCD D5 pin to digital pin 4 bit 1 da comunicao; LCD D6 pin to digital pin 3 bit 2 da comunicao; LCD D7 pin to digital pin 2 bit 3 da comunicao; LCD R/W pin to ground (GND) define leitura (5V) ou escrita (GND) do LCD. Neste caso, est ligado ao GND, logo o display pe utilizado sempre como escrita; 10K resistor: ends to +5V and ground wiper to LCD VO pin (pin 3)

- Montagem do circuito Antes de montar o circuito, certifique-se de que placa do Arduino UNO esteja desligado, desconectando o cabo USB e/ou a fonte externa. Monte o circuito como mostrado a seguir:
74

FIGURA 20: MONTAGEM DA ATIVIDADE 8. FONTE: AUTOR

No necessrio que seu circuito esteja igual a este, voc deve seguir apenas a conexo dos componentes. Quando tudo estiver conectado corretamente, ligue o Arduino UNO e conecte o cabo USB.

- programa O cdigo abaixo o programa que executa esta ao e foi elaborado a partir do modelo de domnio pblico SerialDisplay encontrado no Software Arduino.

75

/* LiquidCrystal Library - Serial Input Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 22 Nov 2010 by Tom Igoe adapted 07 Mar 2013 by Gualter Atanasio Junior and Maycon Novais This example code is in the public domain. http://arduino.cc/en/Tutorial/LiquidCrystalSerial */ // inclui a biblioteca de operao do display LCD #include <LiquidCrystal.h> // inicializa a bibliotecacom os terminais de //comunicao do Arduino para o LCD. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // rotina de configurao void setup(){ // configura o nmero de colunas e linhas do LCD lcd.begin(16, 2); // inicializa a comunicao serial Serial.begin(9600); } void { // // if loop() aguarda a chegada de caracteres pela comunicao serial (USB)... (Serial.available()) { // aguarda a chegada da mensagem bit a bit delay(100); // apaga a tela do LCD lcd.clear(); // leitura de todos os caracteres while (Serial.available() > 0) { // envoi dos caracteres para o display LCD lcd.write(Serial.read()); }

} }
76

Conceitos Bibliotecas As bibliotecas possuem informaes especiais s para comandos especficos utilizados na programao. So necessrios, pois nem todos os comandos esto identificados nas bibliotecas bsicas, que so ocultas. No biblioteca #include <LiquidCristal.h> que possui informaes sobre os comandos e a configurao do Display LCD. O comando #include <> utilizado para anexar bibliotecas aos programas. importante lembrar que os comandos ligados s bibliotecas somente funcionam caso as bibliotecas estejam devidamente includas. Explicamos a funo if() no captulo anterior, no item 5.5 Estrutura de Seleo. Lembre-se que ele testa uma condio e s executa a sequncia de comandos caso a condio for verdadeira. Comandos LiquidCristal lcd() Este comando serve para informar ao Arduino os pinos que estaro conectados nas funes do LCD, para justamente configur-lo operao pertinente. No caso desta atividade, temos: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Neste caso, indicamos que RS est conectado no pino 12, enable no pino 11, D4 no 5, D5 no 4, D6 no 3 e D7 no 2. lcd.begin(coluna,linha) O comando lcd.begin() serve para informar a distribuio de caracteres no LCD, indicando o nmero de colunas e o nmero de linhas. No caso desta atividade, temos: lcd.begin(16, 2); Isto significa que o LCD possui 16 colunas e 2 linhas.
77

programa

desta

Atividade

utilizamos

lcd.clear() Este comando serve para apagar tudo que estiver escrito no LCD. lcd.write(dado) Este comando escreve o dado identificado no LCD. No caso desta atividade o que estiver armazenado na serial ser escrito no LCD.

PROGRAMANDO Agora realize a sequncia abaixo programar o Arduino UNO e rodar o programa: para

a. Instale o Arduino UNO no computador atravs da porta USB. b. Escreva o programa da Atividade 10 no sketch do software Arduino; c. Verifique se o programa est correto e corrija se necessrio; d. Realize o upload do programa no Arduino UNO.

ANLISE DO PROGRAMA Analise as aes do programa:

78

- Projetos Propostos Os projetos abaixo so propostas como trabalho adicional. 1 Crie um programa para o Arduino funcione como um relgio, imprimindo na linha superior do display dia ms e ano no formato dd/mm/yyyy e na linha inferior a hora no formato HH:MM:SS. 2 Crie um programa que imprima um nmero no display (por exemplo: 1) e, utilizando 2 botes, utilize B1 para incrementar o valor (2, 3, 4, 5, 6, ...) e o boto 2 para decrementar o valor (10, 9, 8, 7, ... , 0). O valor enviado no pode ser negativo. Incrementar um nmero por segundo. 3 Com base no relgio do exerccio 1, insira 3 botes para ajustar os valores. Quando apertar B1 deve aparecer no display dia na linha superior e o dia atual na linha inferior. Para aumentar o dia, aperte B2 e para diminuir o dia, aperte B3. Repita as operaes para ms, ano, hora, minuto e segundo. Ao concluir o ajuste dos dados corretos, retornar tela principal.

7. OUTROS PROJETOS PROPOSTOS


Os projetos propostos a seguir podem necessitar de outros comandos ou funes que no esto presentes nesta apostila. Portanto, a sugesto estudar os programas exemplos do Software Arduino e acessar o site www.arduino.cc para verificar mais detalhes sobre a programao. 7.1 Desenvolva um sistema de monitoramento de temperatura utilizando um LM35. Informe a temperatura atravs de um display LCD. Caso a temperatura atingir 30 Celsius, um led deve ficar piscando e um buzzer apitando pausadamente. O sistema para de acionar caso a temperatura atinja um valor menor do que a estipulada. 7.2 Desenvolva um sistema de controle de temperatura, que monitore a temperatura (projeto 7.1), mas, quando a temperatura estipulada for alcanada, um ventilador (cooler de processador) ligado na direo do LM35, de forma a refriger-lo, com o objetivo de diminuir a temperatura mais rapidamente. 7.3 Desenvolva um sistema de controle de aquecimento utilizando um LM35 como medidor de temperatura e uma lmpada incandescente de 60W para aquecer o ambiente. Para controlar a temperatura, desenvolva um circuito que,
79

atravs do PWM, aumente ou diminua a intensidade da lmpada, controlando a temperatura dentro de uma faixa permitida. A faixa a ser controlada de 35 a 40 Celsius. Utilize um display LCD para identificar o valor da temperatura. 7.4 Desenvolva um projeto para o controle da eletricidade de um cmodo de uma casa. O cmodo possui 4 tomadas e uma lmpada de iluminao. O habitante deste cmodo programador de computadores e passa vrios dias dentro dele sem sair de l. Para facilitar, ele quer ligado em cada tomada um ventilador, um rdio, uma televiso e o seu computador. Ele quer controlar os equipamentos (se esto ligados ou desligados) atravs do computador. Para isto, crie o circuito eletrnico de acionamento destes 5 elementos tomadas e lmpada e programe a placa do Arduino para receber via porta serial as palavras radio, tv, ventilador, pc e luz. O sistema automaticamente dever definir identificar se eles esto ligados ou desligados e inverter seu estado, ou seja, se ele escrever luz, caso a lmpada esteja acesa, ela apagar; caso o ventilador esteja ligado, enviando o comando, ele desliga e assim por diante. 7.5 Desenvolva um comando bimanual com simultaneidade para o controle de qualquer mquina. Este equipamento serve para garantir a segurana do operador, de forma a impedir que o mesmo se acidente durante a utilizao da mquina. O bimanual deve seguir algumas caractersticas: - Acionado um dos botes, o operador deve acionar o outro em at 1 segundo (o ideal 0,5 segundos, mas para o projeto utilizaremos um tempo maior para facilitar os testes); - Caso os botes sejam acionados antes do tempo, um sinal (led vermelho) permitindo a ao de segurana da mquina (fechar porta, por exemplo) enviado do Arduino mquina; - Aps certo tempo ou aps o acionamento do sensor de porta fechada (utilizar uma chave seletora para simular o sensor, que permanecer fechado at a concluso da operao), o bimanual deve acender uma luz (led verde) avisando o operador que ele pode retirar as mos do comando. - Como o bimanual est ligado execuo da operao da mquina, o bimanual deve permanecer inutilizvel at que o sensor de porta fechada (chave seletora) altere seu estado, indicando que a porta foi aberta.

80

REFERNCIAS
Arduino Bsico / Michael Roberts ; [Traduo Rafael Zanolli] So Paulo : Novatec Editora ; 2011; Lgica de programao: a construo de algoritmos e estruturas de dados / Forbellone, Andr Luiz Villar; Eberspcher, Henri Frederico. 3. Ed. So Paulo: Pearson Prentice Hall, 2005; Eletrnica de Potncia / Ahmed, Ashfaq. Traduo Bazn Tecnologia e Lingustica; reviso tcnica Joo Antnio Martino So Paulo: Pearson Prentice Hall, 2000; Eletrnica Industrial - Anlise de Dispositivos e suas Aplicaes / Andrade, Edna A. de. Bahia: Novotipo Propaganda, 1996; [1] www.arduino.cc acessado em 25/02/2013; [2] http://en.wikipedia.org/wiki/Thermionic acessado em 25/02/2013; [2] http://en.wikipedia.org/wiki/Thermionic acessado em 25/02/2013; [4] http://en.wikipedia.org/wiki/John_Ambrose_Fleming acessado em 25/02/2013; [5] http://en.wikipedia.org/wiki/Vacuum_tube#Triodes acessado em 25/02/2013; [6] http://en.wikipedia.org/wiki/Transistor acessado em 25/02/2013; [7] http://en.wikipedia.org/wiki/Russell_Ohl acessado em 25/02/2013; [8] http://en.wikipedia.org/wiki/Jack_Kilby acessado em 25/02/2013; [9] http://en.wikipedia.org/wiki/Wiring_(development_platform) acessado em 25/02/2013; [10] http://pt.wikipedia.org/wiki/Hist%C3%B3ria_do_software_livre acessado em 25/02/2013; [11] http://pt.wikipedia.org/wiki/Software_livre acessado em 25/02/2013; [12] http://pt.wikipedia.org/wiki/Hardware_livre acessado em 25/02/2013;

81

FOLHA DE CRDITOS
SENAI-SE Equipe Pedaggica SENAI CETAF-AJU Centro de Educao e Tecnologia Albano Franco Aracaju

Compilao / Digitao / Diagramao CETAF-AJU Gualter Atanasio Junior SENAI CETAF - AJU Centro de Educao e Tecnologia Albano Franco Aracaju SENAI GEP Profissional SENAI GEP Profissional Gerncia de Educao

Maycon Novais Rocha Santos

Alisson Freire Batista (Captulo 5)

Gerncia

de

Educao

NIT Ncleo de Informao Tecnolgica Normalizao Bibliogrfica Genilda Mendes de Farias SENAI GEP Profissional Gerncia de Educao

82

You might also like