Nota: caso não saiba programar então sugiro olhar antes o post Arduino Programming Notebook – Tradução que contém a tradução do mini livro “Arduino Programming Notebook” que lhe ajudará a começar no mundo da programação em conjunto com o Arduino.
Para você que já programa em C ou C++ e está interessado em aprender a programar Arduino esse guia será perfeito. Dividirei em 3 partes:
- Layout, possíveis funções dos pinos, capacidades do Arduino
- Quais funções chamar para acessar os recursos dos pinos(analogico, digital, i2c pwm, etc)
- Uma rápida abordagem de eletrônica de como conectar alguns periféricos nas portas do Arduino.
Não temos tempo a perder então vamos.
PARTE 1: Layout, possíveis funções dos pinos, capacidades do Arduino
Arduino é uma plataforma de desenvolvimento que é constituída de uma placa com um chip microcontrolador ( que faz o papel da CPU) e demais componentes eletrônicos para fazer com que o microcontrolador funcione.
Dica1: o microcontrolador é diferente de um processador pois o microcontrolador já possui memória de programa e memória RAM, tudo integrado num único chip. É um computador inteiro em um único chip, mas bem mais modesto pois possui apenas kbytes de RAM e alguns kbytes de memória de programa e alguns MHz de clock.
Dica2: os shields são plaquinhas que são colocadas por cima do Arduino para dar alguma funcionalidade que ele não tem como Relés, WIFI, Bluetooth, Ethernet, etc…
Continuando… existem diversos modelos(placas) de Arduinos. A escolha mais comum para começar tem sido o Arduino UNO (com microcontrolador Atmega328). Depois vem o Arduino nano (também com o Atmega328) ou o Arduino Mega (pode vir com microcontrolador “Atmega 1280” ou o “Atmega 2560” que tem mais memória) na lista dos mais usados.
Iremos usar o Ardunio UNO por ser o mais comum. A primeira coisa a se fazer antes de comprar ou após comprar um Arduino é ver suas capacidades suas limitações e layout. Então vamos lá. Vá em http://arduino.cc/en/Main/ArduinoBoardUno ou se o link não funcionar http://arduino.cc depois em “products” e depois em “Arduino UNO”.
Cada pino pode executar mais de uma função. Cabe a você configurar durante o programa o que o pino vai ser. Cada pino tem suas capacidades, ou seja, existem pinos que podem receber sinais analógicos já outros não. Para comunicar com o mundo externo o pino pode funcionar como entrada (analógica ou digital) ou saída (analógica ou digital).
Do lado esquerdo podemos ver A0 até A5 elas são entradas analógicas. Mais na frente veremos que podem ser configuradas para serem entrada ou saída digital. Do lado Direito temos os pinos Digitais. Eles podem ser entradas ou saídas digitais. E como veremos adiante os que tem um ~ (til) tem também a função de PWM que podemos considerar a grosso modo como “saídas analógicas”. Vamos aprofundar nos pinos:
DIGITAIS:
Cada um dos 14 pinos digitais (lado direito da placa do Arduino Uno) podem ser utilizados como uma entrada(input) ou saída(output), usando as funções pinMode(), digitalWrite(), e digitalRead(). Os pinos operam em 5 volts. Cada pino pode fornecer ou puxar(aterrar) no máximo 40 mA e possuem resistores internos de pull-up (desconectados por padrão) de 20-50 kOhms. E ainda mais, alguns pinos podem ter funções especiais:
- Serial: pino 0 (RX) e pino 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais no padrão TTL. Estes pinos estão conectados aos pinos do microcontrolador ATmega16U2 que faz a conversão serial USB para TTL. Ou seja, se no seu projeto a comunicação USB for utilizada, você não pode usar os pinos 0 e 1 pois estarão já ocupados com a transmissão serial.
- Interrupções Externas: pino 2 e pino 3. Estes pinos podem ser configurados para disparar uma interrupção quando for aterrado (0 volts), ou na borda de subida ou na de descida, ou ainda na mudança de estado lógico. Veja a função attachInterrupt() para mais detalhes de como fazer isso.
- PWM: pinos 3, 5, 6, 9, 10, e 11. Fornecem saídas de PWM com 8-bit de resolução PWM atravé da função analogWrite(). Eles podem ser considerados com as “saídas analógicas” escrevendo uma tensão entre 0 e 5volts.
- SPI: pino 10 (SS), pino 11 (MOSI), pino 12 (MISO), pino13 (SCK). Estes pinos suportam o protocolo de comunicação SPI utilizando a biblioteca já pronta SPI library.
- LED: pino 13. Existe um Led na placa que está conectado ao pino digital 13. Quando o pino vai para 1 (high ou 5 volts) o LED acende, quando o pino vai para 0 (LOW ou 0 volt), ele apaga.
ANALÓGICAS:
O Uno possui 6 entradas analógicas, de nomes A0 até A5, cada uma com uma resolução de 10 bits (o que dá 1024 valores diferentes). Por padrão elas são medidas a partir do terra até os 5 volts, mas é possível mudar a referência de tensão superior para outro valor utilizando o pino AREF e a função analogReference(). Conforme os pinos digitais, os pinos analógicos também possuem funções especiais:
- TWI ( I2C ): pino A4 ou SDA e pino A5 ou SCL. Estes pinos suportam o protocolo de comunicção I2C ou TWI através do uso da biblioteca e Wire.
Outros Pinos:
- AREF. pino que recebe a tensão externa de referência para leitura das entradas analógicas. Este pino só será usado caso queira uma faixa de entrada diferente de 0volts até 5volts (padrão). Mais informações leia analogReference().
- Reset. Ao ligar este pino ao terra (0 volt) o microcontrolador será reiniciado. Geralmente utilizado por shields que ficam por cima impossibilitando o acesso ao botão do Arduino, então estas shilelds podem possuir um botão próprio de reset conectado a esse pino.
A pinagem é idêntica para o Atmega8, 168, e 328. Imagem retirada de mapping between Arduino pins and ATmega328 ports.
Não se assuste com a quantidade de informação dessa figura abaixo, aconselho a imprimir e olhar quando for escolher um pino para executar alguma função.
Imagem retirada de www.pighixxx.com.
Agora de posse da informação sobre os pinos e suas possíveis funções vamos para a 2ª etapa.
PARTE 2: Estrutura básica dos programas e quais funções chamar para acessar os recursos dos pinos(analogico, digital, i2c pwm, etc)
Começamos com a filosofia de que “meio byte basta para programadores de nibbles” 😉
A estrutura básica dos programas do Arduino é a encontrada no exemplo Bare Minimum. Conforme resumo abaixo:
Podemos observar que temos dois blocos que sempre existirão nos códigos Arduino: o setup e o loop.
SETUP: No setup você vai escrever o código que vai configurar o arduino para iniciar sua aplicação. Nesse bloco você informará cada pino que quer usar (seu numero) e como quer que o pino funcione, se saída (Output) ou entrada (Input). Como assim? Bem, digamos que você queira ligar um led no pino 12. Para isso você tem que informar ao arduino que o pino 12 será usado como uma saída (Output), ou seja, voce controlará o pino 12 e vai enviar tensão 0v ou 5v para ligar ou desligar coisas, nesse caso o Led.
LOOP: Já o bloco Loop é a sessão que ficará sendo repetida e o programa efetivo deverá estar nele contido. Como no bloco anterior (setup) configuramos os pinos e/ou as bibliotecas… nesse novo bloco Loop iremos usar os comandos que forem necessários para que o Arduino faça o que queiramos e interaja com o meio.
Concluindo:
Então o programa mínimo para que a interface do Arduino não nos mostre erro é o Bare Minimum (mínimo possível) exibido abaixo:
void setup() {
// aqui você escreve o código para configuração inicial, que roda apenas uma vez.
}
void loop() {
// aqui coloca o código principal, que ficará sendo repetido.
}
Você encontra esse programa em (File>Examples>01.Basics>BareMinimum). Agora vamos para uma tabela resumo das funções (mais comuns) que podemos usar:
Durante o SETUP:
- pinMode(pino, modo); onde pino é o nome do pino em questão e o modo pode ser: INPUT, OUTPUT, ou INPUT_PULLUP exemplos: pinMode(A0, INPUT); ou pinMode(13, OUTPUT);
- Serial.begin(BaudRate); onde BaudRate é a velocidade da comunicação serial exemplos: Serial.begin(9600); ou Serial.begin(19200);.
Durante o LOOP:
OBS: para usar comando que atribua valor ao pino (comandos com “Write” ) você tem que ter declarado no SETUP que o pino seria OUTPUT. Da mesma forma se você vai ler o valor de um pino (comando com “Read”) tem que declarar antes no SETUP que o pino seria INPUT.
- digitalWrite(pino, valor); onde pino é o nome do pino em questão e o valor será HIGH ou LOW. Exemplos: digitalWrite(13, HIGH); ou digitalWrite(13, LOW); Utilizada para ligar ou desligar coisas ligadas ao Arduino.
- digitalRead(pino); pino é o nome do pino que será lido. Esta função retorna 1 se o pino está recebendo 5 volts ou 0 se o pino está recebendo 0 volts Exemplo: digitalRead(10); Com esta função podemos testar se um botão conectado ao pino 10 foi pressionado por exemplo.
- analogRead(pino); onde pino será A0 até A5 no UNO. Esta função retorna um valor entre 0 e 1024 proporcional à tensão entre 0 volt e 5 volts que está chegando no pino. Exemplo: analogRead(A2); Esta função serve para lermos tensões analógicas entre 0 e 5 volts como por exemplo leituras de termistores, potenciômetros, foto resistores, microfones, etc.
- analogWrite(pino, valor); nesta função o pino tem que ser um pino capaz de ser PWM ( no Uno são os pinos 3,5,6,9,10 e 11). Com ela fazemos o pino gerar uma onda PWM que pode ter valores médio entre 0 volt (para valor = 0) e 5 volts ( para valor = 255) no pino. Exemplos: analogWrite(3, 128); teremos pino 3 com 2,5 volts, analogWrite(9, 200); teremos pino 9 com aproximadamente 3,9 volts.
E para você que quer aprofundar sobre as funções disponíveis pela biblioteca padrão visite a Referência completa de funções do Arduino.
Abaixo segue uma folha resumo retirada do site mechatronicsguy com nome Arduino Cheat Sheet V.02c
Futuramente publico versão traduzida para quem interessar 😉
Continuando… analise estes programas:
Blink , Fade e ReadAnalogVoltage e perceba que eles utilizam as funções descritas acima. O básico da parte da programação é essa… pois de posse dela você já é capaz de ligar e desligar dispositivos, controlar “analogicamente” através de PWM, consegue saber o estado de um botão lendo o pino de forma digital e finalmente consegue ler as entradas analógicas para interfacear termistores ou potenciômetros etc…
Parte 3: Conectando alguns periféricos nas portas do Arduino ( resumo).
Ando sem tempo para postar material mas venho colocar aqui pelo menos os esquemas sem as explicações por enquanto desse tópico 3. Todas as imagens abaixo foram retiradas do site http://pighixxx.tumblr.com/ . Vale a pena visitar o site e olhar as muitas outras imagens. O autor das imagens não permite na licença a tradução, somente a cópia idêntica. Então escreverei abaixo de cada imagem explicações em português.
OBS: geralmente o sinal marcado com “IN” nos diagramas abaixo deverão ser conectados ao Arduino em uma porta configurada como entrada.
Descrição da 1 imagem:
- Pushbutton to GND: Botão com resistor de pullup ligado em +5v. O sinal “IN” deverá ser conectado ao Arduino. O sinal ficará normalmente em 5v e quando o botão for pressionado o sinal irá para 0v(GND).
- Pushbutton to 5v: botao com resistor de pulldown para o terra. O sinal “IN” deverá ser conectado ao Arduino. O sinal ficará normalmente em 0v e quando o botão for pressionado o sinal irá para 5v.
- Pushbutton to 12v: conectando um botão com tensao de 12v ao Arduino. Utiliza 2 resistores para fazer uma divisão de tensão para evitar a queima da placa. Pode ser acrescido de um capacitor para ajudar no “debouncing” do botão. O sinal ficará normalmente em 0v e quando o botão for pressionado o sinal irá para 5v.
- Trimmer ou potentiometer: esquema de ligação de um trimmer ou de um potenciômetro. Olhando de frente um potenciometro o pino da esquerda liga-se ao 0v(GND) o pino do meio ao Arduino (em um dos pinos analógicos A0, A1…) e o pino da direita ao +5V da placa.
- Optocoupled inputs: esquema de entradas opto acopladas. Esta forma é util para ler sinais de forma a isolar os circuitos. Do lado do LED é ligado o sinal a ser lido e do lado do foto transistor temos o sinal a ser enviado para placa.
- Photoresistor: Esquema de ligação de um fotoresistor ou até mesmo de um termoresistor. Lembrando que o sinal será analógico e então deverá ser ligado a um pino analógico(A0,A1…).
Descrição da 2 imagem:
- Connect a Led: LED com o resistor (470 ohms) de pullup ligado em +5. Quando for usado o comando digitalWrite(pino, LOW); o LED acenderá.
- Connect a Led: LED com resistor de pulldown para o terra. Quando for usado o comando digitalWrite(pino, HIGH); o LED acenderá.
- Dual LEDs or Bi-color LED: com um único pino podemos controlar dois LEDs de forma exclusiva, ou seja, ou um ou o outro estará ligado. No exemplo o LED vermelho está com resistor de pullup e o LED verde está com resistor de pulldown. Quando executar o comando digitalWrite(pino, HIGH); o LED verde acenderá e o vermelho ficará apagado. Já no comando digitalWrite(pino, LOW); o LED vermelho acenderá e o verde ficará apagado.
- Connect a Lamp(DC Low Voltage): conectar uma lâmpada de baixa tensão e corrente contínua. Podem ser usados transistores NPN como o BC337 ou BC548 etc. O transístor é utilizado para amplificar a corrente, pois o microcontrolador não aguenta ligar a lâmpada sem a ajuda do transístor. Observe também que com o comando digitalWrite(pino, HIGH); o transístor vai ligar a lâmpada.
- LED Clusters: ligando mais de um LED em série em 12v. Observe a tabela para a escolha correta do resistor.
Descrição da imagem 3:
- Connect a Relay: conectando um relé. É muito importante a utilização do Diodo reverso na bobina do relé, ele evitará a queima prematura do transístor e até do Arduino. O transístor também é importante por causa da tensão geralmente acima dos 5v e da corrente acima da capacidade do Arduino.
- Connect a Mosfet:
Descrição da imagem 4:
Em breve…
Descrição da imagem 5:
Em breve…
Descrição da imagem 6:
Em breve…
Descrição da imagem 7:
Em breve…
Descrição da imagem 8:
Em breve…
Descrição da imagem 9:
Em breve…
Descrição da imagem 10:
Em breve…
Descrição da imagem 11:
Em breve…
Descrição da imagem 12:
Em breve…
Descrição da imagem 13:
Em breve…
Descrição da imagem 14:
Em breve…
Descrição da imagem 15:
Em breve…
Descrição da imagem 16:
Em breve…
Descrição da imagem 17:
Em breve…
Descrição da imagem 18:
Em breve…
Descrição da imagem 19:
Em breve…
Descrição da imagem 20:
Em breve…
Descrição da imagem 21:
Em breve…
Descrição da imagem 22:
Em breve…
Espero que este tutorial tenha ajudado em alguma coisa 😉
Até a próxima.
frenois
super blog train instructif il ma rendu bien des service je remerci son auteur pour la qualité
João Lucas
Eu tenho foi navegando on-line mais três horas hoje, no entanto,
eu nunca encontrei qualquer artigo interessante como o seu.
Tem bonita vale a pena o suficiente para mim. Na minha opinião , se todos proprietários do Web site
e blogueiros feitos bom conteúdo, como você fez, o líquido será muito mais úteis que alguma vez antes.