Arduino é uma plataforma de prototipagem eletrônica criada para facilitar o desenvolvimento de projetos com sensores, LEDs, motores, displays, botões e vários outros componentes eletrônicos.

Quando falamos em Arduino, normalmente estamos falando de duas coisas:

  • A placa física, como o Arduino Uno
  • O ambiente de programação, chamado Arduino IDE

O Arduino Uno, por exemplo, possui um microcontrolador que executa o programa que você envia para ele.

Diferente de um computador comum, o Arduino não possui um sistema operacional completo como Windows ou Linux. Ele executa diretamente o código gravado no microcontrolador.


Para que serve?

O Arduino pode ser usado para controlar praticamente qualquer projeto eletrônico simples ou intermediário.

Alguns exemplos:

  • Acender LEDs
  • Ler botões
  • Medir temperatura
  • Medir luminosidade
  • Detectar movimento
  • Detectar distância
  • Controlar motores
  • Controlar servos
  • Acionar relés
  • Mostrar informações em displays
  • Fazer alarmes
  • Automatizar iluminação
  • Criar robôs
  • Criar fechaduras eletrônicas
  • Criar sistemas de irrigação
  • Criar estações meteorológicas
  • Fazer protótipos de produtos

O Arduino funciona como o cérebro do circuito.

Os sensores enviam informações para ele, o programa analisa essas informações e então o Arduino pode tomar alguma ação.

Por exemplo:

Sensor de distância
        ↓
     Arduino
        ↓
Objeto está perto?
        ↓
       Sim
        ↓
Acender LED vermelho

Como o Arduino funciona?

Dentro do Arduino existe um microcontrolador.

No Arduino Uno tradicional, normalmente encontramos o microcontrolador:

ATmega328P

Esse pequeno chip possui:

  • Processador
  • Memória
  • Entradas digitais
  • Saídas digitais
  • Entradas analógicas
  • Temporizadores
  • Interfaces de comunicação

Você escreve um programa no computador e envia esse programa para o Arduino através do cabo USB.

Depois disso, o Arduino consegue executar o programa sozinho sempre que receber energia.

O fluxo básico é:

Computador
   ↓
Arduino IDE
   ↓
Código C/C++
   ↓
Compilação
   ↓
USB
   ↓
Arduino
   ↓
Microcontrolador executa o programa

Arduino IDE

A Arduino IDE é o programa utilizado para escrever e enviar códigos para a placa.

Um programa básico de Arduino é chamado de sketch.

Um sketch normalmente possui duas funções principais:

void setup() {

}

void loop() {

}

setup()

A função setup() executa apenas uma vez, quando o Arduino liga ou reinicia.

Ela normalmente é usada para configurar as portas.

Exemplo:

void setup() {
  pinMode(13, OUTPUT);
}

Aqui estamos dizendo:

A porta 13 será utilizada como saída.


loop()

A função loop() executa repetidamente enquanto o Arduino estiver ligado.

Exemplo:

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);

  digitalWrite(13, LOW);
  delay(1000);
}

Esse código:

  1. Liga a porta 13
  2. Espera 1 segundo
  3. Desliga a porta 13
  4. Espera 1 segundo
  5. Repete tudo

Se houver um LED conectado corretamente nessa porta, ele ficará piscando.


As portas do Arduino

O Arduino possui vários tipos de pinos.

No Arduino Uno, os principais são:

Portas digitais
Portas PWM
Entradas analógicas
5V
3.3V
GND
VIN
AREF
RESET

Cada uma possui uma função diferente.


Portas digitais

No Arduino Uno existem as portas:

0 até 13

Elas são chamadas de portas digitais porque trabalham principalmente com dois estados:

LOW
HIGH

Normalmente:

LOW  = 0V
HIGH = aproximadamente 5V

Essas portas podem funcionar como:

Entrada

ou

Saída

Porta digital como saída

