Como fazer um Arduino Standalone

Já pensou em desenvolver o seu próprio Arduino? Aprenda nesse tutorial como fazer um Arduino Standalone com comunicação serial para enviar seus firmwares direto no protoboard!

Arduino Standalone

Arduino é uma plataforma open-hardware conhecida mundialmente pela sua simplicidade, utilizada para protótipos, ensino de eletrônica e robótica nas escolas e universidades. Existem diversos modelos de Arduino, como por exemplo o Uno, Mega, Pro Mini, Nano, Leonardo e Due, porém para este tutorial será abordado o Arduino Uno e seu microcontrolador Atmega328p.

O modelo Atmega328p é um microcontrolador AVR low-power CMOS de 8 bits produzido pela Atmel, opera na tensão 5V, possui 32KB de memória flash, sendo 0,5KB reservado no fim da memória (Boot Flash Section) para o bootloader, uma EEPROM de 1KB e SRAM de 2KB como demonstra a imagem abaixo, no geral contém 28 pinos e três tipos de comunicações, possuindo 1 USART, 2 SPI e 1 I2C.

Mapeamento das memórias do Atmega328p.
Mapeamento das memórias do Atmega328p.

O microcontrolador tem em sua base a arquitetura Harvard ou conhecido como RISC (Reduced Instruction Set Computer), na qual as memórias são separadas para as instruções do firmware. As instruções escritas na memória são executadas com a técnica Pipeline, ou seja, enquanto uma instrução do programa está sendo executada, a próxima está sendo pré-extraída, e isso podemos observar na prática forçando um delay no Pipeline. Segundo o datasheet do Atmega328p, ele executa as instruções em um ciclo de clock, chegando a 1MIPS/MHz,

Pinagem do Atmega328p - Datasheet Atmel
Pinagem do Atmega328p - Datasheet Atmel

Se interessou? Neste tutorial você irá montar o seu próprio Arduino, que chamamos de Standalone, a chave para o sucesso é a atenção aos detalhes e dedicação ao projeto. É recomendado um conhecimento na plataforma Arduino, e eletrônica básica para compreender os componentes e suas funcionalidades, como também trabalhar com o ferro de solda.

Se você já possui uma experiência na área de embarcados, recomendamos que dê uma olhada no nosso artigo de como fazer um Arduino Standalone Avançado para projetos mais robustos.

Materiais

Para montar um Arduino Standalone da forma mais simples precisamos de componentes eletrônicos comuns e de alguns módulos para auxiliar na montagem. Prepare a caneta e o papel para anotar os seguintes materiais necessários. Dica importante: Reutilize componentes eletrônicos de placas de sucata e sempre realize testes com um multímetro ou um testador universal de componentes eletrônicos antes de utiliza-los, isso ajuda na falta de alguns componentes.

  • 1 Microcontrolador Atmel Atmega328p sem bootloader
  • 1 Cristal de 16 MHz
  • 2 Capacitores cerâmicos de 22 pF, de preferência NPO
  • 3 Capacitores poliéster de 100 nF ou 0.1 uF
  • 1 Chave push button N/O de 2 pinos ou 4 pinos
  • 1 Resistor de 10 Kohms
  • 1 Resistor de 220 ohms
  • 1 Protoboard 400 ou 830 furos
  • Cabos jumper Macho - Macho e Macho - Fêmea
  • 1 Módulo de fonte para protoboard (5V e 3.3V)
  • 1 Módulo conversor USB Serial Ch340/Ch340g
  • 1 Fonte de 9V ou cabo USB
  • 1 LED
  • 1 Arduino Uno com cabo USB

Dicas de montagem

Com esses materiais em mãos podemos começar a montagem do Arduino Standalone, Primeiramente pegue o protoboard e encaixe o Atmega328p. Defina as pinagens do Atmega e dos módulos seguindo o esquema abaixo.

Esquema Arduino Standalone
Esquema Arduino Standalone

Clique na imagem para ampliar

No pino 1 será colocado o resistor de 10 Kohms no 5V, um capacitor poliéster de 100 nF ou 0.1 uF e a chave push button no GND para realizar o reset.

A notação VCC e AVCC significa tensão positiva do circuito integrado, ou seja, os pinos 7 e 20 são ligados ao 5V e por fim os pinos 8 e 22 ao GND.

