ARDUINO BÁSICO Lição I Frederico José Dias Möller 28/01/14 Frederico Möller 1
SUMÁRIO Introdução O Mínimo Plataforma de que? Plataforma de prototipagem Para começar: blink Hardware Vantagens e desvantagens Software Definição Arduino.cc Arduino IDE Setup Loop A função digitalwrite() Configurando o bicho A função delay() 28/01/14 Frederico Möller 2
SUMÁRIO Um pouco de programação Variáveis Hardware Software Exercício 2 Laços Condicionais Exercício 1 Lendo... Exemplo: Alterar led Revisão Leitura complementar 28/01/14 Frederico Möller 3
INTRODUÇÃO O Arduino é uma plataforma de prototipagem eletrônica italiana. É conhecida por seu fácil uso, podendo ser usada até por leigos. Tem preço relativamente accessível, bom suporte online e uma boa configuração de hardware. 28/01/14 Frederico Möller 4
PLATAFORMA DE QUE??? O Atmel é um microcontrolador. Ele pode ser ligado a sensores, atuadores, módulos de RF... Ele também pode ser programado para agir dentro de uma rotina, reagir a sinais de sensores... 28/01/14 Frederico Möller 5
PLATAFORMA DE QUE? No entanto, é preciso montar um circuito de alimentação para manter o mesmo em operação. Para programá-lo, é necessário usar um módulo programador. É necessário criar extensões de seus pinos, para poder ligar sua saídas à periféricos. 28/01/14 Frederico Möller 6
PLATAFORMA DE PROTOTIPAGEM Quando reunimos todos esses elementos em uma só placa, temos a plataforma de prototipagem eletrônica. O Arduino, não é um microcontrolador, o Arduino é uma PPE. 28/01/14 Frederico Möller 7
VANTAGENS E DESVANTAGENS Acessível Fácil programação Grande variedade de módulos disponíveis no mercado Muitos tutoriais na internet Limitação de funções em nome da facilidade de programação Não aproveita totalmente a capacidade de seu hardware 28/01/14 Frederico Möller 8
Arduino.cc A página oficial do arduino é http://arduino.cc/ Podemos encontrar lá produtos, tutoriais, um fórum de discussões... Lá também podemos encontrar a IDE do arduino e seus drivers. 28/01/14 Frederico Möller 9
Arduino IDE É o ambiente de programação do arduino Vem com exemplos embutidos É leve e gratuita 28/01/14 Frederico Möller 10
Configurando o bicho Uma vez instalada a IDE e os drivers FTDI é necessário configurar a mesma para o Arduíno em uso. Fazemos isso no menu Tools. Em board selecionamos o modelo de Arduíno que iremos usar. Em serial port a porta onde o Arduíno está conectado. Em programmer o tipo de programador do Arduíno. (Em geral é Arduíno ISP) 28/01/14 Frederico Möller 11
O Mínimo O Arduino tem duas grandes funções básicas: A função setup(){} E a função loop(){} SETUP LOOP 28/01/14 Frederico Möller 12
O Mínimo A função setup(){} define as configurações de hardware com as quais o arduino irá trabalhar Ex.: Quais pinos serão de saída, quais serão de entrada, b.rate... A função loop(){} seria a função main do arduino... mas na verdade ela nem sempre é necessária Tudo o que for escrito na função loop será repetido indefinidamente 28/01/14 Frederico Möller 13
PARA COMEÇAR... blink Vamos começar com um programa simples, um blink Blink é um programa de fazer um led piscar 28/01/14 Frederico Möller 14
Hardware Vamos usar: 1 led 5mm 1 resistor de 220 Ω 1 placa de matrizes E é claro, um Arduíno O Arduíno fornece uma tensão de 5v, como V=Ri, devemos ligar o led em série com o resistor de 220 ohms 28/01/14 Frederico Möller 15
Hardware 28/01/14 Frederico Möller 16
Software definição Nosso objetivo é fazer com que um led fique piscando, ou seja, alterne seu estado a cada t segundos Ou seja, o Arduíno deverá fornecer corrente para o led por t segundos, depois deverá cortar essa corrente por mais t segundos e repetir isso indefinidamente. 28/01/14 Frederico Möller 17
Software: Setup Se é o led que vai receber um sinal do Arduíno, então ele deverá estar ligado à um pino de saída. Assim, informamos ao Arduíno que o pino 13 será um pino de saída 28/01/14 Frederico Möller 18
Software loop Uma vez que o programa rodará indefinidamente, ou seja, após rodar a última instrução ele voltará para a primeira, podemos (devemos) escrevê-lo dentro da função loop. 28/01/14 Frederico Möller 19
digitalwrite(pino,valor) A função digitalwrite faz com que um dos pinos digitais emita um sinal, alto ou baixo. Ela recebe a numeração do pino e um HIGH para sinal alto e um LOW para baixo 28/01/14 Frederico Möller 20
delay(num) A função delay faz com que o microcontrolador espere por um número de milésimos de segundos antes de executar a próxima operação 28/01/14 Frederico Möller 21
Software blink Tentem agora escrever o programa blink Se parece com o programa ao lado? Tentem carregar ele no Arduíno através do botão:? 28/01/14 Frederico Möller 22
Um pouco de programação Antes de prosseguirmos vamos falar um pouco mais da linguagem usada no Arduíno O Arduíno usa uma linguagem simples, bastante intuitiva. É possível, com realizar com um único comando uma tarefa que levaria umas boas 10 linhas em outras plataformas. Outra característica é que essa linguagem é um dialeto do C ansi, ou seja, a sintaxe das duas é muito parecida. 28/01/14 Frederico Möller 23
Variáveis Assim como no C, as instruções são executadas na ordem em que foram escritas. Em diversas ocasiões é possível que o Arduíno tenha que trabalhar com números e palavras armazenados em sua memória, estes são chamados de variáveis Antes de uma variável ser usada, ela precisa ser declarada, ou seja, seu nome e tipo deve aparecer no escopo do programa. 28/01/14 Frederico Möller 24
Variáveis Tipos: Exemplos int int Números inteiro 16, 15, 2, 0 float float Números reais 5.2, 0.001, 3.5679 char char letras 47, 'a', 28/01/14 Frederico Möller 25
Laços Laços de repetição são usados quando um determinado grupo de instruções deve ser executado diversas vezes, até que um objetivo seja alcançado. A função loop de certa forma é um laço de repetição, mas ela só pode ser chamada uma vez. Temos os laços for, while e do-while 28/01/14 Frederico Möller 26
Laço For: for(condição inicial; objetivo; ação após cada laço) Usado em geral para repetições contadas While while(objetivo) O laço só será executado e continuará sendo até que o objetivo seja alcançado Do-while do{}while(objetivo) Igual ao o while, mas as instruções serão executadas pelo menos uma vez 28/01/14 Frederico Möller 27
Condicionais É uma tomada de decisão, com base em um teste lógico. Tem o formato if(teste lógico){} else{} O bloco else é opcional. Se o teste lógico for verdadeiro, ele executa as instruções dentro do 1º bloco. Se não, executa as dentro do bloco else{} 28/01/14 Frederico Möller 28
Um pouco de programação À esquerda temos um exemplo de um programa que faz um de dois leds piscarem cerca de 998x Um led piscará se o número for primo e o outro se não for. 28/01/14 Frederico Möller 29
Um pouco de programação Em 1 temos declarações de variáveis. As variáveis i e j são do tipo inteiro. A variável a é do tipo booleana. 28/01/14 Frederico Möller 30
Um pouco de programação O tipo booleano só pode assumir valores lógicos, ou seja, verdadeiro ou falso. Voltando nas variáveis inteiras, notem que se quisermos, podemos atribuir um valor ao declararmos, como fizemos com i. 28/01/14 Frederico Möller 31
Um pouco de programação Em dois temos o início de um ciclo, será executado enquanto i for menor que 1000. Se tivéssemos atribuído 1000 ou mais para i, esse ciclo NUNCA seria executado! 28/01/14 Frederico Möller 32
Um pouco de programação Se fosse um ciclo dowhile, as instruções em seu interior seriam executadas pelo menos uma vez, independente do valor de i Em 3 atribuímos um valor para a 28/01/14 Frederico Möller 33
Um pouco de programação Em 4 abrimos um laço for. Sua condição inicial é a variável j tendo o valor de i. Ele será executado enquanto j for maior que um. Ao fim de cada execução, j será diminuído em uma unidade. 28/01/14 Frederico Möller 34
Um pouco de programação Em 5, dentro do ciclo, executamos uma operação com ª No caso uma operação lógica. 'a' assumirá o seu valor antigo, ou o valor lógico da expressão: O resto da divisão de i por j é igual a zero 28/01/14 Frederico Möller 35
Um pouco de programação Em 6 temos um condicional. Se a for verdadeiro, i led ligado ao pino 12 piscará. Caso o contrário o led ligado ao pino 13 piscará. 28/01/14 Frederico Möller 36
Um pouco de programação Em 6 temos um condicional. Se a for verdadeiro, i led ligado ao pino 12 piscará. Caso o contrário o led ligado ao pino 13 piscará. 28/01/14 Frederico Möller 37
Exercício 1 Altere o programa blink, de modo que o tempo que o led ficará aceso seja igual 1000xn ms sendo n o número de piscadas que ele já deu mais 1. Exemplo: 1ª piscada, delays de 1000ms. 2ª piscada, delays de 2000ms 3ª piscada, delays de 3000ms 28/01/14 Frederico Möller 38
Exercício 1 Notem que você pode declarar variáveis fora da função loop. Notem que cada vez que a função a for é chamada, j assume o valor de i 28/01/14 Frederico Möller 39
Lendo... Um microcontrolador ainda poderia fazer muita coisa se só tivesse pinos de saída. No entanto é muito interessante que ele tenha pinos de entrada, ou seja, pinos que possibilitem com que eles leiam informações do mundo exterior. Sinais digitais podem ser lidos com a função digitalread(pino) 28/01/14 Frederico Möller 40
Exemplo: Alterar led A função digitalread(porta) retorna o valor digital da porta a qual está associada. Se tivermos um sinal alto, ela retornará 1, se não, retornará um 0 Vamos fazer um exemplo, para entender melhor seu funcionamento Nosso programa será uma derivação do blink. No entanto haverá um led vermelho também e um botão de pressão. O programa começará com um dos leds piscando e o outro não. Quando o botão for pressionado, os leds deverão alternar de função. Hardware: 2 leds de 5mms (cores diferentes) 2 resistores de 220 ohms 1 resistor de 150 ohms 1 pushbuttom 28/01/14 Frederico Möller 41
Hardware: Alterar led 28/01/14 Frederico Möller 42
Hardware: Alterar led 28/01/14 Frederico Möller 43
Hardware: pushbuttom A tecla de pressão, com 4 pinos, tem funcionamento simples: Ao ligarmos um sinal em uma de suas perninhas o sinal é mandado para a em frente. Quando pressionamos o botão o sinal deixa de ser mandado para esta e é mandado para a lateral 28/01/14 Frederico Möller 44
Hardware pushbuttom Note que ligamos um dos pinos de saída do botão à uma resistência e ao GND, isso serve para forçar que a tensão no outro pino abaixe quando o botão não estiver acionado, dando assim um valor 0 de input lógico Isso significa que nosso botão envia um ALTO quando acionado. Trocando os pinos de saída, conseguiríamos um botão que envia um BAIXO quando acionado. 28/01/14 Frederico Möller 45
Hardware: pushbuttom Outra coisa que temos que nos atentar com botões em geral é o efeito bouncing Quando o botão é acionado é normal haver uma oscilação de tensão antes que ela se estabilize Alguma saída deve ser implementada para evitar que o pino leia algum sinal nessa zona 28/01/14 Frederico Möller 46
Exemplo II: Alternar led Com base no que já foi dito, conseguem implementar o programa? Deu certo? Se parece com o programa ao lado?? 28/01/14 Frederico Möller 47
Exemplo II: Alternar led Variáveis inicializadas logo no início.(1) A variável botao, que vai receber o valor do pushbuttom está com tipo int, mas poderia ser boolean, ou até mesmo char(1) 1 28/01/14 Frederico Möller 48
Exemplo II: Alternar led O pino 11 foi configurado como input, pois receberá dados do mundo externo.(2) Botao recebe o valor do pino 11 pela função digitalread(pin) 3 2 28/01/14 Frederico Möller 49
Exemplo II: Alternar led Mandar reverificar o a variável botao 5ms após receber um ALTO é uma estratégia (ainda que burra) de evitar o bouncing. (4) Note que não informamos literalmente um número em digitalwrite, ao invés disso apontamos uma variável...(5) 4 4 5 28/01/14 Frederico Möller 50
Exercício II Intensidade básica Agora é a vez de vocês: façam um programa onde a intensidade do LED varie de acordo com a quantidade de vezes que o usuário pressiona o botão. Façam com que haja no mínimo 5 graus de intensidade. Lembrem-se, se um led pisca muito rápido, ao olho humano vai parecer que ele está sempre aceso. 28/01/14 Frederico Möller 51
Exercício II intensidade básica Aqui está uma resposta possível para o exercício. Nela o LED pisca numa frequência de 5ms. Há uma diferença entre o tempo que o led permanece aceso e apagado durante a piscada. Essa diferença dita a intensidade aparente dele. 28/01/14 Frederico Möller 52
Exercício II Flags Se observármos bem, o programa todo leva pouco mais que 10ms para executar cada ciclo. Isso ainda é muito rápido para um ser humano. Se não tomarmos cuidado, o programa vai ter executado vários loops antes do usuário tirar o dedo de cima do botão e alterado a variável valor várias e várias vezes. 28/01/14 Frederico Möller 53
Exercício II Flags Para contornar esse problema, podemos usar o conceito de flags. Flags são mecanismos lógicos que assinalam se algo está habilitado ou não. No nosso caso a flag está relacionada com o botão. 28/01/14 Frederico Möller 54
Exercício II Flags 1 Em 1 a flag é declarada, o nosso programa começa com o botão ativo (flag=1) Quando o teste do botão pressionado é feito, é verificado se o botão está habilitado (2) 3 2 Uma vez que as instruções do botão pressionado são executadas, o botão é desabilitado(3) 28/01/14 Frederico Möller 55
Exercício II Flags Se por um acaso, após isso o programa ter executado um loop antes do usuário ter conseguido tirar o dedo do botão, a flag=0 garantirá que o programa não interpretará que o botão foi pressionado novamente. Somente em 4, quando o usuário tirar o dedo do botão é que a flag voltará para 1 e o botão será reabilitado (5). 5 4 28/01/14 Frederico Möller 56
Revisão Vimos nessa lição: O que é o Arduino A forma de um programa do Arduino Leitura digital Escrita digital Anti tremulação Flags 28/01/14 Frederico Möller 57
Leitura complementar O que é um microcontrolador: http://www.mikroe.com/chapters/view/64/chapter-1-intro Efeito phi: http://global.britannica.com/ebchecked/topic/455763/ph 28/01/14 Frederico Möller 58
Dúvidas??? 28/01/14 Frederico Möller 59
Obrigado e até a próxima lição! 28/01/14 Frederico Möller 60