Uma porta configurada como saída pode controlar dispositivos.

Exemplo:

pinMode(7, OUTPUT);

Para ligar:

digitalWrite(7, HIGH);

Para desligar:

digitalWrite(7, LOW);

Isso pode ser usado para controlar:

  • LEDs
  • Buzzers
  • Transistores
  • MOSFETs
  • Relés
  • Outros circuitos

Porta digital como entrada

Também podemos utilizar uma porta para receber informações.

Exemplo:

pinMode(2, INPUT);

Depois podemos ler o estado dela:

int estado = digitalRead(2);

O resultado normalmente será:

HIGH

ou:

LOW

Isso é útil para:

  • Botões
  • Sensores digitais
  • Interruptores
  • Sensores de movimento
  • Módulos eletrônicos

INPUT_PULLUP

O Arduino também possui resistores internos que podem ser usados nas entradas.

Por exemplo:

pinMode(2, INPUT_PULLUP);

Nesse modo, o Arduino ativa internamente um resistor de pull-up.

Isso é muito utilizado com botões.

Um circuito simples pode ficar:

Pino 2 ---- botão ---- GND

Quando o botão não estiver pressionado:

HIGH

Quando o botão for pressionado:

LOW

O que é uma entrada flutuante?

Se você configurar:

pinMode(2, INPUT);

e não conectar corretamente o pino a HIGH ou LOW, ele pode ficar em um estado chamado floating, ou flutuante.

Nesse estado, o Arduino pode ler valores aleatórios.

Por exemplo:

HIGH
LOW
HIGH
HIGH
LOW

Mesmo sem você pressionar nada.

Por isso normalmente utilizamos:

  • Resistor pull-up
  • Resistor pull-down
  • INPUT_PULLUP

Portas PWM

Algumas portas digitais possuem o símbolo:

~

No Arduino Uno normalmente são:

3
5
6
9
10
11

Essas portas possuem suporte a PWM.

PWM significa:

Pulse Width Modulation

ou:

Modulação por Largura de Pulso

PWM permite simular diferentes níveis de potência ligando e desligando uma saída muito rapidamente.

Por exemplo:

analogWrite(9, 128);

O valor pode variar entre:

0 até 255

Onde:

0   = 0%
128 = aproximadamente 50%
255 = 100%

Isso pode ser usado para:

  • Controlar brilho de LED
  • Controlar velocidade de motores
  • Gerar sinais
  • Controlar alguns dispositivos eletrônicos

Entradas analógicas

No Arduino Uno existem normalmente:

A0
A1
A2
A3
A4
A5

Essas portas permitem medir uma tensão variável.

Por exemplo:

int valor = analogRead(A0);

No Arduino Uno, o resultado normalmente varia entre:

0 até 1023

Porque o conversor analógico possui resolução de 10 bits.

Isso significa aproximadamente:

0    = 0V
1023 = 5V

Essas entradas podem ser usadas com:

  • Potenciômetros
  • LDR
  • Sensores analógicos
  • Joysticks
  • Sensores de temperatura
  • Sensores de luminosidade

Exemplo com potenciômetro

Imagine um potenciômetro conectado assim:

5V --------+
           |
      Potenciômetro
           |
GND -------+
           |
          A0

Podemos ler sua posição:

int valor = analogRead(A0);

Serial.println(valor);

O Arduino retornará aproximadamente:

0
100
350
512
800
1023

dependendo da posição do potenciômetro.


Pinos de alimentação

Além das portas de entrada e saída, o Arduino possui pinos de alimentação.

Os principais são:

5V
3.3V
GND
VIN

5V

O pino:

5V

fornece aproximadamente 5 volts.

Pode ser usado para alimentar pequenos componentes e sensores.

Por exemplo:

Arduino 5V
   |
   +---- Sensor

Porém o Arduino possui limite de corrente.

Não devemos utilizar esse pino para alimentar dispositivos que consomem muita corrente.

