Conheça o Arduino


O que é Arduino?

O Arduino é uma família de placas de prototipagem, com em torno de 20 placas oficiais, de código aberto, focadas em estudantes e iniciantes no mundo da eletrônica. Unindo software e hardware, com ela, você pode controlar sensores e atuadores e fazer os mais diversos projetos.

Utiliza os microcontroladores fabricados pela empresa ATMEL em suas placas e é programado em uma variação da linguagem C++ em seu próprio compilador, chamado Arduino IDE.

O que posso fazer com esse tal de Arduino?

(Tudo… Ou quase tudo…) Por ser uma placa de prototipagem, é uma plataforma muito versátil, principalmente por existirem vários módulos, sensores e atuadores feitos especificamente para ela. Desde acender e apagar um LED, fazer um semáforo inteligente, até um satélite… O céu é o limite.

Aqui vão alguns exemplos de projetos feitos com Arduino:

 Ardusat: O satélite baseado na plataforma Arduino. Fonte: Peter PlatzerCC BY-SA 3.0.
Até mesmo um lança chamas (esse até eu fiquei chocado)

Sua história

Criado em 2006, na Itália, pelo professor Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David Mellis. Eles queriam ensinar eletrônica e programação aos seus alunos, mas de forma barata e versátil. Como na época apenas existiam placas caras, Banzi decidiu fazer a sua própria.

O Arduino ficou famoso no mundo inteiro por sua versatilidade, preço e propósito.

Como qualquer placa eletrônica, não é uma coisa em si, mas vários ou até milhares de componentes eletrônicos, que juntos e interligados, fazem toda a magia acontecer. Além disso, para utilizar o Arduino, você vai ver muitos deles pelo caminho. Eles são de vários tipos, tantos que seria quase impossível falar em um único documento como esse, mas vamos aos mais usados…

Tipos de Arduino

Por mais que se pareçam, a família de placas de prototipagem Arduino não se resume a uma placa apenas, mas várias, cada uma com as suas próprias características. São quase que centenas de placas, oficiais e não oficiais. Neste artigo falaremos das principais.

Arduino UNO

Arduino mais conhecido e vendido, o Arduino Uno é baseado no microcontrolador Atmega 328p. Com 14 entradas/saídas digitais, 6 entradas analógicas, além de 5 saídas PWM e I2C.

Arduino UNO. Fonte: Snootlab / CC BY 2.0.
Arduino Mega

A placa Arduino Mega 2560 é mais uma placa da plataforma Arduino que possui recursos bem interessantes para prototipagem e projetos mais elaborados. Baseada no microcontrolador ATmega2560, possui 54 pinos de entradas e saídas digitais onde 15 destes podem ser utilizados como saídas PWM. Possui 16 entradas analógicas, 4 portas de comunicação serial. Com mais memória e mais entradas, é ideal para projetos mais elaborados.

Arduino Mega. Fonte: dan / CC BY 2.0.
Arduino Nano

Arduino baseado em um microcontrolador ATmega328. É Semelhante em termos de recursos ao Arduino Uno. As as diferenças são o tamanho e a maneira de conectá-lo ao computador para programá-lo. Ideal para projetos pequenos com pouco gasto de energia.

Arduino Nano. Fonte: David Mellis / CC BY 2.0

Tipos de sinais

Com o Arduino, podemos trabalhar com dois tipos de sinais: analógicos e digitais. No mundo dos microcontroladores, sinais analógicos são sinais que podem apresentar valores contínuos ao longo do tempo, enquanto sinais digitais apresentam valores discretos, como 0 e 1. Além desses sinais, também estamos interessados em sinais de alimentação.

Sinais analógicos

Quando trabalhamos com sinais analógicos no Arduino, geralmente utilizamos algum tipo de sensor para transformar uma grandeza que varia no tempo, que pode ser pressão ou temperatura, por exemplo, em uma grandeza que o Arduino consegue entender, que é a tensão elétrica.

Gráfico de um sinal analógico variando ao longo do tempo

No Arduino Uno, temos 6 entradas de sinais analógicos apenas para leitura. Isso quer dizer que com essas portas conseguimos medir a variação de componentes como sensores, resistores variáveis etc. Tudo depende da montagem do circuito.

Portas de entrada analógica do Arduino Uno

