Imagem-BANNER-DESTAQUE-BLOG- como desneovlver um projeto final com arduino

Como desenvolver um projeto final com Arduino 6

Neste post veremos como podemos desenvolver um sistema embarcado, baseado em Arduino, mais adequado para um projeto final. Para isso, inicialmente vamos criar um projeto em Arduino Uno, depois veremos quais recursos da placa estamos realmente utilizando e iremos refazer o projeto, removendo a placa.

O Arduino em um produto final

O Arduino é uma plataforma de prototipagem open-source e open-hardware muito popular na comunidade maker devido à sua simplicidade e a grande comunidade, provendo diversos exemplos, tutoriais e softwares para facilitar as mais complicadas tarefas de programação e automação. No entanto observa-se que uma boa parte da comunidade, principalmente os iniciantes, se esquecem que a plataforma é destinada a prototipagem e não ao desenvolvimento de um projeto/produto final.

Dentre os fatores que tornam o Arduino inadequado a um produto final, destacam-se os custos com a confecção da placa e os recursos da mesma que não foram utilizados, encarecendo desnecessariamente o projeto final, e o fato de que a plataforma não oferece conexões robustas. Projetos complexos podem requerer diversos fios que podem facilmente escapar e se misturam, dificultando a manutenção.

Protótipo: Termômetro digital

Vamos utilizar um projeto de um termômetro digital para demonstrar como embarcar um projeto com Arduino. Este termômetro utiliza um sensor LM35 para ler a temperatura e exibir o valor em um LCD.

LM35 é um sensor de precisão, que produz uma saída de 10 mV por grau Celsius, tem uma precisão de 0.5 °C e trabalha de 0°C a 100°C. Quando comparado a outros sensores, como termistores, é mais caro, porém seu uso é muito mais simples e mais preciso, sem necessidade de processamento ou hardware extras para melhorar a precisão.

Materiais Necessários
Circuito

O circuito do projeto termômetro digital, utilizando o Arduino, esta representado abaixo.

Termômetro digital com Arduino UNO

Código

O código do projeto está descrito abaixo. Utilizamos a biblioteca LiquidCrystal (nativa da arduino IDE) para a comunicação com o LCD.  A função setup é responsável por inicializar o LCD e escrever Temperatura na primeira linha do display e o símbolo de grau Celsius ao final da segunda linha (estas duas strings permanecem constantes durante todo o funcionamento do termômetro)..

Na função loop, chamamos a função read_temp que lê o sensor através do conversor AD e realiza a conversão de tensão para temperatura, o valor é escrito no LCD na segunda linha, alinhado à direita, logo antes do símbolo “°C”, com precisão de uma casa decimal (um número após a vírgula).

#include <LiquidCrystal.h>

// Entrada analógica do termômetro
const int termometro = A5;
// Pinagem do LCD
const int rs = 11, en = 12, d4 = 2, d5 = 3, d6 = 4, d7 = 5;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
    lcd.begin(16, 6);            // Inicializa LCD
    lcd.setCursor(0, 0);         // Posiciona cursor no início da primeira linha
    lcd.print("Temperatura");    // Escreve "Temperatura" no LCD
    lcd.setCursor(11, 1);        // Posiciona cursor ao final da segunda linha
    lcd.print(" \xDF");          // Escreve símbolo '°'
    lcd.print("C   ");           // Escreve caractere 'C'
}

void loop() {
    float t = read_temp();                // Lê a temperatura
    lcd.setCursor((t >= 100.0)?4:5, 1);   // Posiciona cursor no LCD, alinha conteúdo à direita
    lcd.print(t);                         // Escreve no LCD
    delay(600);                           // Aguarda 600 ms para próxima leitura
}

float read_temp() {
    // Le o termômetro e retorna a temperatura (considera um sensor LM35)
    float aread = 5.0 * (analogRead(termometro) / 1023.0);    //Le a tensão de 0 a 5V
    float temp = floor(1000.0 * aread)/10.0; // Converte para temperatura, com uma casa decimal
    return temp;
}
Protótipo em Funcionamento

O funcionamento do protótipo é demonstrado na imagem abaixo, o Arduino lê o sensor de temperatura (componente preto à direita) e escreve o valor, em graus Celsius, no display LCD. A temperatura mostrada corresponde ao valor informado pelo site weather, com uma margem de erro de 2 ºC.

Desenvolvimento do produto final

Para saber quais componentes do Arduino Uno são necessários no nosso projeto podemos dar uma olhada no esquemático do Arduino Uno Rev3.

Pode parecer um pouco confuso, mas se separarmos o circuito pela sua função, podemos dividir o Arduino em três partes:

  • Controle de alimentação: Responsável por garantir o correto nível de tensão necessário pelos componentes;
  • Comunicação: Realiza a ponte entre o USB do PC e a porta serial do microcontrolador principal;
  • Microcontrolador principal: Pode ser considerado o “coração” do Arduino Uno, é responsável por executar todas as funções que programamos.

