Introdução ao Arduino

Pessanha Santos ASPOF EN-AEL

Programa

1.Introduçãoà plataforma de desenvolvimento Arduino

2.Análise à sua constituição

3.Software de desenvolvimento Arduino

4.Estruturae Sintaxedo seu código 5.Estudo de alguns exemplos

Introdução Plataforma de desenvolvimento Arduino

O que é o ARDUINO?

Plataforma de desenvolvimento

Simples placa de circuito impresso com um microcontrolador ATMegada ATMEL (mas vamos já ver exemplos!?!??).

Características principais

Simplicidadede utilização (Programação, utilização…); Cross-platform;

Baixo custo;

Open-Source.

A possibilidade de actuarno Mundo que nos rodeia.

Arduino o que consigo fazer?

Ler valores provenientes de sensores Acelerómetros, LDR, ultra-sons, entre muitos outros.

Actuarno Mundo exterior Leds, Motores, Displays(LCD), entre muitos outros.

Capacidade de efectuar protótiposrapidamente e com grande simplicidade.

E muito mais……..

O que é o Arduino? Exemplos ? Algumas apresentações possíveis….

Duemilinove Mega

LilyPadMini Nano

Arduino Duemilinove Arduino Duemilinove

Ou mais simplesmente… Ou mais simplesmente…

Ou “ainda” mais simplesmente… Ou “ainda” mais simplesmente…

O que é o Arduino? Software……

Vantagens…

Claramente ser uma ferramenta Open-Source (Software e Hardware);

Tem uma enorme comunidade de seguidores por todo o Mundo (Permite uma constanteactualização e inovação);

Pode operar sem a presença de um computador (standalone);

Possibilidade de expandir a sua capacidade através da utilização de shields.

O que são shields? Exemplos ? Algumas apresentações possíveis….

InputshieldZigbee

Mas existem muitas mais…. Ethernet

Bibliografia (Alguns exemplos...)

Livros de texto

MakingThingsTalk, Tom Igoe, OREILLY, 2007.

Getting started with Arduino, Massimo Banzi, OREILLY, 2007.

ProgrammingInteractivity, JoshuaNoble, OREILLY, 2009.

Outros…

Site oficial(w.arduino.c) ; Alguns Fóruns (Lusorobótica, Portugal-a-Programar).

Hardware Análise à sua constituição

Microcontroladores utilizados

Modelo Microcontrolador utilizado

Arduino DuemilinoveATmega168 ou ATmega328

Arduino Diecimilia ATmega168

Arduino Mega ATmega1280

Arduino NanoATmega168 ou ATmega328

LilyPad ATmega168V

ProATmega168 ou ATmega328 Pro miniATmega168

Basicamente baseia-se em três modelos de microcontrolador: ATmega168, ATmega328 e ATmega1280

ATmega168 (PDIP)

Microcontroladores utilizados (Exemplos de apresentação)

ATmega328(PDIP)

ATmega1280 (TQFP)

ATmega168/328/1280

Algumas características

Flash16 KBFlash32 KBFlash128 KB

SRAM1 KBSRAM2 KBSRAM8 KB

EEPROM512 bytesEEPROM1 KBEEPROM4 KB

Clock máximo20 MHzClock máximo20 MHzClock máximo16 MHz

ADC10 bitADC10 bitADC10 bit

Consumo a 25ºC (Modo activo)

250 μA 1 MHz (1.8 V)

Consumo a 25ºC (Modo activo)

0.2 mA 1 MHz (1.8 V)

Consumo a 25ºC (Modo activo)

500 μA 1 MHz (1.8 V)

Outros PWM Outros PWM Outros

SPI SPI SPI RS232 RS232 RS232

Existe claramente uma diferença em termos de memória disponível (SRAM, Flash e EEPROM);

O ATmega328 apresenta a mesma arquitectura do

ATmega168 mas com diferentes capacidades em termos de quantidade de memória disponível;

Consumo energético do ATmega1280 é inferior ao do

ATmega328 nas mesmas condições de funcionamento;

