Skip to content

Documento baseado numa palestra de Python para Arduino. Aqui você encontrará todo o básico necessário para criar diversos projetos integrando a linguagem Python com a plataforma de protótipos Arduino!

mateustoin/Palestra-Python-para-Arduino

Repository files navigation

Python para Arduino ou Arduino para Python?

A ideia da apresentação é mostrar como é possível integrar Arduino e Python e o que dá pra fazer com isso! Com a diversidade de trabalhos que podem ser feitos com Arduino e a facilidade da linguagem de programação python, é possível desenvolver uma infinidade de projetos e protótipos com inúmeras funcionalidades interessantes. O objetivo é que com isso, seu leque de possibilidades aumente e seja acionado um gatilho, que dirá que muitas coisas que parecem complexas são possíveis e mais fáceis do que parece.

Sumário

  1. Whoami
  2. Introdução
  3. Objetivo
  4. O que preciso saber sobre Arduino para conectar no Python?
  5. O que preciso saber sobre Python para conectar no Arduino?
  6. Códigos, Aplicações e Utilitários
  7. Contato

Minha jornada se iniciou depois que entrei na Universidade, no curso de Engenharia da Computação. Já tinha um background técnico, com um pouco de prática em robótica e programação, porém nada extraordinário e diferente do que se encontra nos tutoriais básicos da web. Com uma ideia de que iria trabalhar bastante com robótica, programação, participar de competições e desenvolver projetos, cheguei muito empolgado e com vontade de aprender. O problema é que não existiam grupos de estudo, laboratórios abertos para ensinar e muitas pessoas interessadas em ensinar. Além disso, as disciplinas exigiam esse conhecimento, para criação de projetos e pôr em prática diversos conteúdos do curso que estão envolvidos com essas práticas.

Por isso depois que surgiu uma oportunidade de iniciar um Grupo de estudos em Robótica junto ao IEEE, entrei para o time junto com alguns amigos e passamos a ser os responsáveis por criar essa cultura ali dentro. Os anos se passaram e hoje temos diversas pessoas trabalhando no projeto juntos, como uma comunidade, que colabora com todos espalhando conhecimento e aprendendo muito no processo.

Além desse projeto, também sou responsável por uma loja de componentes eletrônicos, o Beco da Eletrônica, que funciona localmente no Centro de Informática da UFPB, oferecendo materiais para que todos tenham acesso e possam realizar diversos projetos.

Contato

Esse documento é baseado em uma palestra que foi realizada pela primeira vez no evento online RAS WEEK, com foco em temas de robótica, saúde e tecnologia no geral. Nele serão apresentados duas tecnologias bastante utilizadas no ambiente educacional: Arduino e Python. O Arduino é uma plataforma de criação de protótipos bastante conhecida, utilizada com sensores e atuadores para realizar projetos com potencial para virarem produto no mercado. Comumente utilizado para validação de ideias, é aplicado em projetos de pesquisa, extensão, pesquisas e principalmente para ensino de robótica e automação nas escolas e universidades.

Já o python é uma linguagem de programação considerada ideal para interessados por programação, em qualquer área de atuação ou idade, pois é simples e versátil. Não é necessário muito tempo para aprender o básico e possui diversas bibliotecas que fazem bastante trabalho por você, por isso se torna uma ferramenta poderosa e mostraremos como isso pode ser utilizado a nosso favor para a criação dos projetos com Arduino.

Muitos imaginam que já vão começar aprendendo desenvolvimento avançado, realizar funções complexas e desenvolver sistemas robustos, como um Jarvis da vida. Pra chegar nesse nível precisamos entender diversas coisas, o início do conhecimento, para que seja construída uma base sólida e só depois construir aplicações cada vez mais legais e cheias de funcionalidades.

Sem querer criar muitas expectativas, essa apresentação não vai preparar ninguém pra fazer o próximo homem de ferro. A abordagem aqui será um pouco superficial, mas será o suficiente pra despertar muita curiosidade. Veremos algumas implementações e aplicações que podem ser um ponta pé inicial para esse projeto (Jarvis)!

Porquê Python?

A facilidade para se aprender python é um fator muito importante para a escolha da linguagem, mas acima de tudo, a acessibilidade de informações e quantidade de materiais é indispensável. Hoje é possível encontrar ótimos cursos de python, do básico ao avançado, em algumas plataformas como o Coursera, Youtube, Udemy, entre muitos outros.