Um microcontrolador é um pequeno computador cujos componentes (processador, memória RAM, memória ROM, …) e alguns periféricos (conversor A/D, GPIOs, gerador de PWM, ..) estão encapsulados em um único chip. No caso do Arduino Uno, o microcontrolador utilizado é o ATMEGA328P-PU. Quando programamos o Arduino, estamos na verdade, programando este microcontrolador.

No caso deste projeto, onde não há necessidade de comunicação com o PC, necessitamos apenas do microcontrolador e alguns poucos componentes que o chip necessita para funcionar.

Vale ressaltar que o ATMEGA328P-PU não possui uma porta USB nativa. Só somos capazes de comunicar o PC com o Arduino devido ao módulo de comunicação, que converte a saída serial do chip para a porta USB do PC. Se seu projeto requer comunicação com PC é recomendado utilizar outro microcontrolador. O microcontrolador do Arduino Leonardo, por exemplo, possui porta USB nativa, no entanto o processo de comunicação USB com o sistema operacional do PC pode ser uma tarefa complicada sem os drivers adequados.

Materiais Necessários
Circuito

O circuito equivalente ao projeto, utilizando o microcontrolador ao invés do Arduino, esta representado abaixo.

Repare que além do microcontrolador estamos utilizando um cristal de quartzo e alguns capacitores. O cristal de quartzo, junto com os capacitores cerâmicos, formam o circuito oscilador, que produz sinal de clock utilizado pelo processador do ATMEGA.

Como desejamos utilizar o mesmo código escrito para o Arduino, que utiliza funções dependentes de tempo (comunicação com LCD e delay), precisamos garantir que a base de tempo (o clock) é a mesma. Utilizamos um cristal de 16 MHz e dois capacitores de 22 pF pois estes são os valores utilizados no Arduino Uno.

No datasheet do ATMEGA é possível encontrar os valores de cristal suportados e os capacitores que devem ser utilizados. Apesar de haver um oscilador RC interno no microcontrolador, utilizamos um oscilador à cristal externo pois este é muito mais preciso.

Gravando o ATMEGA328P

Com o circuito pronto, precisamos gravar o nosso código no microcontrolador, para isso temos duas opções. A mais simples é simplesmente gravar o Arduino e então remover o microcontrolador do soquete, no entanto há alguns problemas com este método.

Primeiro, estamos inutilizando o Arduino, o microcontrolador é um dos principais componentes da placa e não pode operar sem ele. Não podemos simplesmente substituir o componente por outro, pois todo Arduino vem com um código pré-gravado chamado bootloader, este código é o que nos permite gravar nossos programas diretamente pelo PC, sem usar um gravador externo. Para mais informações acesse o post de Bootloader no Arduino.

A outra opção, mais recomendada e a que utilizaremos neste post, é utilizar um gravador ISP (In System Programmer), como o USBasp, para carregar o código. Desta forma podemos utilizar qualquer microcontrolador compatível, sem a necessidade do bootloader. Para mais informações acesse o post Gravador USBasp AVR com ATMega328P.

USBAsp

Lista de Materiais
Circuito

Certifique-se que o gravador e o chip estejam corretamente conectados antes de iniciar a gravação, o processo também exige o uso de um cristal oscilador (o mesmo utilizado anteriormente), junto aos capacitores, para que o chip possa se comunicar com o USBasp. Veja a imagem abaixo.

Circuito com microcontrolador para o projeto final

A posição dos pinos pode variar para diferentes modelos de gravadores, mas a nomenclatura é sempre a mesma. Na imagem acimas conectamos os fios do MOSI (Amarelo), MISO (Azul), SCK (Verde), RESET (Laranja), VCC (Vermelho) e GND (Preto) do gravador ao microcontrolador.

Programando o Atmega328P para o projeto final

Gravação

É possível utilizar a própria Arduino IDE para gravar através do USBasp, para isso vá em Ferramentas e em Programador selecione USBasp.

Escolhendo o programador para o projeto final

E então em Sketch clique em Carregar usando programador. Não utilize o botão de carregar o programa, pois o mesmo tentará utilizar a porta serial (o que requer o bootloader).

Programando o ATMega para o projeto final

Projeto em execução

O funcionamento do projeto é demonstrado na imagem abaixo.  Devido à pinagem do LCD utilizado, modifiquei as portas digitais usadas pelo LCD para facilitar as conexões, o restante do código, no entanto, permanece o mesmo.