Dentro do microprocessador, só se trabalha com dados digitais, ou seja, é necessário converter os dados analógicos para dados digitais. Isso é feito com um conversor analógico-digital de 10 bits, ou seja, durante a conversão dos sinais analógicos em digitais, o conversor mapeia os valores de tensão (que no caso do Arduino Uno vão de 0 a 5V) em valores digitais de 10 bits, ou seja, que variam de 0 a 1023, dependendo da tensão inserida no pino uso.

O comando para utilizar na hora da programação, para ler um sinal analógico no pino 5, por exemplo, é:

analogRead(5);

Fazendo isso, o microcontrolador do Arduino irá retornar uma leitura digital que representa a tensão elétrica presente na porta 5. Isso pode ser feito para qualquer entrada analógica, bastando substituir o número 5 pelo número correspondente.

Sinais digitais

O conceito de digital remete à transmissão de dados utilizando sinais elétricos booleanos, ou seja, ligado(5v) ou desligado(0V), sendo uma forma muito mais simples e prática de transmissão de dados comparado com a forma analógica. No Arduino Uno, as 14 entradas digitais podem ser configuradas como de entrada ou de saída, mas o que isso quer dizer?

Portas de entrada/saída digital do Arduino Uno.
Entrada digital

Uma das configurações é a de entrada, onde temos um sinal digital enviado por componentes como sensores ou botões. Esses componentes enviam sinais digitais para o Arduino, que os lê e, baseado nisso, pode realizar alguma operação.

Para configurar qualquer porta I/O (forma que portas digitais são chamadas) precisamos definir um comando no inicio da programação. Por exemplo, para usar o pino 3 como uma entrada digital, utilizamos o comando:

pinMode(3,INPUT);

Onde “pinMode” significa o modo operacional do pino. Assim como nas portas analógicas, podemos alterar o número do pino para qualquer outra porta I/O a ser utilizada.

Saída digital

Caso seja configurada como uma saída, as portas digitais enviarão o sinal digital para a ativação de algum componente, como um LED, motor, módulo ou até envio de dados para outra placa em sinais binários.

Para configurar qualquer porta I/O como saída precisamos definir um comando no início da programação. Se quisermos utilizar o pino 3 como uma saída digital, utilizamos o comando:

pinMode(3,OUTPUT);

Aqui também podemos alterar o número do pino para qualquer outra porta I/O a ser utilizada.

Sinais de alimentação

Em toda placa Arduino existe uma parte dedicada apenas à alimentação para componentes internos e externos. No Arduino Uno essa se localiza logo ao lado do microcontrolador.

Pinos de alimentação no Arduino Uno.

No Arduino Uno, existem 5 pinos de alimentação principais:

  • o pino “5V”, que ligado ao regulador de tensão principal do arduino, consegue enviar a componentes externos uma tensão continua de 5V e uma corrente máxima de 500mA;
  • o pino “3.3V”, que é ligado ao regulador de tensão secundário do Arduino, e consegue enviar 3.3V e uma corrente máxima de 50mA a componentes externos;
  • dois pinos “GND”, usados para alimentação dos componentes que trabalham tanto em 5V quanto em 3.3V;
  • o pino “VIN”, às vezes chamado de “9V”, utilizado para alimentação da sua placa Arduino. No Arduino Uno pode ser utilizada uma tensão entre 7V e 12V nesse pino para alimentar sua placa, mas cuidado! Essas faixas de valores podem mudar de placa para placa, então sempre consulte os limites corretos para a placa que você está utilizando.

Também, temos uma entrada jack para conexão de baterias externas, sem depender sempre da porta USB do seu computador, podendo ser ligado em tensões entre 7V e 12V para funcionamento pleno do Arduino Uno. O pino “VIN”, explicado acima, está ligado em paralelo com esta entrada externa, assim caso ela seja utilizada, temos a tensão de alimentação disponível neste pino.

Além desses pinos, temos no Arduino Uno um terceiro pino “GND” ao lado do pino “AREF”, que pode ser utilizado como o terra para os sinais digitais.

Arduino IDE

Para programar qualquer Arduino, existe uma plataforma dedicada a isso, a Arduino IDE.

Ela deve ser baixada em seu site oficial: https://www.arduino.cc/en/software.

