Para os projetistas de embarcados, makers ou estudantes, uma pergunta bastante natural que já pode ter ocorrido seria a respeito de uma possível integração da placa Arduino UNO (microcontrolador AVR Atmega328P) e o Raspberry Pi, seja em sua versão 1, 2 ou 3. Muitos podem pensar que uma possível integração seria uma redundância de hardware embarcado ou desperdício de recursos, visto que é possível a programação e desenvolvimento de projetos utilizando Python e a GPIO do Raspberry Pi exclusivamente, sem a necessidade de um microcontrolador. Opiniões favoráveis ou contrárias possuem bons argumentos (sobre a viabilidade ou não), porem juntar as duas ferramentas makers (Arduino e Raspberry Pi) mais poderosas pode ser mais vantajosa do que você imagina.
Uma possível integração entre as plataformas já conhecida, e que pode ser realizada, é através da comunicação serial (pinos RX e TX de ambas plataformas). O que usualmente não é realizado pelos makers e projetistas é uma comunicação via protocolos SPI ou I2C. Pode parecer mais complicado em primeiro momento, mas os protocolos SPI e I2C transmitem de maneira eficiente e rápida dados de forma serial. Protocolos de comunicação a parte, qual seria a grande vantagem então da interconexão das duas placas (plataformas)?
O Raspberry Pi possui 40 pinos digitais (nos modelos zero, 2 ou 3), I/O, e em muitas aplicações a falta de portas analógicas torna-se um problema critico. Uma possível solução seria o uso de conversores analógicos digitais (ADC) utilizando protocolos SPI ou I2C (usando o CI MCP3008). Infelizmente, para adquirir circuitos integrados ADC no Brasil pode-se tornar uma tarefa difícil e não muito viável economicamente. Assim, o uso de um microcontrolador AVR, como o Atmega328P, para realizar o processo de conversão analógico digital e posteriormente mandar a informação via protocolo SPI para o Raspberry Pi, pode ser vantajoso. Além do fato de incluirmos todas as outras funções de um microcontrolador AVR.
Neste tutorial a programação de microcontrolador AVR (Atmega328P) utilizando a IDE do Arduino modificada para Raspberry Pi é mostrada como possível solução para integração das plataformas. Posteriormente, em outro tutorial irei mostrar comunicação via protocolos entre as duas plataformas.
Programando um Atmega328P com IDE do Arduino modificada no Raspberry
O material necessário para este tutorial é:
- Circuito integrado Atmega 328P (o mesmo do Arduino UNO, com bootloader);
- 01 Cristal oscilador de 16MHz e 02 capacitores cerâmicos de 22pF;
- 01 resistor de 10k;
- 01 LED (opcional);
- Raspberry Pi conectado oa cabo ethernet.
Vamos dividir o tutorial em três partes: montagem do circuito standalone, ligação entre Raspberry Pi e Atmega328P e instalação da IDE modificada e teste.
Parte 1: Montando o circuito Arduino standalone
A primeira parte deste tutorial pode ser bem simples para alguns makers já acostumados com o circuito Arduino standalone, circuito composto por Atmega328P em uma protoboard com o menor número de componentes possíveis. Assim, siga as instruções da imagem abaixo para montagem do circuito. Você também pode usar qualquer circuito standalone em uma placa de circuito (PCB).
Ressaltando que o jumper em vermelho na Figura 1 do esquemático se refere ao Vcc (+5 ou 3.3V) e o preto o terra (GND). Para testar se o circuito standalone esta funcionamento corretamente, recomendo programar com a placa Arduino UNO o Atmega328P o código exemplo blink e montar o circuito standalone (removendo após programar o chip Atmega328P da placa Arduino UNO, ou compatível). Para verificar o funcionamento, adicione um LED no pino 19 do microcontrolador (porta digital 13 com a interface Arduino) e verifique se o mesmo está piscando (cuidado para não adicionar o LED com polarização errada!).
Com o circuito standalone funcionando corretamente, vamos realizar a ligação dos fios entre Atmega328P e Raspberry Pi.
Parte 2: Realizando as ligações entre Atmega328P e Raspberry Pi
Nesta parte do tutorial, você precisará conectar alguns pinos do GPIO do seu Raspberry Pi aos pinos do microcontrolador Atmega328P. Antes de tudo, ressaltando que é importante a alimentação do Atmega328P com +3.3V. Esta limitação na tensão de alimentação deve-se ao fato de que os pinos digitais do RPi trabalharem em 3.3V.
Tabela 1 – Correspondência para ligação entre RPi e Atmega328P
|
GPIO Raspberry Pi |
Pino do Atmega328P |
|
Pino 24 (SPI0_CE0) |
Pino 01 (RST) |
|
Pino 23 (SPI0_SCLK) |
Pino 19 (SCLK) |
|
Pino 21 (SPI0_MISO) |
Pino 18 (MISO) |
|
Pino 19 (SPI0_MOSI) |
Pino 17 (MOSI) |
|
Pino 01 (+3.3V) Pino 39 (GND) |
Pino 7 e 20 Pino 8 e 22 |
O guia para o GPIO do Raspberry Pi (2 e 3) esta ilustrado na Figura 2.
Caso você utilize este tutorial com o seu Raspberry Pi 1, favor desconsiderar a Figura 2 e a tabela 1. Assim, baseado no GPIO da Figura 3 e os nomes dos pinos (SPI0_MOSI etc) a conexão pode ser realizada.
Uma pequena ilustração de como pode ficar a conexão do seu Raspberry para o circuito com o Atmega328P pode ser vista na Figura 4.
Com a ligação entre Atmega328P e placa Raspberry Pi realizada podemos partir para última etapa do tutorial, a instalação da IDE modificada para programação direto via GPIO.
Parte 3: Instalação da IDE modificada para programação via GPIO
A última etapa do tutorial pode ser vista como apenas a instalação da IDE modificada que permite a programação direto via GPIO do Raspberry Pi. A IDE modificada foi desenvolvida pelo site Gordon Projects e permite a programar direto, sem a necessidade de um cabo USB.
01) Instale a IDE do Arduino no seu Raspberry Pi (caso você não tenha). Para esta etapa vá no terminal do Raspbian e digite:
>> sudo apt-get install arduino
02) Instale a IDE modificada do Gordon Projects. No terminal do Raspberry Pi e digite:
>> cd /tmp >> wget https://project-downloads.drogon.net/gertboard/avrdude_5.10-4_armhf.deb >> sudo dpkg -i avrdude_5.10-4_armhf.deb >> sudo chmod 4755 /usr/bin/avrdude
Posteriormente, após o término da execução:
>> cd /tmp >> wget https://project-downloads.drogon.net/gertboard/setup.sh
E rode o script:
>> chmod +x setup.sh >> sudo ./setup.sh
Apos a exibição de uma mensagem feito da Figura 7, você deve executar o reboot da placa:
>> sudo reboot
Pronto! Agora você instalou a IDE modificada do Gordon Projects. O próximo passo fica a cargo da programação de um código para o Atemga328P pela GPIO.
Observação: Se no momento em que você tentar realizar o download dos dois arquivos do site projects.gordon.net e o mesmos estiverem fora do ar ou ocorrer algum erro, baixe os arquivos disponíveis no final do artigo. Você deve colocar eles na pasta /tmp do RPi e realizar a instalação como este tutorial.
03) Verifique a conexa do Atmega328P com o RPi. No terminal, verifique se o Atmega328P esta conectado digitando:
>> avrsetup
Caso tudo esteja certo você deverá ver uma mensagem igual à da Figura 8 (selecione Atmega328P), caso contrário verifique a conexão entre os pinos do Atmega328P e a GPIO da Raspberry Pi.
04) Para programar o Atmega328P, abra a IDE do Arduino e selecione Gertboard with Atmega328 como placa a ser programada.
Para a escolha do programador, escolha Raspberry Pi GPIO (vide Figura 10).
Pronto! Agora esta tudo configurado para você programar seu Atmega328P via GPIO do Raspberry Pi. Em um próximo tutorial explicarei a conexão entre Atmega328P e a Raspberry Pi via protocolos SPI e I2C para o melhor aproveitamento da interconexão das duas plataformas makers mais populares.
Download
Os arquivos usados para esse post podem ser baixados aqui.
Referências


