Por exemplo:

  • Motores grandes
  • Vários servos
  • Fitas LED grandes
  • Relés grandes diretamente
  • Bombas

Esses dispositivos normalmente precisam de uma fonte externa.


3.3V

O pino:

3.3V

fornece aproximadamente:

3,3 volts

Alguns sensores e módulos eletrônicos trabalham nessa tensão.

Sempre verifique a tensão suportada pelo componente.


GND

GND significa:

Ground

ou:

Terra/referência elétrica do circuito

Ele funciona como o ponto de referência para as tensões do circuito.

Normalmente um circuito precisa de:

Alimentação
+
GND

Exemplo:

5V ---- LED ---- resistor ---- GND

Quando usamos fontes externas junto com o Arduino, normalmente precisamos conectar os GNDs.

Exemplo:

Fonte externa GND
        |
        +------ Arduino GND

Isso cria uma referência elétrica comum entre os dispositivos.


VIN

O pino:

VIN

pode ser usado para alimentar a placa através do regulador interno em situações apropriadas.

Ele não é equivalente ao pino de 5V.

É importante verificar a tensão recomendada para a placa específica antes de utilizá-lo.


RESET

O pino ou botão:

RESET

reinicia o microcontrolador.

Quando você pressiona RESET, o Arduino começa novamente pelo:

setup()

e depois continua executando:

loop()

AREF

AREF significa:

Analog Reference

Ele está relacionado à tensão de referência utilizada pelas entradas analógicas.

Em projetos básicos normalmente você não precisará utilizá-lo.


Portas 0 e 1

No Arduino Uno:

0 = RX
1 = TX

Esses pinos são utilizados pela comunicação serial.

RX = Receive
TX = Transmit

Eles também são utilizados na comunicação entre o Arduino e o computador através do conversor USB/Serial da placa.

Por isso é recomendado tomar cuidado ao conectar outros dispositivos nesses pinos enquanto estiver enviando programas para o Arduino.


Comunicação Serial

O Arduino pode enviar informações para o computador.

No código:

void setup() {
  Serial.begin(9600);
}

Depois:

Serial.println("Olá!");

Na Arduino IDE podemos abrir o Monitor Serial.

O resultado aparecerá:

Olá!

Isso é extremamente útil para:

  • Testar sensores
  • Encontrar erros
  • Ver valores
  • Depurar programas
  • Acompanhar estados do circuito

A4 e A5 também possuem outra função

No Arduino Uno, normalmente:

A4 = SDA
A5 = SCL

Esses pinos são utilizados pelo protocolo:

I2C

O I2C permite conectar dispositivos como:

  • Displays OLED
  • Displays LCD
  • RTCs
  • Sensores
  • Expansores de portas

Um exemplo de ligação:

Arduino      Display OLED

5V/VCC  ---> VCC
GND     ---> GND
A4      ---> SDA
A5      ---> SCL

Dependendo do módulo, a tensão pode ser 3,3 V em vez de 5 V.


SPI

O Arduino também possui comunicação:

SPI

No Arduino Uno ela utiliza normalmente os pinos:

10
11
12
13

Com funções como:

SS
MOSI
MISO
SCK

O SPI pode ser utilizado com:

  • Cartões SD
  • Displays
  • Módulos RFID
  • Conversores
  • Memórias
  • Outros microcontroladores

Como conectar um LED

Um dos circuitos mais simples é:

Arduino porta 7
      |
    resistor
      |
     LED
      |
     GND

Um resistor como:

220 Ω

é frequentemente usado com LEDs comuns, dependendo da tensão, LED e corrente desejada.

Código:

void setup() {
  pinMode(7, OUTPUT);
}

void loop() {
  digitalWrite(7, HIGH);
  delay(1000);

  digitalWrite(7, LOW);
  delay(1000);
}

Por que usar resistor no LED?