Neste artigo será usada a versão 1.8.19. A tela principal da IDE Arduino pode ser vista a seguir:

Plataforma Arduino IDE.

Temos muitos botões e áreas, mas vamos explicar o principal aqui.

  • Ambiente de programação: onde efetivamente a programação vai ser escrita, todo o código deve ser colocado aqui;
  • Verificar: todo programa antes de enviado para a placa é verificado; a verificação procura erros de escrita no código que podem acarretar em erros internos na placa;
  • Upload para a placa: verifica o código e envia via USB para a placa conectada. Para fazer o upload (a gravação do programa no Arduino), antes é necessário ir na aba ferramentas, selecionar “Porta” e verificar em qual posta está conectada a placa Arduino.
  • Área de mensagens: Mostra eventuais erros e problemas na hora da verificação e do upload. Também mostra se ocorreram com sucesso.
Serial Monitor

O serial monitor é uma forma simples e rápida de se comunicar pelo próprio computador com a placa Arduino. Temos três comandos básicos:

Serial.begin(9600)

Define a velocidade de envio/recebimento de dados por parte do Arduino. No UNO, sua velocidade padrão é de 9600.

Serial.println(variavel)

Envia algo para ser mostrado no Serial Monitor e cria uma linha nova a cada envio.

Programação

Como citado anteriormente, o Arduino utiliza uma variação da linguagem C++, mas pode também ser programado em outras linguagens, como Python, mesmo que menos utilizado no Arduino. A linguagem C++ é uma linguagem de base, isso quer dizer que é uma linguagem muito mais leve e de mais fácil entendimento pelos microprocessadores.

O Arduino possui uma comunidade muito grande de usuários, que disponibiliza muitos dos códigos na internet, e existem muitos códigos de exemplos que já vêm com a IDE do Arduino! Explore esses códigos, muitas coisas podem ser feitas apenas na base do copiar e colar!

A estrutura de programação se resume a duas funções: o void setup() e o void loop():

  • setup(): onde devem ser definidas algumas configurações iniciais do programa. Executa uma única vez;
  • loop(): função principal do programa. Fica executando indefinidamente.
Fluxograma das principais funções do código do Arduino

Por ser um algoritmo, a programação seguira uma ordem de cima para baixo, em níveis de processamento, como se fosse uma receita de bolo, primeiro os ingredientes, mistura tudo, bate bem e assa em tal temperatura (acho que esse bolo não ficaria muito bom…).

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Estrutura padrão do código do Arduino

Os comandos são divididos principalmente em 3 tipos: funções, variáveis e estruturas.

Funções

Uma função é uma parte de código que realiza funções pré definidas e pode ser utilizada várias vezes dentro de um código, ou seja, são comandos usados para controlar a placa e realizar ações, como ler um sinal ou aguardar um determinado tempo. São sempre seguidos por parênteses, que podem ou não conter parâmetros que são passados para as funções. Exemplos:

  • digitalRead(5);
  • digitalWrite(3, LOW);
  • delay(100);
  • delayMicroseconds(50);
  • random(10);
  • pinMode(3, INPUT);

Você também pode criar suas próprias funções, o que ajuda muito a organizar seu programa!

Variáveis

Variáveis são tipos de “caixinhas” que servem para armazenar dados (valores) no programa. O conteúdo destas pode variar de acordo com o tempo e a programação, e seu nome não pode ser com caracteres especiais ou palavras reservadas. Podem ser de vários tipos, como um número inteiro, um booleano (verdadeiro ou falso), uma letra, um número real (chamado de ponto flutuante). São declaradas pelo tipo de variável, seguido do nome da variável, e podem ou não já serem inicializados com um valor inicial. Exemplos:

  • int dia = 10;
  • long segundos;
  • char uma_letra;
  • bool teste = false;
  • byte comando;
  • float altura = 1.70;
Estruturas

Comandos usados para controlar blocos dentro do código, que serão executados um determinado número de vezes ou caso uma condição seja satisfeita. Exemplos:

  • do… while
  • if
  • else
  • for
  • switch… case
  • while
  • break

Existem diversas estruturas na linguagem do Arduino. Elas têm funcionamento praticamente igual as da linguagem C++, sendo idênticas, sendo iguais tanto em funcionamento, quanto em aparência.

