Carrinho Controlado por Wi-Fi Autor: Álvaro Fernandes de Abreu Justen Disciplina: Microprocessadores Professor Marcos Tadeu von Lutzow Vidal Universidade Federal Fluminense Niterói/RJ julho de 2010
Introdução Nesse trabalho será mostrado como foi feito o processo de criação e implementação (partes física e lógica) do projeto Carrinho controlado por Wi-Fi, baseado no projeto Arduino e incentivado pelo professor Marcos Tadeu von Lutzow Vidal, a fim de exercitar os conceitos aprendidos na disciplina Microprocessadores, no primeiro período letivo de 2010, na Universidade Federal Fluminense. Motivação Alguns motivos foram importantes para a escolha desse projeto e não de outros temas, como: Já existia uma versão inicial de um carrinho, porém controlado por luz: existiam 4 sensores de luminosidade onde o usuário apontava uma lanterna e poderia conduzir o carrinho para frente, para trás ou para um dos lados. Existia o interesse dos autores da versão inicial do carrinho em aprimorá-la. Exercitar e aprender sobre eletrônica, desenvolvimento de software e conhecimentos na área de redes de computadores. Figura 1: Versão inicial do carrinho, controlado por luz
O Projeto Visão Geral O projeto é composto de um carrinho que possui, além de outras coisas, um netbook acoplado. O netbook é responsável por fazer a comunicação Wi-Fi com o usuário (que controlará o carro); além disos, o netbook se comunica com o Arduino, que então faz o controle de toda a parte eltrônica (motores, LEDs e buzzer). O diagrama a seguir ilustra a estrutura do projeto: Figura 2: Diagrama do projeto Áreas do Conhecimento Esse projeto abrangiu várias áreas do conhecimento e, por isso, foi um grande desafio fazer com que tudo fosse integrado para funcionar de forma eficiente. As grandes áreas envolvidas foram: Mecânica Telecomunicações Computação Eletrônica Nas próximas será mostrada como foi feita a implementação do projeto da ótica de cada uma das áreas citadas. O Projeto Parte Mecânica A parte mecânica do carrinho foi basicamente feita de alumínio e acrílico, onde os motores e uma terceira roda foram presos. No lado da frente, foram presos dois motores (cada um preso a uma roda) e na parte traseira foi presa uma roda pivotada (que roda livremente, através de um rolamento). Além disso, foram colados LEDs para simbolizar os faróis, a seta e neon. Seguem imagens do desenvolvimento:
Figura 3: Álvaro Justen cortando acrílico Figura 4: Estrutura de acrílico e alumínio pronta
Servomotores Servomotores são motores controlados por um trem de pulsos, onde o duty-cycle do trem de pulsos indica o sentido de rotação do motor. A utilização de servomotores facilitou o projeto, uma vez que são alimentados com 5V, são fáceis de se controlar e já possuem uma caixa de redução (conjunto de engrenagens que diminuem a rotação, aumentando o torque). A figura a seguir ilustra o uso de PWM no Arduino para controlar os servomotores, onde um dutycycle maior que 50% (e menor que 100%) faz o motor girar para um lado, maior que 0% e menor que 50% faz o motor girar para o outro lado; em 0 e 100% o motor fica parado. Figura 5: Pulse Width Modulation no Arduino Foram utilizados dois servomotores, que foram modificados exclusivamente para o carrinho. As modificações foram: Troca do antigo eixo, para que fosse possível prendê-lo à roda; Eliminação da trava de rotação do servomotor (servomotores giram até 180, porém precisamos que eles girassem 360 ). Para fazer as modificações foi utilizado o Laboratório de Tecnologia Mecânica da Universidade Federal Fluminense, com a ajuda dos técnicos Alain, Edivaldo e Pedro e do professor John Reed (do Instituto de Computação da mesma universidade). Lá foram criadas buchas para que o novo eixo pudesse ser acoplado às engrenagens do motor (uma broca foi utilizada como eixo pela rigidez do material com o qual é feita). Seguem fotos do processo de construção das buchas no torno mecânico:
Figura 6: Álvaro Justen utilizando o torno mecânico do LTM Figura 7: Bucha da roda sendo torneada
Após a confecção das peças, o motor foi desmontado para que fossem coladas e o novo eixo fossem encaixado. Como novo eixo foi utilizada uma broca de 1.19mm de diâmetro. Seguem fotos do processo: Figura 8: Servomotor desmontado Figura 9: Servomotor com novo eixo colado
Após o fechamento dos motores, o eixo deles foi colado com Durepóxi às rodas. Foram utilizadas rodas de aeromodelos, por conta de serem bastante leves: Figura 10: Eixo sendo colado à roda Após esse processo os motores foram fixados à estrutura de alumínio: Figura 11: Estrutura de alumínio e acrílico com motores e rodas
LEDs e Buzzer LEDs foram utilizados para simular os faróis, setas e neon no carrinho. O buzzer simula a buzina do carro. Eles foram fixados a partir de buracos na parte de alumínio, conforme a foto ilustra: Figura 12: LEDs fixados e soldados O Projeto Parte Eletrônica Na parte eletrônica do projeto foram utilizados os seguintes componentes: 6 LEDs brancos para simbolizar os faróis, alimentados pela USB do netobok 2 LEDs amarelos para simbolizar as setas, alimentados pelo Arduino 2 LEDs azuis para simbolizar o neon, alimentados pela USB do netobok 1 buzzer para a buzina, alimentado pelo Arduino 1 transistor que funciona como chave, para ligar e desligar os faróis, comandado pelo Arduino Resistores para limitar a corrente dos LEDs e da base do transistor 1 Arduino Nano Os LEDs dos faróis são alimentados pela USB do netbook, porém passam por um transistor NPN que funciona como chave, assim o Arduino consegue controlar o desligamento dos faróis ou acionamento como farol baixo ou alto (a luminosidade é controlada através de PWM). Todos os componentes foram interligados através de uma protoboard, formando o seguinte circuito elétrico:
Figura 13: Circuito elétrico do carrinho Figura 14: Protoboard com os componentes interligados
Arduino Nano O Arduino é uma plataforma de hardware e software livres para a prototipagem de projetos de eletrônica que necessitam de uma CPU. Ele é composto por um microcontrolador (ATMega328) e outros componentes, como uma interface de comunicação USB (FTDI). São utilizadas as linguagens C/C++ para desenvolver software para seu microprocessador, e uma IDE (que roda em GNU/Linux, Mac OS e Windows) é utilizada para fazer o upload do software compilado, via USB. O compilador utilizado pela IDE é o avr-gcc, uma variante do GNU C Compiler, que dá suporte aos microprocessadores da AVR (fabricante do ATMega328). Todo o software do carrinho que roda no Arduino está disponível em: http://www.justen.eng.br/turiquinhas/v2.tar.gz Figura 15: Arduino Nano - visão frontal Figura 16: Arduino Nano - Visão traseira Assim como qualquer microcontrolador, o ATMega328 possui um microprocessador, memórias (RAM, Flash e EEPROM), clock, timers, pinos de entrada e saída (analógica e digital), sistema de interrupções, dentre outras. Dentre as diversas funcionalidades do Arduino Nano utilizado, podemos destacar: Microcontrolador ATMega328 Clock de 16MHz 32kB memória Flash 2kB memória RAM 1kB memória EEPROM I/O: 14 digitais (6 com PWM), 6 analógicas (ADC 10 bits)
32 registradores (8 bits cada, uso geral) Timers (2 de 8 bits e 1 de 16 bits) Seguem um esquema lógico do microcontrolador ATMega328 de do microprocessador que está dentro do mesmo: Figura 17: Esquema lógico do ATMega328
Figura 18: Esquema lógico do microprocessador do ATMega328 O Projeto Rede Wi-Fi Foi criada uma rede Wi-Fi do tipo Ad-Hoc no netbook para que o cliente pudesse se conectar. O endereço de rede utilizado foi 192.168.55.0, com máscara de subrede 255.255.255.0. Também foi instalado um software servidor DHCP no netbook para dar IP aos clientes que se conectarem à rede. Ao se conectar à rede, basta que o cliente abra o IP do netbook em seu navegador Web: http://192.168.55.1 O sistema operacional utilizado no netbook foi o Ubuntu 9.10 Netbook Remix. Os scripts de iniciação da rede Wi-Fi estão disponíveis em: http://www.justen.eng.br/turiquinhas/v2.tar.gz
O Projeto A Interface Web Foi desenvolvida uma aplicação Web para que o cliente consiga controlar os movimentos do carrinho, além da buzina e dos faróis e ver a câmera do netbook. Foram utilizadas várias linguagens e ferramentas para a construção dessa interface, como: 1. 2. 3. 4. 5. 6. 7. 8. HTML CSS JavaScript jquery framework JavaScript que facilita e agiliza o desenvolvimento de aplicações interativas Python web2py framework para desenvolvimento Web escrito em Python pyserial biblioteca para comunicação serial escrita em Python streamer programa que tira fotos da webcam Os 4 primeiros itens rodam no navegador do cliente e são responsáveis pela interação do cliente com o netbook. Já os 4 últimos rodam no servidor (netbook) e são responsáveis por se comunicar com o cliente e enviar as informações para o Arduino. Figura 19: Interface Web do carrinho Todo o código da interface Web está disponível em: http://www.justen.eng.br/turiquinhas/v2.tar.gz
Versão Final Conclusões Figura 20: Versão final do carrinho Unir diversas tecnologias e várias áreas do conhecimento foi um grande desafio para esse projeto que, ao final, foi implementado com sucesso, agregando bastante conhecimento a todos os envolvidos. Todo o material construído durante seu desenvolvimento (textos, fotos, vídeos e código) está sendo disponibilizado gratuitamente na Internet, através do endereço: http://www.justen.eng.br/turiquinhas/ Além disso, Álvaro Justen foi convidado a palestrar sobre o projeto nos seguintes eventos: Fórum Internacional de Software Livre (FISL) 21 a 24 de julho de 2010, Porto Alegre/RS Congresso Internacional de Software Livre e Governo Eletrônico (CONSEGI) 18 a 20 de agosto de 2010, Brasília/DF O projeto também deu origem à lista de usuários de Arduino do estado do Rio de Janeiro, ArduInRio.org, e será utilizado na disciplina Fundamentos de Programação e Especificação de Protocolos, na qual Álvaro Justen é monitor, para incentivar os alunos a praticar desenvolvimento de software de forma a integrar conceitos de outras disciplinas, como eletrônica.
Trabalhos Futuros Controle via Internet Trocar motores e rodas por mais robustos Pré-programar os movimentos do carro e armazená-los na EEPROM Utilizar nova bateria com maior autonomia Agradecimentos Professor John Reed Instituto de Computação da Universidade Federal Fluminense Técnicos do Laboratório de Tecnologia Mecânica: Alain Edivaldo Pedro Marcelo José Justen