Todos os modelos apresentados possuem a mesma resolução no seu conversor A/D.

ATmega168/328/1280 Algumas características (Cont.)

ATmega168/328 ATmega168/328

ATmega1280 ATmega1280

Arduino Duemilinove vs Mega

Arduino Duemilinove Arduino Mega

Microcontrolador Atmega168/328 Microcontrolador ATmega1280

Tensãode operação 5V Tensãode operação 5V

Tensãode entrada

(limites) 6-20V Tensãode entrada

(limites) 6-20V

Pinos de I/O digital 14 Pinos de I/O digital 54

Pinos analógico6Pinos analógico16

Pinos PWM6Pinos PWM14

Corrente DC por pinode I/O 40 mA Corrente DC por pinode I/O 40 mA

Corrente DC (3.3V)50 mACorrente DC (3.3V)50 mA

Existe uma diferença clara em termos de número de pinos analógicos e digitais disponíveis, com vantagem para o Arduino Mega;

O Arduino Mega apresenta maiores dimensões que o

Duemilinove, o que dependendo da aplicação pode um factor importante;

Funcionam ambos com as mesmas tensões de alimentação;

Mas não podemos esquecer que o ATmega1280

(Arduino Mega) apresenta uma maior quantidade de memória disponível (EEPROM, SRAM e Flash).

Arduino Duemilinove vs Mega

Atmega168/328 Análise ao seu pinout vs Arduino

Arduino Duemilinove Pinos digitais

Pinos analógicos

Botão de reset

Power led

Referência Analógica

Microcontrolador Cristal

Alimentação (Standalone)

Reset

Pinos alimentação

Arduino Mega

Pinos digitais

Referencia Analógica

Pinos alimentação Reset

Botão de reset

ICSP Microcontrolador

Pinos analógicos

Pinos digitais (PWM)Pinos de comunicação Cristal

Software Uma abordagem à sua utilização

Disponível para download directamente do site oficial Arduino (w.arduino.c);

Open-Source;

Ambiente de desenvolvimento escrito em java;

Sintaxe utilizada baseada na linguagem de programação de alto nível C (Basicamente é C…..);

Enorme simplicidade de utilização, devido ao bootloader previamente gravado no microcontrolador.

Software de desenvolvimento Algumas características

Software de desenvolvimento Compilar

Parar Compilar

NovoAbrir

Upload

Leitura porta série

Possibilita também a leitura e envio de dados utilizando a porta série

Leitura da porta série (Software Arduino)

Seleccionar a Baud rate

Visualizar dados recebidos

Envio de dados

Ciclo de desenvolvimento Editar Compilar Uploading Executar

Estrutura e Sintaxe Instruções e estrutura do código a utilizar

//Declaração de bibliotecas #include <Client.h>

#include <Ethernet.h>

#include <Server.h>

//Declaração de variáveis globais int i=0; float x=5.67;

Estrutura do sketch Declaração de bibliotecas

Declaração de variáveis globais Função setup

Função loop

Obrigatoriamente do tipo -void

Funções Importantes

A função void setup() é apenas executada uma vez, sendo utilizada para:

Inicialização de variáveis; Inicialização de da utilização de bibliotecas;

Definição dos pinos a utilizar;

Início do uso da comunicação série.

A função void loop() é uma função executada em loop. Apenas outras funções, cuja chamada é feita ao executar esta função, serão executadas.

Funções Analógicas e Digitais

//Definição do pino “Número do pino” como “INPUT” ou “OUTPUT” pinMode(Número do Pino, Modo); EX: pinMode(13, OUTPUT);

//Definição do pino “Número do pino” como “HIGH” ou “LOW” digitalWrite(Número do Pino, Modo); EX: digitalWrite(13, OUTPUT);

//Permite a leitura do valor digital presente no “Número do pino” Variável do tipo integer= digitalRead(Número do Pino); EX: leitura = digitalRead(5);

// Permite a leitura do valor analógico presente no “Número do pino” Variável do tipo integer= analogRead(Número do Pino); EX: leitura = analogRead(2);

