Introduction: Equilíbrio De Uma Bola Numa Calha

Este projecto é realizado no âmbito da Unidade Curricular de Sensores: Materiais e Aplicações. Tem como objectivo a projecção e concepção de um par sensor/actuador em tempo real com base em Arduino, cujo escolhido foi o equilíbrio de uma bola numa calha, recorrendo a um motor stepper.

Step 1: Montar a Calha E Suporte Utilizando LEGO

Inicialmente, faz-se a montagem do suporte, utilizando como plataforma peças de LEGO, como demonstrado nas figuras acima. É necessário ter alguns cuidados em relação à montagem propriamente dita, mais especificamente no que toca à articulação da calha onde a bola rola, feita através de veios utilizados nos carros LEGO, como sugerido na terceira figura. Outra peça que merece atenção reforçada é a barra de ligação entre a calha e o motor. Esta última, como demonstrado na segunda figura, tem de ser rígida em relação ao motor, contudo tem de ser possível de articular relativamente à calha.

À barra anteriormente descrita, é colada uma fita dentada (com a ajuda de uma pistola de cola quente) servindo de ligação entre o motor e a barra, de forma a fornecer o atrito necessário para o que se mova com a rotação do stepper.

O suporte para o motor pode ser simplesmente uma plataforma com o tamanho necessário para acomodar o motor, podendo ou não ter algum tipo de amortecimento para evitar trepidação do mesmo (material parecido com uma esponja).

A calha propriamente dita é também ela projectada com peças de LEGO, tendo em conta que é necessário reduzir o atrito proporcionado pelas próprias peças através da utilização de fita cola, por exemplo. É necessário construir batentes para limitar não só a posição máxima da bola mas também a posição mínima (dada pela distância mínima possível de ser medida com o sensor).

O suporte para os sensor de ultrassons deve ser sólido o suficiente para garantir a fixação do mesmo, evitando assim possíveis erros de leitura. É também necessário que apanhe toda a altura da bola utilizada, sendo assim recomendável utilizar o sensor verticalmente, apoiado na base da calha.

Step 2: Montagem Do Circuito - Montagem Da Driver Do Motor

A montagem da driver é feita como sugerida na primeira imagem acima, onde o controlador (Arduino) serve de alimentação da própria driver (segunda figura) através dos pins VDD e GND, com um supply de 5V proveniente da própria placa do Arduino. É de salientar que os pins 1A e 1B estejam ligados a uma bobina do motor, enquanto que os pinos 2A e 2B devem estar ligados à outra bobina. Os pins VMOT e GND são então ligados a uma fonte de tensão com um supply de 12V e 2A. Poderá ser necessária a utilização de um condensador conectado nos pins da fonte de forma a proteger o a driver de valores de tensão elevados, embora neste caso isso não se verificasse.

Conecta-se o pin SLEEP ao RESET porque nao há intenção de controlar o pin RESET, pelo que é necessária a conecção com o pin SLEEP de forma a mantê-lo num valor lógico high e activar a board.

Os pins STEP e DIR estão ligados aos pins P4 e P3 do controlador (Arduino) e são os responsáveis pelo controlo do motor, através do código mais à frente apresentado.

É necessário ajustar o potenciómetro presente na driver, identificado na segunda figura, com a ajuda de um multímetro até aproximadamente 0,7V quando alimentado somente pelo Arduino (5V), como sugerido na terceira figura.

Step 3: Montagem Do Circuito - Montagem Da Breadboard

A aparência da breadboard deve ser semelhante à apresentada na figura acima, com as ligações anteriormente explicadas.

A breadboard é depois colada ao próprio suporte, de forma a evitar posteriores erros de ligação originados por cabos mal conectados.

Step 4: Exemplo De Código

Abaixo está o exemplo do código utilizado.

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin

#define LEDPin 13 // Onboard LED

const int stepPin = 3;

const int dirPin = 4;

int maximumRange = 200; //

Maximum range needed

int minimumRange = 0; //

Minimum range needed long duration, distance; //

Duration used to calculate distance

void setup() {

// put your setup code here, to run once:

Serial.begin (9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

}

void loop() {

// put your main code here, to run repeatedly:

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.

distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){

/* Send a negative number to computer and Turn LED ON to indicate "out of range" */ Serial.println("-1");

digitalWrite(LEDPin, HIGH);

}

else {

/* Send the distance to the computer using Serial protocol, and turn LED OFF to indicate successful reading. */

Serial.println(distance);

digitalWrite(LEDPin, LOW);

}

//Delay 30ms before next reading.

delay(30);

if (distance <9){

digitalWrite(dirPin,LOW);

digitalWrite(stepPin,HIGH);

delayMicroseconds(500);

digitalWrite(stepPin,LOW);

delayMicroseconds(500);

}

if (distance >11){

digitalWrite(dirPin,HIGH);

digitalWrite(stepPin,HIGH);

delayMicroseconds(500);

digitalWrite(stepPin,LOW);

delayMicroseconds(500);

}

}

Step 5: Material Utilizado

-NEMA17 Two Phase Hybrid Stepper Motor 40mm 3.6kg.cm 1.68A;

-A4988 Stepper Driver;

-Sensor Ultrassons HC-SR04;

-Fonte de Tensão;

-Multímetro;

-Arduino Uno;

-Pistola de cola quente;

-Fita dentada;

-Breadboard;

-Fita cola;

-Diversas peças LEGO, consoante necessidade.

Trabalho realizado por:

Nuno Ferreira, 43810

Catarina Rijo, 43803

Kevin Oliveira, 43002

Filipe Marques, 43080

Pedro Conceição, 43233