Um LED não deve normalmente ser conectado diretamente entre uma porta digital e o GND sem limitação de corrente.

O resistor limita a corrente.

Sem ele, você pode danificar:

  • O LED
  • A porta do microcontrolador

Exemplo:

Arduino
  |
  +---- resistor ---- LED ---- GND

Como conectar um botão

Um exemplo utilizando INPUT_PULLUP:

Pino 2 ---- botão ---- GND

Código:

void setup() {
  pinMode(2, INPUT_PULLUP);
}

void loop() {

  if (digitalRead(2) == LOW) {
    // botão pressionado
  }

}

Botão controlando LED

Exemplo completo:

#define LED 7
#define BOTAO 2

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BOTAO, INPUT_PULLUP);
}

void loop() {

  if (digitalRead(BOTAO) == LOW) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

}

Quando o botão for pressionado:

LED ligado

Quando soltar:

LED desligado

pinMode()

A função:

pinMode()

define como um pino será utilizado.

Exemplos:

pinMode(7, OUTPUT);
pinMode(2, INPUT);
pinMode(2, INPUT_PULLUP);

digitalWrite()

Controla uma saída digital.

digitalWrite(7, HIGH);

liga a saída.

digitalWrite(7, LOW);

desliga.


digitalRead()

Lê uma entrada digital.

int estado = digitalRead(2);

O resultado será:

HIGH

ou:

LOW

analogRead()

Lê uma entrada analógica.

int valor = analogRead(A0);

No Arduino Uno normalmente retorna:

0 até 1023

analogWrite()

No Arduino Uno, analogWrite() utiliza PWM nos pinos compatíveis.

Exemplo:

analogWrite(9, 128);

Isso gera aproximadamente 50% de duty cycle.


delay()

A função:

delay()

faz o programa esperar uma quantidade de milissegundos.

Exemplo:

delay(1000);

significa:

1000 ms = 1 segundo

Exemplo de projeto

Imagine um sensor de distância HC-SR04.

O Arduino pode medir a distância de um objeto.

Quando a distância for:

maior que 50 cm

acende LED verde.

Entre:

20 e 50 cm

acende LED amarelo.

Abaixo de:

20 cm

acende LED vermelho.

O funcionamento seria:

HC-SR04
   |
   v
Arduino
   |
   v
Calcula distância
   |
   +---- longe ------> LED verde
   |
   +---- médio ------> LED amarelo
   |
   +---- perto ------> LED vermelho

Esse mesmo princípio pode ser utilizado em projetos muito maiores.


Arduino não fornece potência infinita

Uma coisa muito importante ao começar com Arduino é entender que suas portas foram feitas principalmente para sinais, não para fornecer muita potência.

Você não deve ligar diretamente em uma porta:

Motor grande
Servo potente
Lâmpada
Fita LED grande
Bomba
Solenoide

Para controlar cargas maiores normalmente utilizamos:

  • Transistor
  • MOSFET
  • Relé
  • Driver de motor

Por exemplo:

Arduino
   |
   | sinal
   v
 MOSFET
   |
   v
 Motor
   |
Fonte externa

O Arduino apenas controla o MOSFET.

Quem fornece a energia para o motor é a fonte externa.


Arduino e protoboard

Durante os testes é muito comum utilizar uma:

Protoboard

Ela permite montar circuitos sem precisar soldar.

Você pode conectar:

  • Resistores
  • LEDs
  • Botões
  • Sensores
  • Transistores
  • Jumpers
  • Circuitos integrados

Depois que o projeto estiver funcionando, você pode criar algo mais permanente utilizando:

  • Placa perfurada
  • Soldagem
  • PCB personalizada

Como começar a usar

O processo básico é:

1. Instalar a Arduino IDE

Instale a IDE compatível com seu sistema operacional.


2. Conectar o Arduino

Utilize um cabo USB.

PC ---- USB ---- Arduino

3. Selecionar a placa

