Quero utilizar o Raspberry Pi para controlar directamente construções em Lego, um pouco à maneiro do Lego Education WeDo Robotics.
Encomenda à PTRobotics:
- Raspberry Pi – o cérebro
- PiFace Digital – a interface para o mundo exterior
- Wi-Pi – para comunicação wireless
- Itead L298 Dual H-Bridge Motor Driver – para controlo bidirecional de 1 ou 2 motores
Já tinha:
- Lego Power Functions Rechargeable Battery Box (8878) ou AA Battery Box (8881)
- Lego Power Functions XL Motor (8882)
- fio eléctrico
- carregador com ficha micro-USB
- SD Card 4 GB com Raspbian instalado e pré-configurado para wi-fi para evitar ter de usar um teclado e um monitor
- 2 resistências entre 220 Ω e 2.2 KΩ (usei duas de 1 KΩ)
A montagem do PiFace é simples: encaixar o módulo sobre o Raspberry Pi, inserir o SD Card e o Wi-Pi e fornecer energia através do cabo micro-USB.
O PiFace faz uso da interface SPI pelo que é necessário activá-la:
$sudo raspi-config
Escolher no menu “8 Advanced Options” e depois “A5 SPI”, responder “yes” e finalmente “finish”. Não é necessário reboot.
É também necessário instalar o módulo python para o PiFace, que já faz parte do repositório do Raspbian:
$sudo apt-get install python3-pifacedigitalio
Para testar, basta correr o script que vem com o módulo:
$python3 /usr/share/doc/python3-pifacedigitalio/examples/blink.py
O LED #7 acende e apaga segundo a segundo, tudo OK podemos passar ao controlo do motor.
As saídas do PiFace são Open Collector pelo que é necessário um pull up (ligar aos +5 V através de um resistência) para obter algo compatível com as entradas da bridge.
A bridge é alimentada pela bateria Lego Power Functions (usei um cabo Power Functions cortado a meio, aproveitando apenas os 2 condutores exteriores – um para GND e o outro para PWR).
Utilizei um voltímetro para confirmar qual o positivo e qual o negativo – no caso do modelo 8878 da foto acima o selector de velocidade ficou rodado até ao extremo no sentido dos ponteiros do relógio; no modelo 8881 é necessário deslocar o selector no sentido da ficha.
O motor é ligado à H-bridge com a outra metade do cabo anterior, desta vez utilizando apenas os 2 condutores interiores.
O script blinky.py anterior serve para testar mas para controlo manual a partir da shell do python optei por usar estes comandos:
$python3
>>>import pifacedigitalio >>>pifacedigital = pifacedigitalio.PiFaceDigital() >>>led7=pifacedigital.leds[7] >>>led6=pifacedigital.leds[6] >>>led7.turn_off() >>>led6.turn_off()
Para acender apenas o LED #7 e fazer o motor rodar num sentido:
>>>led7.turn_off() >>>led6.turn_on()
Para acender apenas o LED #6 e fazer o motor rodar no sentido oposto:
>>>led7.turn_on() >>>led6.turn_off()
Se acender ambos os LED o motor permanece parado:
>>>led7.turn_on() >>>led6.turn_on(
E para sair da shell de python:
>>>exit()