Na figura acima podemos observar o curso de Python do renomado Gustavo Guanabara, que foi criado com o objetivo de iniciar as pessoas na programação a partir do 0. Além disso temos algumas opções na plataforma da Udemy, que se filtrar por cursos de python grátis, gera mais de 100 resultados. Ou seja, opções não faltam, basta procurar e começar!

Para mostrar um exemplo prático, o código em python exibido acima é responsável por controlar um Drone! Alguns drones no mercado funcionam com aplicativos de celular ou controles mais simples, pois são de baixo custo e feito para iniciantes. Em alguns casos, como o dro drone mostrado (DJI Tello), a empresa disponibiliza um SDK (Software Development Kit, do inglês Kit de Desenvolvimento de Software). Com esse SDK podemos utilizar uma linguagem de programação para desenvolver o nosso próprio sistema de controle do dispositivo, nesse caso, o drone.

1: from djitellopy import Tello

Na primeira linha do código podemos observar a importação da biblioteca Tello, responsável por controlar o drone. Nela contém o SDK, mencionado anteriormente, que possui tudo que é necessário para acionar as funcionalidades do quadricoptero.

2: tello = Tello()

Na segunda linha do código criamos uma variável que "armazenará" todas as funções que utilizaremos. Isso é comum e ocorre com a maioria das bibliotecas que utilizamos para fazer coisas no python. Com isso o tello ficará responsável por chamar o que chamamos de métodos (funções dentro da biblioteca que adiconamos).

3: tello.connect()

Na linha 3 o primeiro método é chamado, para conectar o computador que está executando o código ao drone. Depois que a conexão é estabelecida, já é possível enviar comandos, pois o drone irá "escutar".

4: tello.takeoff()

Depois de conectado, o primeiro comando é enviado, para levantar voo.

5: tello.move_left(100)

Depois de ter o voo levantado, agora o drone é movido 100 centímetros para a esquerda.

6: tello.rotate_counter_clockwise(45)

Depois de mover os 100 centímetros, ele gira no sentido anti-horário 45°.

7: tello.land()

Depois de ter finalizado o giro, pousa no chão.

8: tello.end()

Depois de ter pousado, encerra a conexão do programa com o drone.

Os códigos foram exibidos e explicados para mostrar como é simples a cadeia de comandos que você pode fazer no python para realizar uma tarefa. Se com drones é possível ter um controle tão simples, quem dirá funcionalidades que podemos implementar no python, como reconhecimento de voz, entre outros. Como dito anteriormente, algumas coisas são mais simples do que parece e é isso que iremos explorar!

Como mencionado anteriormente, o objetivo é que com os códigos que serão mostrados e o exemplos fornecidos, você seja capaz de desenvolver muito mais projetos a partir dali, com diversas funcionalidades.

Com isso, seu leque de opções vira o verdadeiro cinto do Batman, com diversas ferramentas para resolver os problemas mais variados! Ter conhecimento acerca dessas tecnologias significa que para cada problema que surgir, mais soluções poderão ser pensadas para resolvê-lo. Além disso, a própria prática com essas tecnologias auxilia no aprendizado delas individualmente, como melhorar programando, utilizando algoritmos, estruturas de dados e ferramentas do mercado, como criando protótipos para projetos cada vez mais complexos e aprendendo sobre eletrônica e hardware no processo.

No final das contas, depois que passar por todo esse processo, todo esse conhecimento será útil para diversas coisas! Hackathons acontecem em todo o País o tempo todo, em eventos e plataformas online, com diversos problemas esperando as soluções mais criativas. Contests também ocorrem com frequências, mais focado em desafios para não só resolução de problemas, mas também criação de coisas dentro de regras que podem variar bastante de acordo com o tema. Ambos tem premiações que podem chegar a ser bem legais.

Projetos de disciplinas e projetos de pesquisa estão estritamente ligados ao meio acadêmico, dependendo do laboratório, disciplina ou professor responsável em que você está envolvido. Na universidade e em diversas instituições de ensino sempre se está trabalhando em soluções científicas e resolução de problemas para uma contribuição maior. Portato, ter um conhecimento para a resolução de problemas no geral trazem diversas vantagens em uma seleção para bolsa de pesquisa, mais prestígio na criação de projetos para disciplinas que exijam conhecimento na área, entre outras situações.

