Arduino - O Comboio LEGO Inteligente

Miniaturas construídas em lego
Responder
Avatar do Utilizador
Rodolfo Dias
Administrador
Mensagens: 9946
Registado: 30 Dez 2008, 18:48
Localização: PK 226.461 (em espírito), PK 14.960 (na realidade) - L.Sul
Contacto:

08 Jan 2015, 07:06

Porque acho que o artigo tem algum interesse para quem gosta de comboios Lego, aqui o replico.
Arduino – 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.
imagem_comboio_lego00.jpg
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.
imagem_comboio_lego01.jpg
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.
imagem_comboio_lego03.jpg
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.
imagem_comboio_lego04.jpg
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.
imagem_comboio_lego05.jpg
Foi este o código utilizado:

Código: Seleccionar 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; 
 
    }
 
}
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:

http://videos.sapo.pt/mRTkcjjGqLQDSJ5rz0k4
Fonte: Pplware
Não tem Permissão para ver os ficheiros anexados nesta mensagem.
nalmeida
Participante
Mensagens: 436
Registado: 20 Jun 2012, 19:05

08 Jan 2015, 12:36

Muito bom, sigam o link e vejam o vídeo.
Responder