As mais usadas são:

  • O comando if e else:  checa uma condição e executas o comando a seguir ou um bloco de comandos delimitados por chaves, se a condição é verdadeira (‘true’). Se for falso, executa as funções que estão no bloco else, também delimitado por chaves.
if (condição1) {
  // faz coisa A se condição1 for verdadeiro
}
else if (condição2) {
  // faz coisa B se condição1 for falso e condição2 for verdadeiro
}
else {
  // faz coisa C se condiçao1 e condição2 forem falsos
}
// no começo da linha quer dizer um comentário, que esta linha apenas pode ser lida por humanos e que será ignorada pela máquina.
  • O comando while : Um loop while irá se repetir continuamente, e infinitamente, até a expressão dentro dos parênteses () se torne falsa. Algo deve mudar a variável testada, ou o loop while nunca irá encerrar. Isso pode ser no seu código, por exemplo, uma variável incrementada, ou uma condição externa, como a leitura de um sensor.
  • for: O comando for é usado para repetir um bloco de código envolvido por chaves. Um contador de incremento é geralmente utilizado para terminar o loop. O comando for é útil para qualquer operação repetitiva, e é usado frequentemente com vetores para operar em coleções de dados ou pinos.
// Um programa "inútil", para mostrar como o comando 'for' funciona, 
// que cria uma variável 'segundos', inicializa ela com valor 0, e a cada
// 1 segundo (100x10ms) acrescenta um ao seu valor
//
// Criado por: Erick León, 2022

int segundos;           // uma variável de número inteiro chamada segundos

void setup() {
    segundos = 0;     // inicializa a variável 'segundos' com o valor 0
}

void loop() {
    for (int i = 1; i <= 100; i++){  // com 'i' saindo de 1, enquanto for menor igual a 100, soma 1 em 'i' a cada iteração
        delay(10);    // aguarda 10ms
    }
    segundos++;  // o mesmo que: segundos = segundos+1;
}

Além desses, existem uma infinidade de comandos extras, mas com utilizações especificas.

Uma coisa que temos de ficar atentos é que existem as chamadas, palavras reservadas, que são palavras que já tem um uso especifico dentro do microcontrolador do Arduino, não podendo ser utilizadas em nenhum outro lugar ou sobre nenhuma outra função.

Atividade

Agora, vamos demonstrar um pouco do que o Arduino é capaz de fazer! Um projeto simples para podermos colocar nosso conhecimento em prática é o de um semáforo.

Tabela de materiais para a atividade
Caso não tenha LEDs dessas cores, não há problema, desde que sejam compatíveis com a tensão.

Primeiramente vamos falar um pouco dos componentes a serem usados:

Resistores

A resistência elétrica é a capacidade de algum material se opor a corrente elétrica. Todos os materiais tem alguma, mesmo que mínima, resistência. Alguns materiais tem uma resistência incrivelmente grande. Sua unidade de medida é o OHM(Ω), uma homenagem ao físico alemão George Simon Ohm.

A resistência elétrica varia conforme o comprimento, a largura e a natureza do material do condutor, além da temperatura a que ele é submetido.

A resistência elétrica também pode se alterar conforme a variação da tensão e da corrente elétrica em um condutor. Isso ocorre porque, quanto maior a intensidade da corrente elétrica, menor a dificuldade que a carga enfrenta para movimentar-se, ou seja, menor a resistência. A tensão (V) entre as extremidades de um condutor é proporcional à corrente que o atravessa.

Com isso, por exemplo, dependendo do valor do resistor, conseguimos limitar a corrente e tensão de forma que o circuito funcione adequadamente, independente do valor da tensão proveniente da fonte.

Resistores de carbono e cerâmica de diferentes potências. Fonte: David Ludovino / CC BY-SA 3.0

Todos são muito parecidos, certo? Precisamos de alguma coisa para diferenciá-los de forma fácil e rápida. Para isso existe o código de cores de resistores. O código de cores é uma forma de saber o valor de cada um destes, sem medir, apenas olhando quanto vale cada cor em uma tabela.

Um resistor é constituído de quatro faixas (ou às vezes cinco faixas) de cor. As duas primeiras mostram o valor, a terceira é o multiplicador (quantos zeros a mais o valor final vai ter) e por fim temos uma faixa indicando o valor de tolerância do resistor, o quanto ele pode variar, já que nenhuma resistência é exata e pode sofrer alterações.

