You are on page 1of 12

Introduo

A palavra "Arduino" nome prprio italiano que tem origem germnica. composto pelas palavras hard/hart (forte - brave, hardy, strong) e win (amigo em saxo antigo) formando Hardwin (Grande Amigo), que foi latinizado para Ardovinus, e depois para o italiano Arduino. Arduino um projeto simples, popular e acessvel com eletrnica e programao embarcada de alto nvel. Na prtica ligamos componentes nas portas analgicas e digitais e escrevemos programas que usam as portas. Ter portas digitais, analgicas e pwm um grande valor do microcontrolador utilizado. A transfrencia via USB e a ferramenta / IDE para programao funcionam em mltiplas plataformas Open-source Hardware e Open-source software. - Plataforma baseada em Atmel da AVR (ATMega168); - Oferece um IDE e bibliotecas de programao de alto nvel; - Open-source hardware e software; - Ampla comunidade; - Programado em C/C++; - Transferncia de firmware via USB; - MCU com bootloader.

Hardware
Como o projeto eletrnico do Arduino muito simples, fcil construir um utilizando protoboard,corroendo uma placa de circuito impresso de face simples ou at mesmo em papel!!! Veja o Arduino em protoboard:

Com a impresso dos componentes em papel e realizando a solda, veja o Arduino em papel:

Por ser um projeto Hardware Open-Souce existem vrios fabricantes no mercado...

Arduino Uno

Shields Shields so placas para serem montadas em cima da placa Arduino, e que ampliam a funcionalidade do Arduino para controlar dispositivos diferentes, aquisio de dados, etc. Alguns exemplos: XBee Shield - Permite que uma placa Arduino comunicar-se sem fios a distncias de at 100 ps (interiores) ou 300 ps (outdoors), utilizando o Maxstream Xbee - mdulo ZigBee. Motor Shield - Permite que uma placa Arduino controle motores DC e leia os codificadores. Ethernet Shield - Permite que uma placa Arduino conectar-se internet.

Software
Programando para Arduino IDE pode ser baixada de Arduino. A IDE foi desenvolvida com Java, portanto precisaremos de um mquina virtual 1.5 ou 1.6 instalada. Funciona em Windows. Mac OS X e Linux (em alguns windows e mac pode ser necessrio colocar driver). Utiliza GCC + GCC Avr para compilao (voc pode tambm programar diretamente com GCC!). A transferncia para a placa feita via USB pelo IDE.(mas tambm pode ser feita com gravadores ICSP!). Existem diversas bibliotecas que encapsulam a lgica de comunicao digital ou analgica: servo, motor de passo, Android, display LCD, e muitos outros.

Programao
Partes bsicas do programa Arduino. Temos que obrigatoriamente programar dois mtodos: void setup( ) { } void loop( ) { } O setup executado uma s vez assim que a placa for ligada e o loop ter o cdigo de execuo infinita. No setup() define-se quais pinos sero entrada e sadas e outros parmetros de inicializao. Pode-se criar funes diferentes assim como em C/C++. Sintaxe A sintaxe da programao do Arduino igual a programao em C/C++. A sintaxe est sendo colocada para aprendizado e referncia na linguagem. "//" - (Comando para comentrio de uma linha). "/* texto */" - (Comando para comentrio de vrias linhas(texto)). "{ }" - (Dentro das chaves coloca-se os comandos de cada funo ou de cada comando). ";" - (Coloca-se ponto e vrgula sempre que um comando termina). Tipos de Variveis Aqui est sendo mostrado os tipos mais comuns e utilizados. No Site Arduino mostra todos os tipos e o que cada um faz. "boolean" - Sendo Verdadeiro(true) ou Falso(false). Existe tambm Alto(HIGH) e Baixo(LOW). "int" - Sendo os nmeros inteiros(de -32768 a 32767). "unsigned int" - Sendo os nmeros inteiros positivos(de 0 a 65535). "long" - Sendo os nmeros inteiros(de -2147483648 a 2147483647). "unsigned long" - Sendo os nmeros inteiros positivos(de 0 a 4294967295). "float" - Sendo os nmeros inteiros com decimais(-3.4028235*(10 elevado a +38) a 3.4028235*(10 elevado a +38)). "char" - Sendo um caractere - Obs: Existe o "string" que um conjunto de caracteres. No site mostra INPUT(Entrada) e OUTPUT(Sada) como tipos de variveis, mas seria mais como definio dos pinos, isto , os pinos podem ser definidos como entradas e/ou sadas.