Com projetos pessoais não é muito diferente, mas o mais legal é poder criar, modificar e ser o mais versátil possível, tendo a própria criatividade como o único limite imposto. A quantidade de aprendizado acerca de diversos temas é inifinito, pois cada coisa aprendida leva a uma combinação de projetos e ideias que seria impossível realizar todos. Isso desperta não só um crescimento pessoal mas também pode levar a outros campos, como o Ensino, quando há uma vontade e paixão por aquilo, não só de desenvolver, mas de fazer com que outras pessoas também enxerguem esse potencial.

Nesta seção será mostrada os principais pontos relacionados ao Arduino que precisamos saber para realizar a comunicação entre ele e a linguagem de programação Python. Além disso, o que daria pra fazer com essa integração? Porque seria tão útil aprendê-la, além dos pontos que já foram levantados? Veremos uma visão mais técnica da coisa.

É válido dizer que as dicas e informações passadas aqui não valem apenas para Arduino, mas também com ESP8266 e outros tipos de placas de desenvolvimento. Como vai ser mostrado a frente, essas placas tem algo em comum: a forma em que se comunicam com o computador.

Então dá pra desfrutar de diversas funcionalidades através dos diversos tipos de placas. O Arduino tem inúmeras versões, cada uma com sua particularidade, e é possível desfrutar de cada uma dessas particularidades para a criação dos projetos com Python.

Mas afinal de contas, o que dá pra fazer com isso que vamos aprender? Só dizer que a quantidade de possibilidades é vasta não adianta, é preciso falar quais são. Como já é conhecido, um dos maiores motivos do Arduino ser a placa de desenvolvimento mais famosa é a quantidade de sensores e atuadores que podem ser utilizados com ele, a fim de coletar dados e realizar funções. Se o Arduino por si só já consegue realizar inúmeras tarefas com seus próprios sensores e atuadoras, imagine com a utilização de funções do Python, conexão com a internet, uso de bibliotecas próprias do python para auxiliar nas tomadas de decisão. Com a facilidade das bibliotecas do Python e comunicação com o Arduino, seria possível desfrutar da internet, armazenar os dados do Arduino em diversos tipos de banco de dados, seja local ou na nuvem, utilizando serviços famosos como o Firebase do Google ou Amazon Web Services da Amazon. Também seria possível realizar diversas dessas funções com Arduino ou ESP8266, você deve estar se perguntando qual seria a real utilidade. Então imagine um cenário escasso, onde você não tem acesso aos sensores e atuadores certos para realizar essas funcionalidades, onde as bibliotecas podem ser complicadas e o acesso a informação prejudicado. Aí entra o Python, para suprir necessidades e deficiência nesses pontos, entre muitos outros.

A quantidade de possíveis integrações vão além das mencionadas anteriormente. Como já foi dito, tudo depende da criatividade, pois a própria linguagem oferece inúmeras bibliotecas capazes de realizar milhares de funções. Nada impede de utilizar IA, Reconhecimento de Face, Processamento Digital de Imagens, entre muitas outras coisas, para acionar atuadores e realizar funções para o Arduino. Todas essas funcionalidades estão longe da realidade de algo que poderia ser processado diretamente de um Arduino.

A comunicação do Arduino com o Python se dá através da Comunicação Serial. A Comunicação Serial nada mais é do que a comunicação entre o Arduino e o computador em que ele está conectado, através do Cabo USB. Quando o computador envia informações para compilar um código no Arduino, quando você utiliza o Monitor Serial, entre outros, você está utilizando a interface Serial para realizar essas comunicações.

Do ponto de vista do Hardware, os pinos por onde passam esses dados que podem ir do Arduino para o Computador ou do Computador para o Arduino, são os RX e TX. RX de 'Receber', é por onde passam todas as informações que recebe do Computador ou qualquer outro dispositivo em que esteja conectado. TX de 'Transmitir', é por onde passam todos os dados que o Arduino transmite para o dispositivo em que está conectado. Por isso recomenda-se que não se utilize esses pinos nos projetos, a não ser que sejam utilizados com propósitos específicos de transmissão e recepção de dados entre dispositivos. Porque quando eles são utilizados como portas comuns, a comunicação pode ser interrompida e problemas com compilação de código no Arduino entre outros podem ocorrer.