Na Arduino IDE selecione a placa correspondente.

Por exemplo:

Arduino Uno

4. Selecionar a porta

Selecione a porta serial onde o Arduino apareceu.

No Windows ela pode aparecer como:

COM3
COM4
COM5

No Linux normalmente aparece como algo parecido com:

/dev/ttyACM0

ou:

/dev/ttyUSB0

Permissão da porta no Linux

Em distribuições Linux, pode acontecer de aparecer um erro como:

Permission denied

ao tentar acessar:

/dev/ttyUSB0

ou:

/dev/ttyACM0

Uma solução comum é adicionar seu usuário ao grupo responsável pelas portas seriais.

Dependendo da distribuição, frequentemente é:

sudo usermod -aG dialout $USER

Em algumas distribuições, como sistemas baseados em Arch Linux, o grupo utilizado pode ser:

uucp

Por exemplo:

sudo usermod -aG uucp $USER

Depois disso normalmente é necessário sair da sessão e entrar novamente para que a alteração seja aplicada.


5. Escrever o código

Por exemplo:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);

  digitalWrite(13, LOW);
  delay(1000);
}

6. Compilar

A IDE transforma seu código em instruções que o microcontrolador consegue executar.

Se houver algum erro de programação, ele aparecerá durante a compilação.


7. Enviar para a placa

Clique em:

Upload

A IDE enviará o programa pela USB.

Depois disso, o Arduino começará a executar o programa automaticamente.


O Arduino precisa ficar conectado ao computador?

Não.

O computador normalmente é necessário apenas para:

Programar
Depurar
Monitorar

Depois que o código foi gravado, você pode alimentar o Arduino utilizando uma fonte apropriada.

O código continuará armazenado no microcontrolador mesmo quando ele for desligado.

Quando receber energia novamente, ele executará o programa novamente.


Estrutura básica de um projeto Arduino

Normalmente podemos pensar em três partes:

Entrada
Processamento
Saída

Por exemplo:

Sensor PIR
   |
   v
ENTRADA
   |
   v
Arduino
   |
   v
PROCESSAMENTO
   |
   v
LED / Buzzer
   |
   v
SAÍDA

Outro exemplo:

Sensor de temperatura
        |
        v
     Arduino
        |
        v
 Temperatura > 30°C?
        |
       Sim
        |
        v
   Liga ventilador

Resumo das principais portas do Arduino Uno

PinoFunção
0Digital / RX Serial
1Digital / TX Serial
2Digital
3Digital / PWM
4Digital
5Digital / PWM
6Digital / PWM
7Digital
8Digital
9Digital / PWM
10Digital / PWM / SPI
11Digital / PWM / SPI
12Digital / SPI
13Digital / SPI / LED integrado
A0Entrada analógica
A1Entrada analógica
A2Entrada analógica
A3Entrada analógica
A4Analógica / SDA I2C
A5Analógica / SCL I2C
5VAlimentação 5 V
3.3VAlimentação 3,3 V
GNDReferência elétrica
VINEntrada de alimentação
RESETReinicia o microcontrolador
AREFReferência analógica

Conclusão

Arduino é uma das maneiras mais simples de começar a aprender eletrônica e sistemas embarcados.

Com uma única placa você consegue aprender conceitos como:

  • Tensão
  • Corrente
  • Resistência
  • Entradas digitais
  • Saídas digitais
  • Entradas analógicas
  • PWM
  • Sensores
  • Motores
  • Comunicação serial
  • I2C
  • SPI
  • Automação
  • Programação de microcontroladores

O conceito principal é simples:

Receber informações
        ↓
Processar informações
        ↓
Controlar alguma coisa

Por exemplo:

Sensor
   ↓
Arduino
   ↓
Programa
   ↓
LED / Motor / Display / Relé

A partir desse princípio é possível criar desde um simples LED piscando até robôs, sistemas de automação e dispositivos eletrônicos completos.