Iniciação ao Arduino uno Lucínio Preza de Araújo Blocos do Arduino Entradas e saídas digitais Conversor Serial ↔ USB Jack USB Cristal Fonte de alimentação Microcontrolador CPU Atmel Jack Alimentação Terminais de alimentação 5V – 3,3V e Terra (0 V) http://www.prof2000.pt/users/lpa Entradas analógicas ou saídas digitais 2 Resumo da placa Arduino uno http://www.prof2000.pt/users/lpa 3 Arquitetura do Arduino http://www.prof2000.pt/users/lpa 4 O microcontrolador Um microcontrolador, ao contrário de um microprocessador, é desenhado e construído de forma a integrar diversos componentes (CPU, RAM, ROM, Porta série, Porta paralela, etc.) num único circuito integrado. Microcontrolador: ATmega328 (datasheet) http://www.prof2000.pt/users/lpa 5 Arduino uno - Caraterísticas • • • • • • • • • • • • Microcontrolador: ATmega328 Tensão de operação: 5V Tensão recomendada (entrada): 7-12V Limite da tensão de entrada: 6-20V Pinos digitais: 14 (seis pinos com saída PWM) Entrada analógica: 6 pinos Corrente contínua por pino de entrada e saída: 40 mA Corrente para o pino de 3.3 V: 50 mA Quantidade de memória FLASH: 32 KB (ATmega328) onde 0.5 KB usado para o bootloader Quantidade de memória SRAM: 2 KB (ATmega328) Quantidade de memória EEPROM: 1 KB (ATmega328) Velocidade de clock (cristal): 16 MHz http://www.prof2000.pt/users/lpa 6 Arduino uno - Alimentação Internamente, o circuito do Arduino é alimentado com uma tensão de 5V. O Arduino UNO pode ser alimentado pela porta USB ou por uma entrada do tipo “Power Jack” (com o positivo ao centro) através de uma fonte externa DC. A recomendação é que a fonte externa seja de 7 V a 12 V e pode ser ligada diretamente no conector de fonte ou nos pinos Vin e Gnd. A seguir são exibidos os conectores de alimentação para conexão de shields e módulos na placa Arduino UNO: 3,3 V. - Fornece tensão de 3,3V. para alimentação de shield e módulos externos. Corrente máxima de 50 mA. 5 V - Fornece tensão de 5 V para alimentação de shields e circuitos externos. GND - pinos de referência, terra. VIN - pino para alimentar a placa através de shield ou bateria externa. Quando a placa é alimentada através do conector Jack, a tensão da fonte estará nesse pino. http://www.prof2000.pt/users/lpa 7 Software O 1º passo consiste em efectuar o download do respectivo software de desenvolvimento, o Arduino IDE 1.0.5, através do site oficial Arduino O 2º passo consiste em descompactar o ficheiro “.ZIP” para uma pasta à sua escolha. O 3º passo consiste em ligar a placa Arduino ao computador através do cabo USB e instalar os drivers FTDI, para permitir uma conversão de USB para série. O 4º passo consiste em configurar a porta série a ser utilizada e qual o tipo de modelo Arduino, que nos encontramos a utilizar. Para tal, necessitamos de abrir o Software de desenvolvimento e escolher na barra de separadores a opção “Tools”. O 5º passo para a utilização do Software consiste em elaborar o seu Sketch (programa), compilar e, caso não tenha erros, fazer o uploading para a placa Arduino. http://www.prof2000.pt/users/lpa 8 Arduino IDE O monitor serial é utilizado para comunicação entre o Arduino e o computador (PC). As principais funcionalidades do IDE do Arduino são: - Escrever o código do programa - Salvar o código do programa - Compilar um programa - Transportar o código compilado para a placa do Arduino http://www.prof2000.pt/users/lpa 9 Ciclo de desenvolvimento http://www.prof2000.pt/users/lpa 10 Funções base void setup() - Esta função apenas é executada uma vez e é normalmente utilizada para executar a inicialização de variáveis, a inicialização da utilização bibliotecas, a definição dos pinos (como input ou output), o início do uso de comunicação série, entre outros. Esta função apenas volta a ser executada novamente ao ser efectuado o reset ou quando se desligar e volta a ligar a placa de desenvolvimento Arduino. void loop() - Esta função faz um “loop” sucessivo (como o próprio nome indica), ou seja, todos os comandos existentes no interior desta função são sucessivamente repetidos, o que pode permitir a leitura sucessiva de portas, a leitura sucessiva de parâmetros provenientes de sensores externos e actuar de acordo com as condições estabelecidas. http://www.prof2000.pt/users/lpa 11 Programar no Arduino Comentários Muitas vezes é importante comentar alguma parte do código do programa. Existem duas maneiras de adicionar comentários a um programa em Arduino. A primeira é usando //, como no exemplo abaixo: // Este é um comentário de linha A segunda é usando /* */, como no exemplo abaixo: /* Este é um comentário de bloco. Permite acrescentar comentários com mais de uma linha */ Nota: Quando o programa é compilado os comentários são automaticamente suprimidos do arquivo executável, aquele que será gravado na placa do Arduino. http://www.prof2000.pt/users/lpa 12 Programar no Arduino Constantes No Arduino existem algumas constantes previamente definidas e são consideradas palavras reservadas. As constantes definidas são: true – indica valor lógico verdadeiro false – indica valor lógico falso HIGH – indica que uma porta está ativada, ou seja, está em 5V. LOW – indica que uma porta está desativada, ou seja, está em 0V. INPUT – indica que uma porta será de entrada de dados. OUTPUT – indica que uma porta será de saída de dados. http://www.prof2000.pt/users/lpa 13 Entradas analógicas e digitais Portas digitais e analógicas O Arduino possui tanto portas digitais como portas analógicas. As portas servem para comunicação entre o Arduino e dispositivos externos, por exemplo: ler um botão, acender um led ou uma lâmpada. Conforme já mencionado, o Arduino UNO, possui 14 portas digitais e 6 portas analógicas (que também podem ser utilizadas como portas digitais). Os conversores analógicos-digitais (ADC) do Arduino são de 10 bits. Os valores lidos numa porta analógica variam de 0 a 1023 (10 bits), onde 0 representa 0V e 1023 representa 5V. Portas digitais As portas digitais trabalham com valores bem definidos, ou seja, no caso do Arduino esses valores são 0V e 5V. 0V indica a ausência de um sinal e 5V indica a presença de um sinal. Para escrever numa porta digital basta utilizar a função digitalWrite(pin, estado). Para ler um valor numa porta digital basta utilizar a função digitalRead(pin). http://www.prof2000.pt/users/lpa 14 Saídas PWM O que é PWM? PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico ao lado são exibidas algumas modulações PWM. http://www.prof2000.pt/users/lpa 15 Entradas analógica Portas Analógicas As portas analógicas são utilizadas para entrada de dados. O Arduino UNO possui 6 (seis) portas analógicas. As portas analógicas no Arduino UNO são identificadas como A0, A1, A2, A3, A4 e A5. Estas portas também podem ser identificadas por 14 (A0), 15 (A1), 16 (A2), 17 (A3), 18 (A4) e 19 (A5). Por padrão todas as portas analógicas são definidas como entrada de dados, desta forma não é necessário fazer esta definição na função setup(). Os valores lidos numa porta analógica variam de 0V a 5V. Para ler uma valor numa porta analógica basta utilizar a função analogRead(pin). http://www.prof2000.pt/users/lpa 16 Programar no Arduino Para definir uma porta como entrada ou saída é necessário explicitar essa situação no programa. A função pinMode(pin, estado) é utilizada para definir se a porta será de entrada ou saída de dados. Exemplo: Define que a porta 13 será de saída pinMode(13, OUTPUT) Define que a porta 7 será de entrada pinMode(7, INPUT) http://www.prof2000.pt/users/lpa 17 Programa explicado /* ----------------------------------1º Exercício ----------------------------------Ligar e desligar um LED por um segundo */ //-----------------------------------//Função principal //-----------------------------------void setup() // Executa-se quando o arduino é ligado { pinMode(13,OUTPUT); // Inicializa o pin 13 como uma saída } //-----------------------------------//Função repetitiva //-----------------------------------void loop() // Esta função executa-se o instante todo // quando está ligado o Arduino { digitalWrite(13,HIGH); // Liga o LED delay(1000); // Temporiza um segundo (1s = 1000ms) digitalWrite(13,LOW); // Desliga o LED delay(1000); // Temporiza um segundo (1s = 1000ms) } http://www.prof2000.pt/users/lpa 18 Programar no Arduino Numa linguagem de programação existem vários operadores que permitem operações do tipo: Aritmética, Relacional, Lógica e Composta. http://www.prof2000.pt/users/lpa 19 Programar no Arduino http://www.prof2000.pt/users/lpa 20 Programar no Arduino http://www.prof2000.pt/users/lpa 21 Programar no Arduino http://www.prof2000.pt/users/lpa 22 Shields É possível agregar novas funcionalidades a uma placa do Arduino. As extensões das placas do Arduino são chamadas de shields. Existem shields para as mais diversas funcionalidades, por exemplo: Comunicação ethernet Comunicação wifi Comunicação bluethooth Ponte H Banco de relês http://www.prof2000.pt/users/lpa Ethernet Shield 24 Adicionar uma biblioteca Possivelmente algum dia vai precisar de adicionar uma biblioteca para trabalhar com algum sensor ou outro componente no Arduino. Existem diversas bibliotecas disponíveis na internet, que pode baixar e utilizar. Entretanto tem que adicioná-las ao seu IDE para que o mesmo reconheça os comandos que está a utilizar. Para mostrar como proceder, vamos adicionar a biblioteca MsTimer2.h como exemplo. Primeiro vamos baixá-la na página do Arduino (http://arduino.cc/playground/Main/MsTimer2). Feito isso, descompacte o arquivo.zip que foi baixado. Agora vá até à pasta onde “instalou” o seu IDE para o Arduino e procure pela pasta libraries. Dentro deste diretório copie a pasta que foi extraída anteriormente. Por fim, vamos verificar se a biblioteca foi mesmo detectada pelo IDE. Vá a Files > Examples e verifique se a biblioteca que acabamos de adicionar está ali. Se sim, a instalação ocorreu bem e já pode começar a utilizar a sua nova biblioteca. Agora é só “chamá-la” no seu código, que neste caso ficaria: #include <MsTimer2.h>. Vale a pena destacar que na própria página onde baixou a biblioteca, possui as instruções de como utilizar a mesma. http://www.prof2000.pt/users/lpa 25 Exercícios propostos 1.Faça um circuito onde três LEDs acendam em sequência, com um atraso de um segundo entre eles, e depois apaguem igualmente em sequência. 2.Usando um LED vermelho, um amarelo e um verde, crie um semáforo de transito – ou seja, o LED verde deve ficar ligado por um determinado intervalo de tempo, seguido pelo amarelo, depois o vermelho, voltando para o verde. 3.Crie um LED inteligente: ou seja, utilizando um sensor de luminosidade, faça-o ligar se o ambiente estiver escuro demais. 4.Projete o protótipo de uma fechadura com senha - ou seja, a porta só abre se a senha digitada for correta. Para facilitar, utilize um LED vermelho para representar a porta fechada e um LED verde para indicar que a senha digitada foi aceite. 5.Melhore seu protótipo adicionando um atuador sonoro, que avisa caso a senha esteja errada, caso ela esteja certa, e denuncie caso alguém erre a senha mais de três vezes Utilize sons diferentes para cada caso. http://www.prof2000.pt/users/lpa 26 Fontes de informação Site oficial Arduino http://www.arduino.cc Para comandos, consultar o guia de referências em http://arduino.cc/en/Reference/HomePage Biblioteca MsTimer2 http://arduino.cc/playground/Main/MsTimer2 Simulador de Arduino: Virtual Breadboard http://www.virtualbreadboard.com/Main.aspx?TAB=Downloads http://www.prof2000.pt/users/lpa 27