Missão: Arduino 3 de Março Organização
Introdução Boa tarde agente, A sua missão para hoje será programar uma plataforma electrónica dada pelo nome de Arduino. Antes de mais vejamos o material necessário para esta missão: Computador Arduino e Cabo USB BreadBoard
Introdução Esta será a lista de material que lhe será proporcionada de forma a conseguir ultrapassar potenciais obstáculos durante a sua missão. Piezo Speaker Zener!"#$%&! LED 2 Resistências Valor Código de Cores 1 MΩ Castanho-Preto-Verde 220 Ω Vermelho-Preto-Castanho
Introdução Vamos agora proceder à configuração do seu computador de forma a poder programar o Arduino. Visto que existem diferentes configurações consoante o sistema operativo a usar, siga uma das ligações a baixo, correspondente ao seu sistema operativo:! Linux : http://www.arduino.cc/playground/learning/linux (ou http://9qrf.sl.pt )! Mac OS X : http://arduino.cc/en/guide/macosx (ou http://9qrq.sl.pt )! Windows: http://arduino.cc/en/guide/windows (ou http://9qs2.sl.pt )
1º Passo Vamos agora começar oficialmente a nossa missão, para isso iremos primeiro conhecer os detalhes do Arduino. Esta versão do Arduino possui 14 entradas/saídas digitais (dois estados HIGH 5V, LOW 0V) que estão dispostos na parte superior. Dos 14 pinos digitiais, 6 deles são capazes de colocar na saída sinais PWM (Pulse Width Modulation) e 2 deles capazes de comunicação Serial (pinos marcados com TX e RX). Pinos Digitais
1º Passo Na parte inferior estão localizados as 6 entradas analógicas assim como alguns pinos com diferentes tensões e também ligações à massa. As entradas analógicas convertem tensões de entrada analógicas com valores entre 0V e 5V para uma grandeza inteira entre 0 e 1023, ou seja uma unidade vale aproximadamente 5 mv. Outro alcance que não a tensão de 5V pode ser dado pelo utilizador colocando para isso uma tensão de referência no pino VIN, podendo aumentar assim a resolução. Alimentações Pinos Analógicos
1º Passo Agora que conhecemos o hardware do Arduino vamos conhecer também o seu ambiente de desenvolvimento. Abrindo o ambiente de desenvolvimento do Arduino ser-lhe-á apresentada uma janela idêntica à da figura. Aqui poderá programar o Arduino, assim como enviar e receber # informações do mesmo. A sintaxe de programação do Arduino é idêntica à da linguagem C, contudo, ao invés de uma função main(), o Arduino necessita de duas funções setup() e loop(). A função setup() é corrida apenas uma vez no inicio da execução do programa, após essa altura a função loop() será executada repetidamente até que o utilizador pare o funcionamento do Arduino.
2º Passo Vamos agora começar a brincar trabalhar seriamente com o Arduino. Ligue o circuito como ilustrado na figura com a resistência de 220Ω no pino 11 do Arduino:
2º Passo Copie agora este código para o ambiente de desenvolvimento do Arduino: #define ledpin 11 void setup() pinmode(ledpin, OUTPUT); void loop() digitalwrite(ledpin, HIGH); delay(250); digitalwrite(ledpin, LOW); delay(250); A função setup() será apenas executada uma vez, no inicio pinmode() define LED como output A função loop() será executada repetidamente digitalwrite() permitenos definir um pino como HIGH ou LOW Os códigos de Arduino são por vezes referidos como sketch. Carregue no botão para fazer upload do sketch para o Arduino e desfrute do espectáculo!
3º Passo Ok, nós sabemos que neste momento acha que um LED a piscar é a melhor invenção do mundo logo a seguir ao pão fatiado (e nós também pensamos o mesmo!), contudo já pensou no que seria se o LED pudesse ligar e desligar de forma progressiva, aumentando e diminuindo o seu brilho? Apresento-lhe o PWM! Como dito anteriormente, PWM são as siglas de Pulse Width Modulation e trata-se de uma onda rectângular onde nos é possível definir o tempo em que esta se encontra a HIGH, e pode ser acedida sob a função analogwrite(). Apenas os pinos marcados com PWM têm esta capacidade. Um dos muitos usos poderá ser controlar o brilho de um LED, ou a velocidade de um motor (*hint, hint*).
3º Passo Utilizando o circuito que montou no 2º Passo, faça o upload do seguinte sketch: #define ledpin 11 void setup() pinmode(ledpin, OUTPUT); void loop() int brilho; // Aumenta progressivamente o brilho do LED for (brilho = 0; brilho < 255; brilho++) analogwrite(ledpin, brilho); delay(2); // Diminui progressivamente o brilho do LED for (brilho = 255; brilho >= 0; brilho--) analogwrite(ledpin, brilho); delay(3); delay(250); Nota: Podemos continuar a usar o pino 11 para ligar o LED, porque o pino 11 suporta PWM.
4º Passo Isto está a tornar-se estranho se há 5 minutos as pessoas não reparavam, agora estão a olhar-lhe de lado. Essa fixação por LEDs não é normal! Vamos mudar de assunto e voltamos aos LEDs mais tarde Vamos agora conhecer o conceito de comunicação Serial. Para que é que isso serve? Bem, um LED a piscar é algo genial, mas também pode ser um pouco críptico quando se quer perceber como está a correr o nosso programa. A comunicação Serial permite-nos enviar mensagens do Arduino para o Computador e vice-versa. Vamos aproveitar para testar o Piezo Speaker como sensor e enviar os dados lidos para o nosso Computador.
4º Passo Ligue o circuito como ilustrado na figura, usando a resistência de 1MΩ e o díodo zener (atenção, ao contrário das resistências os díodos têm polaridade!):
4º Passo Faça o upload deste sketch e abra o monitor Serial (ao lado do botão upload). Verifique que quando bate com o dedo no Piezo, o valor registado no monitor Serial passa de 0 para um valor, entre 0 e 1023, correspondente à tensão gerada pelo Piezo. #define piezopin 0 void setup() Serial.begin(9600); void loop() Serial.print("Valor: "); Serial.println(analogRead(piezoPin)); delay(50); Serial.println() envia o texto e quebra a linha. Serial.print() só envia o texto
5º Passo Agora que aprendemos todas estas técnicas,propolho-lhe um projecto. Como desafio proponho-lhe que crie um programa que detecte o número de toques que um utilizador dá no sensor e reaja de acordo com as seguinte regras: Se o número de toques for 1, aumenta o brilho do LED Se o número de toques for 2, diminui o brilho do LED Se o número de toques for superior ou igual a 3, pisca o LED. A nossa sugestão de código encontra-se nas páginas seguintes, mas qual é a piada de ver a solução? " Sugestão: Não se esqueça das funções dadas até agora: analogread() analogwrite() digitalwrite() pinmode() Serial.begin() Serial.print() Serial.println()
5º Passo De seguida apresentamos a nossa solução para este problema: #define piezopin 0 #define ledpin 11 #define fronteira 50 #define acaboutempo 500 // Define variavel global com o valor do brilho do LED int brilho = 128; void ajustabrilho(int ajuste) brilho += ajuste; // Caso o valor ultrapasse a regiao [0; 255]pisca o LED a indicar o erro if (brilho < 0 or brilho > 255) brilho = (brilho > 0)? 255 : 0; piscaled(2); Serial.print("B: "); Serial.println(brilho); analogwrite(ledpin, brilho);
5º Passo int numerotoques() int toques = 0; int tempoinicio; // Fica a' espera de receber toque aqui while(analogread(piezopin) < fronteira); // Conta numero de toques durante acaboutempo ms tempoinicio = millis(); while(millis() - tempoinicio < acaboutempo) if (analogread(piezopin) > fronteira) toques++; Serial.print("*"); // Espera que toque acabe... while(analogread(piezopin) > fronteira); return toques;
5º Passo void piscaled(int numerovezes) int i; for (i=0; i < numerovezes; i++) digitalwrite(ledpin, LOW); delay(250); digitalwrite(ledpin, HIGH); delay(250); // Volta a colocar o LED com o brilho que tinha analogwrite(ledpin, brilho); void setup() pinmode(ledpin, OUTPUT); analogwrite(ledpin, brilho); Serial.begin(9600);
5º Passo void loop() // Detecta o numero de toques e trata dado switch(numerotoques()) case 0: break; case 1: ajustabrilho(63); break; case 2: ajustabrilho(-63); break; default: piscaled(5);
Conclusão Chegou ao fim desta difícil missão, parabéns. O que tentámos mostrar nesta pequena missão foi apenas um exemplo entre centenas de outros, agora incentivamos-lhe a criar e explorar esta brilhante plataforma que pela sua simplicidade permitiu a um largo grupo de pessoas mostrar coisas fantásticas! Quer ver o que pode fazer com o material que tem agora? Visite http://www.instructables.com/id/secret-knock-detecting-door-lock/ e veja como pode abrir uma porta com um toque secreto. Muitos outros projectos que usam o Arduino podem ser encontrados nesse site. Para referência das funções existentes no Arduino: http://arduino.cc/en/reference/homepage (Sugestão: Veja a função tone() ") Esperamos que tenha gostado! NEEC ( http://www.neecist.org )