Para um melhor funcionamento do microcontrolador, adicionamos os dois capacitores poliéster de 100 nF ou 0.1 uF com a função de desacoplamento, com o objetivo de evitar ruídos da rede elétrica circulando na nossa montagem, para isso ligue um capacitor no pino 7 do Atmega levando para o GND do protoboard e o outro capacitor no pino 20 para o GND também.

Os pinos 9 e 10 são ligados no cristal de 16 MHz, e em cada pino coloque um capacitor cerâmico de 22 pF NPO, que são responsáveis em oscilar a frequência do clock. É possível utilizar o Atmega puro e suas funções sem um cristal externo, pois internamente este microcontrolador possui um clock de 8 MHz. Mas no momento em que será gravado o bootloader no modo Arduino ISP (In-circuit Serial Programmer) é setado uma variável para utilizar um clock de 16 MHz, por este motivo recomendamos que utilize um cristal e seus capacitores para obter um resultado satisfatório.

Para o Atmega transmitir e receber dados via USB do computador precisamos de um conversor Serial (não confunda a USB do módulo de fonte, ele só fornece alimentação), para isso pegue o Módulo USB Serial e cabos jumper Macho - Fêmea e conecte no RX, TX e GND. Os pinos 2 e 3 do Atmega são responsáveis pela comunicação, então conecte o cabo TX no RX, RX no TX e GND no GND do protoboard. Atenção: Deixe plugado o jumper amarelo do módulo no VCC e 5V, pois será alimentado pela entrada USB do computador.

Depois de conectar os cabos no módulo, é importante realizar uma comunicação serial que possa enviar os firmwares via USB de forma efetiva, para isso é necessário fazer uma pequena modificação neste modelo de módulo USB Serial, pois a quantidade de pinos que ele oferece é insuficiente para esta função, felizmente ele utiliza o chip Ch340 (utilizado no Arduino Uno e Nano Chinês - Atmega328p TQFP) que possuí todas as pinagens requeridas para uma comunicação serial completa, existem outras alternativas no mercado que não precisam fazer esta modificação.

Para realizar a modificação retire com cuidado a membrana de plástico do módulo com um estilete, pegue um cabo jumper e corte uma das pontas, solde no pino 13 do Ch340 que realizará a função de saída DTR (UART Data Terminal Ready), muito cuidado para não soldar outros pinos! Se tiver dúvidas consulte o datasheet do Ch340g. Por fim isole o módulo novamente com uma fita isolante para não quebrar o fio soldado, conecte o cabo DTR no capacitor poliéster de 100 nF ou 0.1 uF que está ligado no pino 1, onde auxiliará no tempo exato de reset do Atmega.

Clique na imagem para ampliar

Se você estiver utilizando o módulo de fonte, observe as linhas azuis que significam negativo -5V; GND e vermelhas que significam positivo +5V do protoboard, encaixe o módulo seguindo estas linhas. Para este projeto deixe os dois jumpers amarelos setados no 5V. Conforme as especificações técnicas oficiais do Arduino Uno, é recomendado uma tensão de entrada entre 7 à 12V, sendo o limite de 6 à 20V, seguindo essas especificações utilizamos uma fonte de 9V.

Não ligue ainda a fonte de 9V na tomada ou cabo USB de alimentação no computador.

Positivo e negativo do módulo conforme as linhas e cores protoboard
Positivo e negativo do módulo conforme as linhas e cores do protoboard

Gravando o Bootloader

O Atmega328p sem o seu inicializador ou bootloader não suporta as bibliotecas do Arduino, como por exemplo pinMode(9, OUTPUT), digitalWrite(9, HIGH) ou Serial.begin(9600), o microcontrolador puro só interpreta os registradores internos e não realiza a comunicação serial, que consequentemente os códigos não serão gravados via USB, sendo necessário um gravador universal e o trabalho de retirar toda vez o microcontrolador do protoboard. Para os curiosos que possuem um gravador, instale a IDE Atmel Studio e programe utilizando somente os registradores, é um ótimo aprendizado em bitwise.

Não há segredos para gravar um bootloader no Atmega328p puro, a própria IDE oficial do Arduino oferece o código e a pinagem necessária para realizar esta tarefa, veja a conexão dos cabos para o modo ISP como mostra a imagem abaixo:

Observação: verifique as ligações dos cabos e do módulo de fonte com os desenhos de positivo e negativo do protoboard antes de ligar.

Esquema Arduino Bootloader
Esquema Arduino Bootloader