Repare que o projeto funciona da mesma forma que o protótipo, lendo o sensor de temperatura (à esquerda) e escrevendo o valor, em graus Celsius no LCD, porém utiliza apenas o microcontrolador ao invés do Arduino. Novamente o valor medido corresponde ao valor informado pelo site weater, com uma margem de erro de 2 °C.

Projeto final, dessa vez sem Arduino

Próximos passos

Agora que removemos o arduino ainda há um elemento que nos impossibilita de utilizar o circuito em um projeto final, a protoboard. Como o próprio nome diz (protoboard, ou placa de prototipação), ela é destinada ao desenvolvimento de protótipos, apesar de facilitar as conexões, as mesmas não são robustas, podendo se soltar facilmente e existem muita capacitância e resistência parasita em seus contatos, isso pode causas mau funcionamento em alguns projetos. Podemos melhorar o projeto utilizando tanto uma placa universal quanto uma placa de circuito impresso.

Para mais informações acesse os posts Como fazer uma placa de circuito impresso de forma caseira e Como soldar componentes eletrônicos.

Considerações sobre microcontroladores

Neste post utilizamos o microcontrolador ATMEGA328P pois queríamos manter o projeto compatível com o Arduino Uno. No entanto, dependendo do projeto a ser desenvolvido, outros microcontroladores podem ser mais adequados.

Para projeto que requer comunicação USB, como um teclado por exemplo, o ATMEGA328P não é adequado, pois o mesmo tem apenas uma porta serial e não uma porta USB. Ainda poderíamos utilizar este chip se adicionarmos um conversor serial USB no projeto, mas a adição deste componente pode ser um aumento desnecessários nos custos do projeto, quando existem microcontroladores alternativos com porta USB nativa.

Quando tiver que escolher um microcontrolador para seu projeto, faça um levantamento dos recursos que necessita. É necessário um conversor A/D? Precisa de mais, ou menos portas digitais? Precisa de mais memória? Um processador mais rápido? Lembre-se que em projetos feitos em quantidade, como os vendidos comercialmente, a questão econômica é extremamente relevante, não escolha simplesmente aquele mais caro ou com mais recursos, mas o que melhor se adequa ao seu projeto, assim você pode desenvolver um projeto final com Arduino com qualidade.

O Arduino é um ótimo ponto de partida, mas se você tem interesse no mundo da eletrônica, recomendo que tente se aventurar com outros microcontroladores.

Uma solução alternativa

Se você achar que o processo de embarcar um projeto com Arduino é muito complicado, ou não quiser ter tanto trabalho, uma solução mais simples é o uso de um Arduino Nano.

O Arduino Nano é equivalente ao Arduino Uno, no entanto é mais compacto, tem um custo menor, e pode ser facilmente inserido em um projeto final. É possível soldar conexões em seus terminais, ou inseri-lo em um soquete de forma a permitir uma conexão fácil e robusta com o restante do projeto.

Gostou de aprender a desenvolver um projeto final com Arduino? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

6 Comentários

  1. olá, boa tarde! estou desenvolvendo um projeto de TCC que usa esses componentes, e em todas as programações que eu usei a temperatura não para de variar, inclusive com a sua, mas não é uma variação pequena, as vezes ele cai pra zero e sobe ate uns 45 graus, oque poderia ser? o sensor? a programação? inclusive, estou usando um display lcd 8×2 não sei se isso interfere também

    1. Boa tarde, você está utilizando o mesmo sensor LM35? Este é um sensor de precisão e a variação que descreveu pode indicar que o sensor está danificado. Antes de trocar o sensor eu verificaria também os fios e o próprio conversor AD do microcontrolador.

  2. Caro Matheus,
    Sou médico e estou me aposentando, pretendo entretanto me manter ativo. Estou pensando seriamente em cultivar peixes em sistema de bioflocos. Esse sistema é altamente dependente de controles por 24 horas ininterruptas. Precisarei controlar sensores, motores trifásicos, válvulas solenóides e, principalmente preciso ser avisado em caso de problema e sistemas de backup. O sistema, se falhar, pode me causar muitos prejuízos. Tenho que montar um sistema, tipo PLC robusto. O que me recomenda pois estou pouco além de conseguir fazer um LED piscar com um arduino simulado?
    Abraço

    1. Dr. Aquiles bom dia. Meu nome é Sergio e vi o seu post e penso que possa ajuda-lo. No caso, é necessário todo um estudo das entradas e saídas do seu sistema de criação de peixes, levantar todas as variáveis previamente a fim de escolher qual seria o microcontrolador mais adequado, como também, analisar se haverá necessidade de desenvolver circuitos coadjuvantes, como placas de potência afim de acionar cargas mais altas e etc… É necessário, portanto, ter toda uma analise prévia antes de uma indicação.

  3. Excelente trabalho. Sucesso na carreira.

  4. Muito show seu post. Parabéns!