Muito já foi escrito sobre as funcionalidades que o Arduino pode ter. Ao ler os artigos aqui publicados surgiu a ideia de criar este projecto. Colocar um comboio LEGO® a ser controlado por um Arduino, um trabalho desenvolvido pelo Tiago Santos do GroundZero Blog.
As várias etapas estão agora disponíveis para que possam replicar e até melhorar.
Já agora, ainda não tem um Arduino? Veja o nosso Kit.
Existem mil e um projectos que podem ser suportados com a plataforma Arduino, todos os dias aparecem novas ideias e hoje vamos deixar aqui, passo a passo, um projecto que, acima de tudo, proporcionou bons momentos de aprendizagem.
Arduino – O Comboio Lego Inteligente
O percurso do comboio é constituído por uma linha externa e uma linha interna com uma ligação entre as duas. O objectivo geral é o comboio realizar o percurso exterior uma vez e o interior duas.
Os objectivos específicos são:
- O comboio tem que parar na estação sempre que lá passar;
- Quando parte da estação tem que se ouvir um apito;
- Assim que chega à ligação com a linha interior, o comboio é transferido para essa linha;
- Quando efectuar as 2 voltas na linha interior é, novamente, transferido para a linha exterior.
Material utilizado:
- 2 Pista e 1 comboio LEGO®,
- 1 Arduino
- 1 buzzer
- 2 sensores de obstáculos
- 1 servo
- 2 LEDs IR
Para controlar o comboio na estação foi necessário usar dois LEDs de IR. Pelo alcance e ângulo deles, um controla a entrada do comboio na estação e o outro a saída. Para controlar a posição do comboio foram usados dois sensores de obstáculos. Um controla o número de voltas na linha interior, o outro controla a chegada à estação.
Uma das dificuldades encontrada foi o controlo do comboio, mas foi solucionada com o código disponibilizado pela LEGO® que permite interagir com as Power Functions, código disponível em aqui.
Aqui encontramos 4 funções para comunicar com o comboio “Extended Mode, Combo Direct Mode, Single Output Mode e Combo PWM Mode”.
Inicialmente foi utilizada a Combo PWM mas o comboio parava assim que perdia o sinal do LED. Este modo tem um timeout que, no momento que o receptor perde o sinal IR, desliga os motores. Foi colocada a dúvida na Comunidade 0937 ao que responderam que seria mais indicado utilizar a função Single Output que não tem timeout e o problema ficou solucionado.
Este foi o código usado
O que este código faz é:No início são definidas as bibliotecas usadas. A biblioteca “Servo” permite o controlo do Servo de mudança de linha e a “legopowerfunctions” permite interagir com o sistema LEGO®.
A seguir são definidos os vários objectos de controlo e as diversas variáveis e os pinos associados.
- irPin – Controla o número de voltas que o comboio executa
- count – Armazena o número de voltas que o comboio executa.
- stationPin – Controla a entrada do comboio na estação
- buzzerPin – Controla o buzzer
Na estrutura “setup” é definida a velocidade de comunicação do Arduino com o PC, se os pinos das diversas variáveis são de entrada ou saída e qual o pino onde o servo está ligado.
Na estrutura “loop” são definidas duas estruturas “IF”. A primeira estrutura controla o número de voltas que o comboio executa na linha interior. Em cada passagem pelo sensor a variável é incrementada em 1. Criou-se um delay de 3000 ms pelo facto do comboio ter algumas carruagens e estas não activarem o sensor.
Na segunda estrutura “IF” é controlado o arranque da estação, mudanças de linha e paragem na estação. Inicialmente o comboio está parado na estação e parte daí. A primeira linha permite indicar ao comboio os dados de partida, em que “PWM” é modo de funcionamento, o “PWM_FWD5” é a direcção, normal, e a velocidade, 5, (a velocidade varia entre 1 e 7, quer em direcção normal, quer em inversa; existe também o modo para o comboio parar), o “RED” é a saída (pode ser RED ou BLUE) e o “CH1” é o canal de transmissão (pode variar entre 1 e 4). Combinando a saída com o canal é possivel controlar oito dispositivos LEGO® PowerFunctions diferentes.
Dentro desta estrutura existe uma estrutura “IF” que controla a entrada na estação. Caso o pino de controle da estação seja ativado, é indicado ao comboio que deve parar, o servo é rodado para os zero graus (de modo que o comboio troque de linha na próxima passagem) é criado um delay de 2000 ms para simular a paragem na estação. Ouve-se um sinal sonoro através do buzzer e de seguida o comboio arranca novamente em velocidade 5.
O “else” seguinte controla a passagem do comboio da linha interior novamente para a linha da estação. Depois de o comboio efectuar duas voltas na linha interior, o servo roda para os 90 graus de modo ao comboio trocar de linha.
Os sensores de obstáculos, por defeito, devolvem “1”. Caso exista um obstáculo devolve “0”.
O resultado final do projecto foi este:
Deixamos assim aberta a porta para que outros projectos possam também ser publicados e com isso mostrar a uma comunidade atenta e criativa o muito que se faz nesta estrutura.
Adira à comunidade Arduino no Facebook!