Operadores Matemticos "=" - Atribui um valor a uma varivel. "+" - Soma. "-" - Subtrao. "*" - Multiplicao. "/" - Diviso. "%" - Resto da diviso. Ex: 5%2 -> O resto da diviso de 5 por 2 1. Operadores de comparao "==" - " igual a". "!=" - " diferente a". "<" - " menor a". ">" - " maior a". Estruturas de controle "if(condio){comandos1} - Se a condio for verdadeira ento faa os comandos1 else if(condio){comandos2} - Seno se a condio for verdadeira ento faa os comandos2 else{comandos3}" - Seno faa os comandos3. Esta estrutura pode ter apenas o "if" caso tenha apenas uma condio. "for(varivel=incio;condio;modifica){comandos}" - Para a varivel=incio e a condio for verdadeira faa os comandos, depois modifica e verifica se a condio verdadeira. Geralmente o "for" utilizado para executar os comandos um nmero n de vezes dentro do void loop() {}. "while(condio){comandos}" - Enquanto a condio for verdadeira faa os comandos. Parecido com o "for". Esta estrutura verifica primeiro a condio e depois executa os comandos. "do {comandos} while(condio)" - Faa os comandos enquanto a condio for verdadeira. Esta estrutura executa primeiro os comandos e depois verifica a condio. Portas digitais e analgicas Na prtica ligamos componentes em portas digitais e analgicas e atravs do cdigo Arduino, manipulamos as portas: pinMode(<porta>, <modo>): configura uma porta digital para ser lida ou para enviarmos dados. digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital. digitalRead(<porta>): retorna um 0 ou 1 lido da porta. analogRead(<porta>): retorna de 0 a 1023 com o valor da porta analgica. analogWrite(<porta>, <valor>): escreve em uma porta PWM um valor de 0 a 255.

Compilao
A compilao da programao para o Arduino muito fcil e tranquilo. Antes de mais nada, faa o download do software mais recente. As instrues de instalao e compilao esto descritas abaixo:

Para Windows
Download do software Baixe o software em formato ".zip", depois de baixado, extraia os arquivos usando um software como 7-zip, por exemplo. Instalando o Driver do Arduino

Driver para Arduino UNO em Windows XP, Vista e 7

Conecte o Arduino UNO e espere o Windows detectar o Arduino UNO; Clique em Iniciar -> Painel de Controle. Com o Painel de Controle aberto, clique em Sistema e Segurana, depois dentro da janela Sistema e Segurana, clique em Sistema, uma vez aberto a janela "Sistema", abra o Gerenciador de Dispositivos; Em Gerenciador de Dispositivos, procure "Portas(COM & LPT)", dever ter uma porta aberta chamada "Arduino UNO(COMxx)"; Clique com o boto direito em "Arduino UNO(COMxx)" e escolha a opo "Atualizar driver de software"; Escolha "Escolher o driver do software" e clique avanar; Navegue at a pasta que foi extrada do arquivo .zip e depois v para pasta "Drivers" e selecione o arquivo "ArduinoUNO.inf" e clique OK.
Driver para Arduino Duemilanove, Nano ou Diecimila em Windows XP, Vista e 7

Conecte o Arduino, assim que conectado ir aparecer uma janela chamada "Adicionar novo hardware", nessa janela, selecione "No, no desta vez" e clique em OK; Selecione "Instalar o driver de uma lista ou um lugar especifico(avanado) e clique em avanar; Deixe selecionado "Procurar o melhor driver nesses lugares especifcos" e de-selecione "Procurar em mdias removiveis e selecione "Incluir este lugar na procura", procure a pasta "FTDI USB Drivers",dentro da pasta que foi extrada e clique avanar; O programa vai encontrar o driver "USB Serial Converter"; A janela "Adicionar novo hardware" ir aparecer novamente, faa o mesmo procedimento acima e o programa vai encontrar o driver "USB Serial Port";

O Programa e Compilando

A figura abaixo mostra a IDE do Arduino:

Primeiramente, clique em Tools, depois em board e selecione o modelo do Arduino Depois, com o Arduino conectado na porta USB, clique novamente em Tools, depois em Port e selecione a porta de comunicao do seu Arduino. Depois de selecionado o modelo do Arduino e a porta, clique em File, depois em Examples, em Basics clique em Blink. Ir abrir outra janela com a programao do exemplo "Piscar o LED (Blink)". Depois clique no boto upload como mostrado na figura abaixo:

Se a porta estiver certa, ir piscar o LED L na placa, seno, mude a porta de comunicao do Arduino. Na figura abaixo, mostra o cone para abrir a serial Monitor

Projetos
Exemplos

Os exemplos so do site em ingls. Bsicos


Piscar LED (Blink)

Conecte um LED a um resistor de 220 Ohm como mostrado na figura abaixo.