Tabela de cores de um resistor. Fonte: Marcoscyr / CC BY-SA 4.0
LED

Light emitting diode, ou LED, um componente eletrônico capaz de emitir luz visível transformando energia elétrica em energia luminosa. Com baixo consumo de energia e fabricado dos mais variados tamanhos, LEDs são muito utilizados na microeletrônica, mais precisamente em telas, lanternas, lâmpadas, etc. Com dois terminais, catodo e anodo, o LED não passa de um simples diodo, fabricado de materiais específicos. Em um diodo, quando ocorre a passagem de energia, ela pode ser transformada indiretamente em calor ou luz: se os diodos forem fabricados de silício e germânio, essa energia será transformada em calor, mas se for fabricada nos materiais a seguir, ela será transformada em luz, assim, constituindo o LED.

LEDs feitos de diferentes materiais. Fonte: Thepalerider2012 / CC BY-SA 3.0

Como falado anteriormente, é fabricado de vários tamanhos, dependendo da necessidade do comprador, e por isso, dependendo de seu tamanho, utiliza tensão e correntes diferentes. Os mais utilizados e conhecidos são os LEDS de 3mm e 5mm. A cor irradiada pelo LED também influencia no consumo de energia, quanto menor o comprimento de onda irradiada mais energia é consumida.

Tensão e corrente de LEDs de 5mm, por cor.
IMPORTANTE! Os LEDs trabalham com uma tensão aproximadamente fixa, mas não limitam a corrente que passa por eles. Por esse motivo, é muito importante sempre colocar um resistor apropriado em série com os LEDs ao ligá-los ao seu Arduino, caso contrário você pode queimar sua placa!
Protoboard

Protoboard, ou matriz de contato, é uma placa com furos condutores que é muito útil para montar circuitos eletrônicos em teste. Possui conexões internas metálicas para condução elétrica, e é muito útil para facilitar uma montagem rápida (ou dificultar, depende do seu circuito). Sua vantagem é que dispensa a ligação por solda dos componentes eletrônicos.

Esquema de ligação interna de uma protoboard. Fonte: Victoria.nunez2 / CC BY-SA 4.0. Adaptação: Erick León

Aqui está um esquema de ligação interna de uma protoboard, sendo cada linha azul um condutor metálico.

Agora vamos voltar a atividade:

Esquema de ligação
Esquema de ligação para a atividade. Elaborado no Fritzing.
Programação
// Programa de controle de um semáforo.
//
// Criado por: Lucas Jácome Cabral, 2022

int verde = 3;        // pino onde está ligado o LED verde
int vermelho = 4;  // pino onde está ligado o LED vermelho
int amarelo = 5;    // pino onde está ligado o LED amarelo

void setup() {  // este código só é rodado uma vez, no início
    pinMode(verde, OUTPUT);       // define verde como saída
    pinMode(vermelho, OUTPUT); // define vermelho como saída
    pinMode(amarelo, OUTPUT);   // define amarelo como saída
}

void loop() {  // este código se repete indefinidamente
    digitalWrite(vermelho, HIGH); // ativa LED vermelho
    digitalWrite(verde,LOW);        // mantém LED verde desligado
    digitalWrite(amarelo,LOW);    // mantém LED amarelo desligado
    delay(4000);                          // tempo de quatro segundos
    digitalWrite(vermelho, LOW); // mantém LED vermelho desligado
    digitalWrite(verde,LOW);        // mantém LED verde desligado
    digitalWrite(amarelo, HIGH);  // ativa LED amarelo
    delay(1000);                          // tempo de um segundo
    digitalWrite(vermelho, LOW); // mantém LED vermelho desligado
    digitalWrite(verde,HIGH);       // ativa LED verde
    digitalWrite(amarelo, LOW);   // mantém LED amarelo desligado
    delay(4000);                          // tempo de quatro segundos
}
Não se esqueça de, na hora de carregar o programa, verificar se a porta usb selecionada é a correta.

Referências


Texto por: Lucas Jácome Cabral

Revisão: Erick León


, ,

Uma resposta para “Conheça o Arduino”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *