ÍNDICE DE CONTEÚDO
Introdução
A eletrônica maker popularizou o uso de placas expansoras, geralmente conhecidas como shields. Na área de prototipação eletrônica, eles tornaram possível o desenvolvimento de projetos rápidos, por vezes utilizados até mesmo para uso em provas de conceitos. Houve então a necessidade de robustez em muitos projetos, e isso levou ao surgimento de shields mais adequados a ambientes mais exigentes.
Os Nanoshields são um sistema de eletrônica modular que podem ser utilizados para prototipagem rápida de um produto. Utilizando-os teremos como vantagem a eliminação de fios e a minimização de tarefas como soldas e fixação de componentes, além de tornarmos o projeto mais elegante, compacto e robusto.
Neste artigo iremos realizar uma simples demonstração do uso de um nanoshield com um relé integrado conectado à placa base Aster da Toradex, e chavearemos o relé através de uma GPIO do computador em módulo Colibri iMX6, também da Toradex.
Setup
A configuração de hardware utilizada neste artigo é o computador em módulo Colibri iMX6 DL IT + Aster Carrier Board junto com o Módulo Base Board + Módulo de Relay da Circuitar. A Aster foi escolhida por possuir headers pino-compatíveis com Arduino e, consequentemente, com os nanoshields. Veja nos GIFs abaixo a montagem do conjunto:
Pode ser visto acima a facilidade em montar um setup básico para prototipagem. Agora iremos conectar uma lâmpada 110V no conector NA do relé.
Software
Primeiro teremos que alterar a Device Tree para mudar a configuração de um pino do SODIMM.
Escolhendo o pino digital D5 para acionar o relé, temos com base no datasheet da Aster que este corresponde ao pino SODIMM 28 do nosso computador em módulo. Após verificar no datasheet do Colibri i.MX6 a qual GPIO este pino é associado, basta consultar este artigo para encontrar o número da GPIO no sistema de arquivos. No nosso caso é o número 9, guarde-o pois será utilizado futuramente para chavear a lâmpada.
Para iniciar as alterações, vamos clonar o repositório que contém o código fonte do Colibri i.MX6 do git da Toradex:
1 |
git clone -b toradex_4.1-2.0.x-imx git://git.toradex.com/linux-toradex.git |
Primeiro devemos acessar o arquivo “imx6dl-pinfunc.h” em “linux-toradex/arch/arm/boot/dts/” e procurar por “GPIO1_IO09” para obter o nome do pino na Device Tree e qual PWM ele utiliza:
1 2 |
#define MX6QDL_PAD_GPIO_9__PWM1_OUT 0x240 0x610 0x000 0x4 0x0 #define MX6QDL_PAD_GPIO_9__GPIO1_IO09 0x240 0x610 0x000 0x5 0x0 |
Sabendo que o PWM1 está sendo utilizando, vamos então desabilita-lo no arquivo “imx6dl-colibri-eval-v3.dts” no diretório “linux-toradex/arch/arm/boot/dts/” conforme abaixo:
1 2 3 |
&pwm1 { status = "disabled"; }; |
Adicionaremos a função de GPIO, conforme encontrado acima, no nó “pinctrl_gpio_1: gpio-1” no arquivo “imx6qdl-colibri.dtsi” em “linux-toradex/arch/arm/boot/dts/” conforme abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
gpio { pinctrl_gpio_1: gpio-1 { fsl,pins = < MX6QDL_PAD_EIM_D27__GPIO3_IO27 PAD_CTRL_HYS_PU MX6QDL_PAD_NANDF_D6__GPIO2_IO06 PAD_CTRL_HYS_PU MX6QDL_PAD_NANDF_D3__GPIO2_IO03 PAD_CTRL_HYS_PU MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23 PAD_CTRL_HYS_PU MX6QDL_PAD_DI0_PIN4__GPIO4_IO20 PAD_CTRL_HYS_PU MX6QDL_PAD_SD4_DAT3__GPIO2_IO11 PAD_CTRL_HYS_PU MX6QDL_PAD_NANDF_D4__GPIO2_IO04 PAD_CTRL_HYS_PU MX6QDL_PAD_SD4_DAT0__GPIO2_IO08 PAD_CTRL_HYS_PU MX6QDL_PAD_GPIO_9__GPIO1_IO09 PAD_CTRL_HYS_PU >; }; |
Para compilar a nova Device Tree e o novo Kernel será necessário baixar uma toolchain, exportar algumas variáveis de ambiente e realizar os comandos make para compilar. Para mais informações desse processo, acessar este artigo. Após compilar, será gerado um arquivo chamado “uImage”, referente ao kernel, e outro chamado “imx6dl-colibri-eval-v3.dtb”, referente à Device Tree.
O próximo passo é gerar um cartão SD com uma imagem padrão da Toradex. Para isso basta baixar a imagem mais recente deste site referente ao seu módulo e atualizar o módulo utilizando o shellscript “update.sh” presente dentro das imagens. Para mais informações sobre esse passo, acessar o artigo referente ao módulo que está utilizando. No nosso caso, estaremos utilizando este, pois o mesmo fala sobre o Colibri iMX6.
Após o cartão SD ser gerado, basta substituir os arquivos compilados com os arquivos gerados. No meu caso, utilizei os seguintes comandos:
1 2 |
sudo cp ~/linux-toradex/arch/arm/boot/dts/imx6dl-colibri-eval-v3.dtb /media/daniel/DATA/colibri_imx6/imx6dl-colibri-eval-v3.dtb sudo cp ~/linux-toradex/arch/arm/boot/uImage /media/daniel/DATA/colibri_imx6/uImage |
Iremos então inserir o cartão SD na placa base Aster, alimentá-la e pressionar qualquer tecla para parar o U-Boot, então executaremos os seguintes comandos para atualizar o módulo por completo:
1 2 |
run setupdate run update |
Caso tenha dúvidas em relação ao passo acima, informações mais detalhadas encontram-se aqui.
Testando o funcionamento
Algo interessante de se saber é que no Linux basicamente tudo é arquivo. Para GPIO isso não é diferente, então para chavearmos o relé iremos basicamente escrever em alguns arquivos da seguinte forma.
Escreveremos o número da GPIO selecionada no arquivo “export” no diretório “/sys/class/gpio/”:
1 |
echo 9 > /sys/class/gpio/export |
Configuraremos agora a GPIO como uma saída escrevendo no arquivo “direction” no diretório “/sys/class/gpio/gpio9/”:
1 |
echo "out" > /sys/class/gpio/gpio9/direction |
Chavearemos o relé escrevendo os níveis lógicos 1 e 0 no arquivo “value” no diretório “/sys/class/gpio/gpio9/”:
1 2 |
echo 1 > /sys/class/gpio/gpio9/value echo 0 > /sys/class/gpio/gpio9/value |
Abaixo um vídeo de demonstração do funcionamento:
Conclusão
Como pode ser visto, a facilidade na montagem do hardware realmente é bem alta, além de ganhar muito tempo não soldando e colocando cabos. O produto em si fica bem compacto e bonito. A Circuitar disponibiliza diversos outros módulos mais complexos e que facilitam muito a prototipagem. É interessante dizer que para quem tem interesse em aprender, pode utilizar os mesmos módulos com um Arduino por causa da pino compatibilidade.
A única parte que requer bastante conhecimento é em relação ao software em si. A configuração da Device Tree é um pouco complexa, dependendo dos periféricos utilizados isso vai requerer bibliotecas e drivers específicos. A maioria dos projetos de Linux embarcado requer este conhecimento, mas após um estudo sobre o assunto, as configurações acabam se tornando fáceis e o conhecimento adquirido será de ótima ajuda no mundo de sistemas embarcados.
Saiba mais
Editorial: Movimento Maker no Brasil, seu impacto para sistemas eletrônicos
Totenboard – Shield Open Hardware para o kit STM32F0Discovery
Raspberry Pi – Comunicação Serial (UART) entre a Raspberry Pi e Arduino em Python e Wiring
Eu sou fã dos nanoshields, sempre que posso uso em meus projetos.
Muito legal o artigo Daniel! Bem prático. Interessante é que o desenvolvedor pode, posteriormente, se basear nas plataformas open hardware, no caso a Aster e o módulo relé, e desenvolver sua própria placa base customizada.