OPEN SOURCE AUTOMOTIVE COMPUTING WITH RASPBERRY PI AND ARDUINO
REGISTRO DOI: 10.69849/revistaft/ra10202411291014
Thiago Henrique Constantino 1
Felipe Diniz Dallilo 2
João Henrique Gião Borges 3
Resumo: Este artigo tem o objetivo de desenvolver um protótipo de computador de bordo automotivo. Foram utilizadas as linguagens de programação Python e C++ e o sistema operacional Raspbian como ambiente de operação do protótipo. O protótipo visa controlar os atuadores presentes em um carro, como o motor de partida, faróis e buzina; também será possível realizar a leitura de sensores, como o RPM do motor, verificar o nível da temperatura e do combustível. Este protótipo pode ser instalado em carros antigos para agregar tecnologia ou mesmo em carros modernos para customização. A motivação do desenvolvimento surge para unir a tecnologia de automação open source com a elétrica e eletrônica embarcada nos automóveis, possibilitando a customização por parte do usuário.
Palavras-chave: Computação Automotiva. Computador de Bordo. Automação. Python. C++. SQL. Linux. Raspberry Pi. Arduino. Comunicação Serial.
Abstract: This article aims to develop a prototype of an automotive onboard computer. Python and C++ programming languages and the Raspbian operating system were used as the prototype operating environment. The prototype aims to control the actuators present in a car, such as the starter engine, headlights and horn; it will also be possible to perform the reading of sensors, such as the RPM of the engine, check the temperature and fuel level. This prototype can be installed in old cars to add technology or even in modern cars for customization. The motivation of the development arises to unite the open source automation technology with the electrical and electronics embedded in automobiles, enabling customization by the user.
Keywords: Automotive Computing. Onboard Computer. Automation. Python. C++. SQL. Linux. Raspberry Pi. Arduino. Serial Communication.
1 INTRODUÇÃO
Nos últimos anos, o cenário automotivo tem passado por mudanças profundas, à medida que tecnologias de comunicação e segurança se tornaram uma parte essencial da interação entre homem e máquina. A Fueltech, uma empresa dedicada a desenvolver injeções eletrônicas para motores, possui uma linha de computadores de bordo semelhante ao projeto adotado neste artigo. A crescente procura por tecnologias do tipo se dá especialmente por entusiastas do meio automotivo e por pessoas que desejam customizar seus automóveis.
A flexibilidade e a versatilidade do uso de um computador de bordo programável são um investimento indispensável para diversas categorias de corridas automobilísticas, desde pequenas modalidades até grandes organizações globais. Seu correto uso pode trazer grandes resultados de performance e segurança, além de garantir todo o histórico de funcionamento do conjunto, o que é essencial para melhorar a calibração e ajustes finos.
A automação de processos em um veículo executada por uma ECU (Engine Control Unit) ou mesmo no computador de bordo, garante respostas rápidas e precisas aos usuários e melhora a eficiência do sistema em que estão presentes. A possibilidade de customizar os computadores de bordo está aumentando conforme o ganho de tecnologia nesse meio, pois proporciona uma experiência diferenciada ao usuário, possibilitando a melhor supervisão do funcionamento do conjunto.
Antes do surgimento dos sistemas eletrônicos de alto nível, a supervisão dos sensores por meio do painel de instrumentos era feita de forma manual, através de luzes ou mesmo sinais sonoros, sendo comum o mau funcionamento ou descuido por parte dos usuários. Com a frequente evolução em sistemas embarcados, já está em prática o uso de tecnologia de automação para evitar problemas, como, por exemplo, o acionamento dos freios a partir de um sinal emitido pelos sensores de estacionamento, evitando uma colisão indesejada. Avisos de revisão e troca de óleo também podem ser programados. Tecnologias de segurança, como o Lane Assist para manter o carro dentro da faixa em uma rodovia ou mesmo o Park Assist, que manobra o carro em uma baliza ao entrar ou sair de uma vaga de estacionamento.
Existe uma grande necessidade global do uso de tecnologia em todos os ambientes possíveis, com o objetivo de trazer conforto e segurança. O uso de soluções inteligentes pode ser aplicado também em outros cenários, quaisquer que precisem de supervisão e monitoramento fácil e customizado.
Para entender o melhor funcionamento dos comandos elétricos em que o protótipo irá atuar, foi consultado o manual do automóvel e, desvendando o esquema elétrico, sabemos quais ligações elétricas são necessárias para realizar o acionamento de atuadores e leitura dos sensores. Também foram consultadas documentações no site das organizações fundadoras do Raspberry Pi e do Arduino, sendo uma fonte confiável e rica em detalhes.
É possível separar o protótipo em pequenas etapas para entender melhor seu funcionamento. Inicialmente, faz-se o levantamento de necessidades e o resultado esperado; com isso definido, é possível traçar o método de desenvolvimento, tendo sido escolhido o RAD. Guedes (2020) afirma que “no desenvolvimento incremental, uma das características de RAD, o sistema é dividido em módulos, tomando por base a funcionalidade. Tendo os incrementos definidos, a cada ciclo é acrescido de novas funcionalidades ou até mesmo modificações, caso seja necessário. Outra característica é justamente essa maleabilidade de adaptação dos processos e a capacidade de se manter em constante evolução”. Assim, é possível o desenvolvimento em paralelo de ambas as plataformas trabalhadas e a junção das partes; dessa forma, é garantido o perfeito funcionamento de cada módulo independentemente, antes mesmo da integração, o que torna o conjunto passível de melhorias a todo momento.
O desenvolvimento possui duas grandes divisões: a parte gráfica, visualizada pelo usuário, e também toda a programação que controla essas informações para que cheguem até o usuário da melhor maneira possível.
2 REVISÃO BIBLIOGRÁFICA
Ao decorrer do estudo, se faz necessário compreender conceitos básicos de programação em Python e C++, bem como as plataformas Raspberry Pi e Arduino.
2.1 Linguagens de Programação
Segundo Carvalho, o Python se tornou uma das linguagens de programação mais populares do mundo nos últimos anos e será a linguagem principal do projeto, pela versatilidade em automação e manipulação de dados, podendo ser facilmente programada no Raspbian (Sistema Operacional do Raspberry Pi). Quanto à linguagem de programação C++, ficará responsável por administrar as GPIOs do Arduino, realizando leituras em sensores e acionamento de atuadores.
2.2 Integração
Para ocorrer a comunicação entre o ambiente virtual no Raspbian e o ambiente elétrico/eletrônico controlado, se faz necessário realizar uma comunicação serial do Raspberry Pi com o Arduino, onde o Arduino servirá como uma placa de expansão, possibilitando principalmente trabalhar com portas analógicas, já que o Raspberry Pi não possui essa opção nativamente. Como Python é um framework presente na maioria das distribuições Linux para PC e também nas distribuições padrão de boards como Raspberry Pi e BeagleBone Black, é muito fácil fazer algo funcionar! E não se engane pela simplicidade e elegância da linguagem porque ela pode te surpreender em performance e recursos. (Bueno, 2014)
2.3 – Plataformas
As plataformas de hardware escolhidas foram o Arduino, por ser Open Source (software com código aberto, livre para uso, modificação e distribuição), e também o Raspberry Pi, por ser um microcomputador completamente programável, com GPIOs, Bluetooth, Wi-Fi, além de possibilitar a manipulação de um sistema operacional Linux com todas as ferramentas de um computador convencional.
Arduíno
O Arduíno foi criado em 2005, na Itália, por um grupo de 5 pesquisadores: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David Mellis. Todos possuíam o desejo de ensinar aos seus alunos noções básicas de eletrônica e programação, porém não havia ferramentas de baixo custo que possibilitassem o aprendizado de desenvolvimento. Eis que surge o objetivo de projetar uma plataforma adaptável e de baixo custo para servir como base em seus projetos educacionais interativos. Com características inovadoras, o Arduino se popularizou logo nos primeiros anos de existência, vendendo mais de 50 mil unidades.
Figura 1: Placa Arduíno Uno.
Fonte: O autor, 2024
Raspberry Pi
O Raspberry Pi foi criado em fevereiro de 2012 pela Fundação Raspberry Pi. Assim como o Arduíno, o Raspberry Pi também foi desenvolvido com o objetivo de propagar conhecimento e possibilitar o desenvolvimento em escolas e universidades, inicialmente no Reino Unido e posteriormente em todo o mundo. A princípio, foram criados dois modelos, denominados Model A e Model B. Em um curto período, o mini computador se espalhou pelo mundo entre os estudantes e desenvolvedores, por sua incrível versatilidade.
Figura 5: Placa Raspberry Pi 5.
Fonte: https://www.raspberrypi.org/
2.4 Acionamentos Elétricos
Um dos objetivos principais é realizar o acionamento de atuadores para executar operações como: ligar o motor do carro, acender os faróis, acionar a buzina, travar e destravar as portas, subir e abaixar os vidros; enfim, realizar todos os comandos que já são possíveis através dos botões originais. Outro objetivo principal é como fazer esse acionamento através de toques em uma tela IHM, assemelhando-se a um sistema multimídia. IHM é a sigla para Interface Homem-Máquina, que vem do inglês HMI (Human Machine Interface). Sendo assim, é basicamente uma interface que possibilita a comunicação entre humano e máquina, mais especificamente, entre operador e sistema. (Makiyama, 2023)
3 DESENVOLVIMENTO
Foram adotadas 3 linguagens de programação: C++ para coletar as informações dos sensores e acionar os atuadores com o Arduino, Python para receber as informações do Arduino via serial e salvar no Banco de Dados e posteriormente exibir essas informações no painel, e também a linguagem SQL, responsável pela persistência dos dados.
3.1 – Linguagem C++
O primeiro contato com as informações do motor, como, por exemplo, temperatura, nível de combustível, RPM e demais, ocorre nas portas do Arduino, onde são lidas as tensões derivadas de cada sensor. Essas informações podem ser emitidas pelos sensores por PWM ou de forma analógica; portanto, é necessário realizar a tratativa do sinal via rotinas desenvolvidas em C++ no Arduino. C++ é uma das linguagens mais versáteis que existem, permitindo desenvolver desde tarefas simples como aplicações na linha de comando ou web, até sistemas complexos de tempo real, muito usados no mercado financeiro (DIAS, 2023). Com os dados tratados, é possível que os mesmos sejam importados no Banco de Dados via Serial, controlado pelo programa em Python. A programação em C++ também é responsável pelo acionamento dos atuadores, como, por exemplo, o motor de partida, os faróis, buzina, vidros elétricos e demais funções.
Figura 2: IDE do Arduíno.
Fonte: O autor, 2024
Para a programação em C++ foi utilizado o seguinte escopo:
3.2 – Python
Para obter as informações dos sensores do motor e projetá-las na tela, foi utilizada a linguagem Python, cuja função é obter esses dados por comunicação serial. A comunicação serial em conjunto com a plataforma Arduino é, sem dúvida, um poderoso recurso que possibilita a comunicação entre a placa e um computador ou entre a placa e outro dispositivo, como, por exemplo, um módulo GPS (SOUZA, 2014). Os dados lidos pelo Arduino são inseridos no banco de dados, no caso, o PostgreSQL. Essas informações mais tarde serão exibidas no dashboard para possibilitar a leitura pelo usuário. O fluxo inverso também é realizado para o acionamento dos atuadores: o usuário clica em um botão na tela, a programação em Python insere essa informação no banco de dados e, por via serial, manda para o Arduino, que, por sua vez, aciona os relés responsáveis pelos atuadores.
Para programar todo o projeto Python, foi utilizado a IDE (Integrated Development Environment) Pycharm, pois a mesma possui a versão da comunidade de uso livre.
Figura 3: IDE Pycharm.
Fonte: O autor, 2024
Para a programação em Python foi utilizado o método MVC (Model, View, Controller) que consiste em organizar as partes de um programa de forma a separar por tipos de objetivos no código, ao final foi obtido o seguinte formato:
Pasta do Projeto
– Pasta Imagens
– arduino.py
– conexao_banco.py
– controller.py
– main.py
– viewer.py
O código do projeto em sí, foi finalizado com cerca de 500 linhas de programação.
3.3 – SQL
O método escolhido para manipular os dados foi salvá-los em um banco de dados PostgreSQL. Ao centralizar as informações, é possível gerar relatórios, verificar erros no funcionamento dos sensores, realizar melhorias no projeto, entre outras vantagens. Dessa forma, há uma certa facilidade para aprimorar o desenvolvimento. Para manipulação de Banco de Dados Relacional, é utilizada a linguagem SQL. Segundo a XP Educação, o banco de dados PostgreSQL possui várias vantagens, como: software livre, escalabilidade, ótimo ecossistema, alto desempenho e segurança.
Figura 4: DBeaver Community.
Fonte: O autor, 2024
Para a criação do banco de dados foi utilizado os seguintes comandos SQL para criação das tabelas:
3.4 – Acionamento de Cargas
Para o acionamento de cargas que exigem 12 Volts e altas correntes, se faz necessário o uso de um Módulo relé, pois o Arduino fornece apenas 5 Volts e 1 Amper em suas portas lógicas, um dos métodos de contornar essa situação é a implementar um circuito de ganho de corrente e tensão, bem como um Relé.
Figura 6: Modulo Relé para Arduíno.
Fonte: https://www.sta-eletronica.com.br/artigos/arduinos/comoutilizar-o-modulo-rele-com-arduino
4 RESULTADOS
Foi obtido um protótipo onde o usuário pode interagir com a IHM (Interface Homem Máquina), controlando os atuadores através de botões na tela e acompanhando a leitura dos sensores, tudo isso criado a partir de uma plataforma de desenvolvimento, onde o usuário pode acessar o código-fonte do projeto e realizar customizações e melhorias.
Figura 7: DashBoard do Projeto.
Fonte: O autor, 2024
A plataforma elaborada, ou Hub de Conexões, foi desenvolvida visando facilitar o desenvolvimento e, consequentemente, as melhorias constantes. Portanto, cada parte ou módulo do projeto funciona independentemente, e é possível evoluir as partes sem acarretar problemas nas demais, sendo cada uma tratada isoladamente para garantir o melhor funcionamento e substituição dos módulos.
Figura 8: Modulo Painel e Modulo Arduíno em testes.
Fonte: O autor, 2024
Figura 9: Modulo Arduíno em funcionamento na FEC 2024. Fonte: O autor, 2024
5 CONCLUSÃO
Neste artigo, foi desenvolvido um protótipo de computador de bordo veicular, reunindo tecnologias como Raspberry Pi, Arduino e programação para controlar os atuadores e monitorar sensores de um veículo. O conceito foi possibilitar o usuário interagir de maneira simples e intuitiva por meio de uma tela touch. Usar plataformas Open Source foi uma estratégia assertiva, pois garantiu flexibilidade, permitindo que qualquer pessoa possa acessar e customizar o código conforme sua necessidade ou estilo. A comunicação entre o Raspberry Pi e o Arduino foi feita via serial, o que possibilita a conexão futura com outros módulos.
No decorrer do desenvolvimento, foi evidente a importância da modularização do sistema, pois cada parte funciona de forma independente, o que facilita a melhoria contínua sem causar problemas no restante do protótipo. O Banco de Dados também foi essencial, para armazenar dados e possibilitar integrações com o Sistema. Embora o protótipo tenha atendido aos objetivos, existe possíveis melhorias, sendo uma ótima base para projetos com foco em customização e maior acessibilidade para o usuário final.
REFERÊNCIAS BIBLIOGRÁFICAS
CARVALHO, Caroline. O que é Python? — um guia completo para iniciar nessa linguagem de programação. Disponível em: https://www.alura.com.br/artigos/python. Acesso em: 1 jun. 2024.
DIAS, Vinicius. C++: Vale a Pena Aprender atualmente? Por que e onde Usar? Disponível em: https://www.alura.com.br/artigos/formacao-linguagem-c-plus-plus. Acesso em: 4 jun. 2024.
SOUZA, Fábio. Arduino – Comunicação Serial. Disponível em: https://embarcados.com.br/arduino-comunicacao-serial/. Acesso em: 28 maio 2024.
XP EDUCAÇÃO. Banco de dados PostgreSQL: o que é e quais são os tipos? Disponível em: https://blog.xpeducacao.com.br/banco-de-dados-postgresql/. Acesso em: 2 jun. 2024.
GUEDES, Marylene. O que é RAD – Rapid Application Development? Disponível em: https://www.treinaweb.com.br/blog/o-que-e-rad-rapid-application-development. Acesso em: 4 nov. 2024.
BUENO, Cleiton. Python e Arduino – Comunicação Serial. Disponível em: https://embarcados.com.br/python-e-arduino-comunicacao-serial/. Acesso em: 4 nov. 2024.
MAKIYAMA, Marcio. IHM: o que é, para que serve e principais tipos [GUIA]. Disponível em: https://victorvision.com.br/blog/ihm/. Acesso em: 4 nov. 2024.
1 Graduando do Curso de Engenharia de Computação da Universidade de Araraquara- UNIARA. Araraquara-SP. E-mail: thconstantino@uniara.edu.br
2 Orientador. Docente Curso de Engenharia de Computação da Universidade de Araraquara- UNIARA. Araraquara-SP. E-mail: fddallilo@uniara.edu.br
3 Coorientador. Docente Curso de Engenharia de Computação da Universidade de Araraquara- UNIARA. Araraquara-SP. E-mail: jhgborges@uniara.edu.br