Como podemos visualizar na pinagem do Atmega328p oferecida pelo datasheet, os pinos utilizados para o modo ISP são: pino 19 SCK, pino 18 MISO e pino 17 MOSI. O pino 10 do Arduino é ligado no reset do Atmega puro e por fim ligamos o GND do Arduino no GND do protoboard para fechar o circuito, pois estamos trabalhando com a corrente contínua.

Arduino UNO em modo ISP para gravar o bootloader no Atmega328p em branco.
Arduino UNO em modo ISP para gravar o bootloader no Atmega328p puro.
  • Depois das conexões dos cabos, conecte o Arduino Uno em seu computador
  • Ligue o modulo de fonte na energia.
  • Abra a IDE do Arduino, versão utilizada 1.8.3.
  • Na aba <Ferramentas - Placa:"Arduino/Genuino Uno" - Porta (Sua Porta)>
  • Na aba <Arquivo - Exemplos - 11.ArduinoISP>
  • Com o código do ArduinoISP aberto, carregue/envie para o Arduino Uno.
  • Na aba <Ferramentas - Programador: "Arduino as ISP" - Gravar Bootloader>

Se a compilação for finalizada corretamente, o bootloader foi gravado com sucesso, agora é possível programar firmwares para o Atmega328p utilizando as bibliotecas do Arduino e o mais legal, envia-los sem retirar do protoboard!

Testando o Arduino Standalone

Retire os cabos do modo ISP e volte para a configuração original. Antes de testar é necessário instalar o Driver do CH340g, disponíveis para sistemas Windows 86x e 64x. Para instalar corretamente, o módulo deve estar conectado na porta USB do computador. Depois verifique no gerenciador de dispositivos do Windows qual a porta serial (COM) o módulo foi instalado. Se você já utilizou um Arduino Uno Chinês que utiliza o CH340g, provavelmente o driver estará instalado em seu computador.

Para testar o Arduino Standalone conecte um LED em modo current source com um resistor limitador de corrente de 220 ohms na porta 15 do Atmega (Registrador PB1) ou como referencia a porta 9 do Arduino Uno, como demonstra a imagem abaixo.

Esquema Arduino Standalone com LED e resistor
Esquema Arduino Standalone com LED e resistor
Arduino Standalone enviando firmwares direto no protoboard com o módulo serial/USB conectado no computador.
Arduino Standalone enviando firmwares direto no protoboard com o módulo serial/USB conectado no computador.

Abra e configure a IDE como um Arduino Uno e a porta COM correspondente ao módulo USB Serial, ligue a fonte de 9V na tomada ou com um cabo USB no computador, compile e carregue/envie este código para piscar um LED ao seu Arduino Standalone e veja o resultado.

/*
 * Testando o Arduino Standalone by TecDicas
 * Código para acender e apagar um LED
 * Pino 15 - Registrador PB1
 * 24/10/2017
 */
#define led 9

void setup()
{
  pinMode(led, OUTPUT); // Led na porta 9 definido como Saída
}
void loop()
{
  digitalWrite(led, HIGH); // Liga  
  delay(30);                  
  digitalWrite(led, LOW);  // Desliga
  delay(30);                 
}

Que tal um teste mais avançado? Este código faz o LED na porta PB1 do Atmega piscar com a lógica XOR (OU Exclusivo) acessando diretamente aos registradores do microcontrolador.

/*
 * Testando o Arduino Standalone by TecDicas
 * Código para acender e apagar um LED com a lógica XOR
 * Pino 15 - Registrador PB1
 * 24/10/2017
 */
void setup()
{  
  DDRB = DDRB | (1<<1); // Porta PB1 definida como OUTPUT
  // DDRB |= (1 << DDB1) // Outra forma de setar a porta PB1 como OUTPUT
}

void loop()
{
  /* Lógica do XOR
  * PORTB = PORTB ^ (1<<1);
  * 1 = 1 ^ 1 = 0
  * 0 = 0 ^ 1 = 1
  */
  PORTB = PORTB ^ (1<<1);
  delay(30);
}

Assista o video do Arduino Standalone montado pelo Tec Dicas funcionando. 

Diga nos comentários a sua experiência em desenvolver o seu próprio Arduino Standalone ou tire suas dúvidas!                   

Se inscreva no canal do YouTube para mais conteúdo de eletrônica digital e embarcados!


Comentários



Voltar ao topo
Aguarde..