Através da Comunicação Serial é possível descobrir informações como Vendor ID e Product ID, que são identificações únicas acerca do dispositivo em questão. Elas podem ser úteis para identificar o Arduino dentre outros dispositivos que possam estar conectados, além de ser útil para funcionalidades como autenticação de dispositivos e afins.

Em relação a como os Arduinos e afins são identificados nos computadores, varia com o Sistema Operacional. No Windows, como pode ser visto na IDE do Arduino quando o código vai ser compilado, são identificados como portas COM1, COM2, COM3..., variando de acordo com a porta USB em que está conectado. Já no Linux, são identificados como /dev/ttyacm, /dev/ttyusb, ..., também a depender da porta em que foi conectado. Saber como são identificados é importante para realizar a conexão no Python, pois ele será utilizado no código para conseguir enviar mensagens e receber sempre da porta correta.

Um último detalhe necessário para entender a comunicação serial seria o Baudrate. A seguir veremos como o Baudrate é programado, mas é importante saber que o valor de Baud determinado no Arduino deve ser exatamente igual ao indicado na linguagem de programação. Isso se deve ao fato desse valor determinar a velocidade em que as duas partes irão transferir bits de uma para a outra. Com o mesmo valor, elas conseguem sincronizar esses dados e tanto transmitir como receber da maneira correta. Esse valor está diretamente relacionado a quantidade de bits por segundo em que a comunicação ocorre.

Nesse código de exemplo podemos ver que o Serial.begin(9600) indica a inicialização da comunicação Serial por parte do Arduino. Nela também é possível notar o valor 9600, que indica a velocidade da comunicação. Depois, no loop(), é possível notar que o Arduino fica esperando receber alguma mensagem externa. Quando a mensagem externa é a, ele aciona o led e envia uma mensagem pela Serial dizendo Acionou led!. Se a mensagem externa for b, desliga o led e envia pela porta Serial a mensagem Desligou led!.

Essa mensagem externa que foi mencionada é a mensagem que virá do código em Python, que iremos explorar mais na frente. Nota-se que o Arduino utiliza a função Serial.available() para verificar se há uma mensagem externa, Serial.read() para receber e armazenar essa mensagem externa, depois que foi identificada, e por fim, Serial.println() para enviar uma mensagem de volta, para que o código em Python receba e tenha um feedback de que tudo ocorreu certo. Essa prática é bastante comum, verificar, receber, enviar feedback. Para todo sistema complexo, é necessário que sempre exista uma forma de verificar se tudo está acontecendo normalmente, para que, caso algum problema ocorra, isso possa ser solucionado.

No lado direito é possível ver um teste, utilizando o Monitor Serial da própria IDE do Arduino. Nele é possível testar, enviando e recebendo as mensagens, representando o que seria o código em Python. Este mesmo código será utilizado para alguns exemplos que serão expostos mais na frente.

Link para a documentação do Serial Arduino

Algumas dicas para aplicar o que já foi mencionado anteriormente, em relação aos contests de projetos. Essas são algumas plataformas que realizam essas atividades durante todo o ano, com desafios como "Faça um projeto que encaixe no bolso de uma calça" ou "Faça um projeto que utilize material reciclado", entre muitos outros. Esses desafios, unidos com a criatividade de cada um, unindo todas as ferramentas possíveis, podem gerar bons resultados e premiações legais. Além disso, essas Plataformas possuem milhares de projetos e ideias para alimentar a sua própria criatividade.

Como o Arduino, o Python também possui sua própria forma de se comunicar pela interface Serial. Todos os exemplos foram testados utilizando versões do Python superiores a 3.7+. A biblioteca é importada com o comando import serial, como pode ser visto a seguir.

Nos dois exemplos mostrados acima podem ser visto as duas formas de se comunicar, tanto realizando leituras quanto realizando escritas na Interface Serial. Nesse caso, com o código de Arduino mostrado acima, é possível testar todas as funcionalidades e transmitir mensagem, realizando a comunicação entre o Python e o Arduino.

Link para a documentação do Serial Python

Para visualizar o código e explicações com todas as integrações a seguir, basta clicar na imagem ou acessar a pasta codes do repositório.

About

Documento baseado numa palestra de Python para Arduino. Aqui você encontrará todo o básico necessário para criar diversos projetos integrando a linguagem Python com a plataforma de protótipos Arduino!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published