//Permite a criação de um pulso PWM com o duty cicle definido pelo “valor” analogWrite(Número do Pino, valor); EX: analogWrite(1,255);

PWM –Pulse Width Modulation PWM –Pulse Width Modulation

PWM –Pulse Width Modulation

Podemos então concluir que a tensão média Vdc é directamente proporcional ao duty cicle do sinal PWM.

Ciclo if….else…. //Ciclo que é utilizado para descrever uma condição

If(condição){ Instrução 1; Instrução 2; } else{ Instrução 3; Instrução 4; }

A condição referida anteriormente tem de respeitar as condições descritas na tabela acima. No caso descrito em cima se a condição se verificar o instrução 1 e 2 é executada, caso contrário são executadas a instrução 3 e 4.

Ciclo for

//Ciclo que é utilizado quando se pretende executar um determinado conjunto de instruções um certo número de vezes for( inicialização; condição; Incremento a efectuar){ Instrução 1; Instrução 2; (……) }

A condição referida anteriormente tem de respeitar as condições descritas na tabela acima. A inicializaçãoda variável apenas é efectuadano iniciodo ciclo, sendo a cada execução do ciclo efectuado o respectivo incrementona variável de controlo do ciclo.

Ciclo switch / case

//Ciclo que é normalmente utilizado para descrever uma lista de casos possíveis para uma determinada variável switch(variável){ case 1: Instrução a executar quando a variável for 1 (variável == 1) break; case 2: Instrução a executar quando a variável for 1 (variável == 2) break; (……) default: Conjunto de instruções a executar se nenhuma das condições for verificada. A utilização desta condição é opcional. break; }

Ciclo while

//Ciclo que é utilizado quando se pretende executar um determinado conjunto de instruções um certo número de vezes while(condição){ Instrução 1; Instrução 2; }

Ciclo do…..while

//Ciclo bastante semelhante ao ciclo while mas a condição apenas é testada no fim do ciclo, sendo sempre executado o ciclo pelo menos uma vez do{ Instrução 1; Instrução 2; (……) while(condição);

Exemplos Aplicação do exposto anteriormente a casos práticos

Exercício 1

Faça com que um led acenda e apague com uma frequência de 2 Hz. //Declaração de variáveis globais int ledpin=13; voidsetup() { pinMode(ledPin,OUTPUT); }

voidloop() { digitalWrite(ledPin,HIGH); Delay(500); digitalWrite(ledPin,LOW); Delay(500); }

Exercício 2

Utilize um sinal digital de entrada (HIGH ou LOW) para fazer com que o led acenda ou apague (valor digital de entrada HIGH o led liga, valor digita de entrada LOW o led encontra-se desligado).

Exercício 2 -Resolução

//Declaração de variáveis globais intledPin= 13; int comando=2; int val=0; voidsetup() { pinMode(ledPin,OUTPUT); pinMode(comando,INPUT); }

voidloop() { val=digitalRead(comando); if (val==LOW) { digitalWrite(ledPin,LOW); } else{ digitalWrite(ledPin, HIGH); }

Exercício 3

Recorrendo a leituras sucessivas ao valor de saída de um simples potenciómetro faça um regulador de luminosidade para o nosso tão famoso led.

Exercício 3 -Resolução

//Declaração de variáveis globais intledPin= 13; int comando=2; int val=0;

voidsetup() { pinMode(entrada_analogica,INPUT); pinMode(ledPin,OUTPUT); } voidloop() { val=analogRead(entrada_analogica); val=(val/4); analogWrite(ledPin,val); }

Exercício 4

Obtenha o valor, em tempo real, da variável utilizada para controlar a luminosidade do led.

Exercício 4 -Resolução

//Declaração de variáveis globais intledPin= 13; int comando=2; int val=0;

voidsetup() { pinMode(entrada_analogica,INPUT); pinMode(ledPin,OUTPUT); Serial.begin(9600); }

voidloop() { val=analogRead(entrada_analogica); val=(val/4); analogWrite(ledPin,val); Serial.println(val); }

Comentários