Fonte: PplwareArduino – O Comboio Lego Inteligente
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. 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:
Material utilizado:
- 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.
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.
- 2 Pista e 1 comboio LEGO®,
1 Arduino
1 buzzer
2 sensores de obstáculos
1 servo
2 LEDs IR
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 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 [url)http://comunidade0937.com/forum/]Comunidade 0937[/url] ao que responderam que seria mais indicado utilizar a função Single Output que não tem timeout e o problema ficou solucionado.
Foi este o código utilizado:O que este código faz é:Código: Selecionar todos
* Arduino and LEGO Power Functions * dark_storm@groundzero.com.pt */ #include <Servo.h>; #include <legopowerfunctions.h>; Servo servoMain; // Define our Servo // IR led on port 13 LEGOPowerFunctions lego(13); int irPin = 12; int count = 0; int stationPin = 2; int buzzerPin = 11; //irPin - conta as voltas //count - variavel que conta as voltas //stationpin - para o comboio na estacao //buzzerpin - apito de saida de estacao void setup() { Serial.begin(9600); pinMode(irPin, INPUT); pinMode(stationPin,INPUT); servoMain.attach(10); // servo on digital pin 10 pinMode(buzzerPin,OUTPUT); } void loop() { if ( digitalRead(irPin) == 0 ) { count++; delay(3000); } if (count <= 1) { lego.SingleOutput( PWM, PWM_FWD5, RED, CH1); delay(100); if (digitalRead(stationPin) == 0) { lego.SingleOutput( PWM, PWM_FLT, RED, CH1); servoMain.write(0); // Turn Servo Left to 45 degrees delay(2000); tone(11,2000,1000); delay(500); } } else { servoMain.write(90); // Turn Servo Left to 45 degrees count = 0; } }
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.
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.
- 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 “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:
http://videos.sapo.pt/mRTkcjjGqLQDSJ5rz0k4
Arduino - O Comboio LEGO Inteligente
- Carlos Loução
- Administrador
- Mensagens: 9397
- Registado: 30 dez 2008, 18:48
- Localização: PK 226.461 - Linha do Sul
- Contacto:
Porque acho que o artigo tem algum interesse para quem gosta de comboios Lego, aqui o replico.
Não tem Permissão para ver os ficheiros anexados nesta mensagem.
-
- Participante
- Mensagens: 507
- Registado: 20 jun 2012, 19:05
Muito bom, sigam o link e vejam o vídeo.