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);
}
}
Attachments
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