void setup() { pinMode(13, OUTPUT); //inicializando o pino digital 13 como sada } void loop() { digitalWrite(13, HIGH); // liga o LED delay(1000); // Espera 1 segundo digitalWrite(13, LOW); // desliga o LED delay(1000); // Espera 1 segundo }
Leitura digital Serial (DigitalReadSerial)

Com uma protoboard, faa a seguinte ligao como mostrado na figura abaixo utilizando um pushbutton e um resistor de 10000 ohm

Ao apertar o pushbutton, mostrar no serial Monitor o valor da varivel. Sendo 0 ou 1. void setup() { Serial.begin(9600); //Disponibiliza o serial Monitor com velocidade de 9600 (Na janela da Serial Monitor coloque esta velocidade tambm) pinMode(2, INPUT); //Configura a entrada digital 2 do Arduino como entrada } void loop() { int sensorValue = digitalRead(2); //Faz a leitura da entrada digital 2 e armazena na variavel sensorValue Serial.println(sensorValue, DEC); //Mostra o valor da varivel sensorValue no serial Monitor }
Leitura analogica Serial (AnalogReadSerial)

Utilizando um potenciometro de 10000 ohm faa a ligao como mostrado na figura abaixo

Girando o potenciometro voc ver valores diferentes na serial Monitor, variando de 0 a 1023. void setup() { Serial.begin(9600); //Disponibiliza o serial Monitor com velocidade de 9600 (Na janela da Serial Monitor coloque esta velocidade tambm) } void loop() { int sensorValue = analogRead(A0); //Faz a leitura da entrada analogica A0 e armazena na variavel sensorValue Serial.println(sensorValue, DEC); //Mostra o valor da varivel sensorValue na serial Monitor }

Desvanecer(Fade)

Acender gradualmente um LED e apagar gradualmente o LED Com uma protoboard, monte o circuito como mostrado abaixo.

int brightness = 0; // Valor do brilho do LED inicial int fadeAmount = 5; // Quantos pontos para aumentar o brilho do LED void setup() { pinMode(9, OUTPUT); // Declarando a porta digital 9 como sada } void loop() { analogWrite(9, brightness); // O valor da porta digital 9 ser o valor do brightness brightness = brightness + fadeAmount; // Acrescentando o valor fadeAmount ao valor de brightness if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; // Mudando o valor de fadeAmount para o seu inverso } delay(30); // Espera 30 milisegundos } Digital
Piscar LED sem usar a funo delay()

Este exemplo igual ao Piscar LED, mas ao invs de usar a funo delay(), usa-se a funo millis() que conta o tempo em milissegundos a partir do momento que o programa comear. Uma vantagem de usar a funo millis() quando for utilizar outra porta e no perder o comando externo(pressionar um boto) O circuito o mesmo que o Piscar LED

const int ledPin = 13; // Declarando a porta digital 13 int ledState = LOW; // ledState em baixo para deixar o LED desligado inicialmente long previousMillis = 0; // previousMillis ir armazenar o ultimo nmero da funo millis() long interval = 1000; // intervalo em que o LED ficar apagado void setup() { pinMode(ledPin, OUTPUT); // definindo a porta digital 13 como sada } void loop() {

unsigned long currentMillis = millis(); //varivel currentMillis ir armazenar o tempo if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; //armazena a varivel currentMillis para previousMillis if (ledState == LOW) // Se a varivel ledState for igual a Baixo (zero) ledState = HIGH; //Ento a varivel vai pra alto else //Seno ledState = LOW; //A varivel ledState vai pra baixo digitalWrite(ledPin, ledState); Manda a varivel ledState para a sada 13(ledPin) } }

Utilizando um boto para acender um LED (Button)

Este exemplo mostra como utilizar um boto para acender um LED O circuito o mesmo que o Leitura Digital Serial (Digital Read Serial)

const int buttonPin = 2; // O nmero da porta que ser utilizada para o boto const int ledPin = 13; // O nmero da porta que ser utilizada para o LED int buttonState = 0; // Varivel para leitura do estado do boto void setup() { pinMode(ledPin, OUTPUT); // Determinando a porta 13 como sada para o LED pinMode(buttonPin, INPUT); // Determinando a porta 2 como entrada para o boto } void loop(){ buttonState = digitalRead(buttonPin); // Leitura para a porta de entrada do boto if (buttonState == HIGH) { // Se o estado do boto for alto(estiver pressionado) digitalWrite(ledPin, HIGH); // Acende o LED } else { // Seno digitalWrite(ledPin, LOW); // Apaga o LED: } }

Utilizando um boto para acender um LED com atraso(Debounce)

Este exemplo apenas um "Button" com atraso, isto , se o boto ficar apertado por um tempo, o LED ir acender. E quando o boto no estiver mais apertado, o LEd apagar depois de um tempo. O circuito idntico ao do "Button"

const int buttonPin = 2; // O nmero da porta de entrada do boto const int ledPin = 13; // O nmero da porta de sada do LED int ledState = HIGH; // Estado atual da varivel ledState do LED int buttonState; // Leitura atual da varivel para o boto int lastButtonState = LOW; // Leitura anterior da varivel para o boto long lastDebounceTime = 0; // ultima vez que a sada foi mudada long debounceDelay = 50; // atraso void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { int reading = digitalRead(buttonPin); // Armazenar o estado do boto if (reading != lastButtonState) { // Se o estado anterior do boto for diferente do estado atual lastDebounceTime = millis(); // Armazena o tempo corrido desde o comeo do programa } if ((millis() - lastDebounceTime) > debounceDelay) { // Se a diferena entre o tempo corrido desde o // comeo do programa e o ultimo tempo // armazenado na varivel lastDebounceTime for // maior que o atraso debounceDelay buttonState = reading; // Ento o estado do boto ser igual ao estado do boto atual } digitalWrite(ledPin, buttonState); // Manda o que est na varivel buttonState para o LED lastButtonState = reading; // Salva a varivel reading no lastButtonState para o prximo loop }

Contagem de mudana de estado de um boto (Button State Change Detection (Edge Detection)

Este exemplo mostra a mudana de estado de um boto pela Serial Monitor e conta o nmero de vezes que o boto foi apertado. O circuito idntico ao do "Button"

const int buttonPin = 2; // Pino digital 2 para o boto const int ledPin = 13; // Pino digital 13 para o LED L int buttonPushCounter = 0; // Contador para cada vez que o boto apertado

int buttonState = 0; // Estado atual do boto int lastButtonState = 0; // Estado anterior do boto void setup() { pinMode(buttonPin, INPUT); // Definindo o pino digital 2 como entrada pinMode(ledPin, OUTPUT); // Definindo o pino digital 13 como sada Serial.begin(9600); // //Disponibiliza o serial Monitor com velocidade de 9600 (Na janela da Serial Monitor coloque esta velocidade tambm) } void loop() { buttonState = digitalRead(buttonPin); // L o estado atual da entrada digital 2 do boto e armazena em buttonState if (buttonState != lastButtonState) { // Compara o Estado atual do boto com o Estado anterior if (buttonState == HIGH) { //Se o Estado atual do boto for ALTO buttonPushCounter++; // Incrementa o contador if(Serial.available()>0) // Se a Comunicao serial estiver disponvel (Necessrio no sistema Linux e MAC, maiores informaes:Tpico { Serial.println("on"); // Mostra na Serial Monitor que o boto est apertado "on" Serial.print("number of button pushes: "); // Mostra na Serial Monitor a frase: "nmero de apertos do boto" Serial.println(buttonPushCounter, DEC); // Mostra na Serial Monitor o nmero de vezes que o boto foi apertado }} else { // Seno if(Serial.available()>0) // Se a Comunicao serial estiver disponvel (Necessrio no sistema Linux e MAC, maiores informaes:Tpico { Serial.println("off"); // Mostra na Serial Monitor que o boto foi solto "off" } }} lastButtonState = buttonState; // Salva o Estado atual como ltimo Estado para o prximo loop if (buttonPushCounter % 4 == 0) { // Se o contador for divisvel por 4 digitalWrite(ledPin, HIGH); // Ento o LED acender } else { // Seno digitalWrite(ledPin, LOW); // O LED fica apagado } }

Utilizando um alto-falante (TuneMelody)

Utilizando um alto-falante pequeno de 8 Ohm para tocar melodias Com uma protoboard, um resistor de 100 Ohm e um alto-falante pequeno de 8 Ohm como mostrado o circuito abaixo

#include "pitches.h" // Biblioteca prpria para alto-falante int melody[] = { // array de notas da melodia NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4 // Notas da melodia }; int noteDurations[] = { //array de durao de nota

4, 8, 8, 4,4,4,4,4 }; // durao de cada nota, para calcular cada nota deve-se dividir 1 segundo(1000 milisegundos) por cada durao Ex: 1000/4, 1000/8 void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { // Com nota thisNote=0 faa; at que thisNote<8;acrescente mais 1 int noteDuration = 1000/noteDurations[thisNote]; // Armazena a diviso de cada durao de nota tone(8, melody[thisNote],noteDuration); // toca a melodia com durao na entrada digital 8 int pauseBetweenNotes = noteDuration * 1.30; // Para distiguir acada nota foi usado um tempo de 30% a mais de cada durao delay(pauseBetweenNotes); // Tempo entre cada toque da melodia noTone(8); // Pra de tocar } } void loop() { // No preciso repetir a melodia } Servo-Motor

Criaes Aprimoramentos Usando Hardwares Adicionais


Arduino com Sensor de temperatura e umidade RHT03 1. Baixe a biblioteca fornecida pelo link:DHT22-04.zip; 2. Extraia os arquivos em uma pasta com nome "DHT22" sem aspas; 3. Copie a pasta "DHT22" para dentro da pasta "Arduino/libraries"; 4. Abra o programa do arduino e clique em "File"; 5. V em Examples, depois em DHT22 e Serial. Ir abrir o cdigo exemplo; 6. Conecte o Arduino no PC, selecione o Arduino que estiver usando e depois a Porta; 7. Clique em UPLOAD; 8. Faa as ligaes de acordo com as imagens e esquemtico abaixo;

9. Abra o Serial Monitor. No Serial Monitor, ir aparecer a temperatura em grau Celsius e a umidade em Porcentagem como a figura abaixo.

Fonte:
http://www.labdegaragem.com.br/wiki/index.php?title=Sobre_Arduino