Enkoder, bağlı olduğu motor milinin veya tekerleğin hareketlerine karşılık sinyal üreten elektromekanik bir cihazdır. Farklı sistemlerle çalışan tipleri olmakla birlikte optik çalışanlarda genel olarak enkoder ışık kesintisine bağlı olarak bir geri bildirim sağlamaktadır.
Mutlak enkoder, güç verildiği andan itibaren dönen mile göre dijital bit dizileri şeklinde birbirine benzemeyen çıkış vererek milin konumunu belirlemektedir. Bu nedenle açı tespitinde kullanılır. Artımsal enkoder ise, bağlı olduğu mil dönerken, pals olarak adlandırılan kare sinyal üreterek bulunduğu konumu bilgilendirmede ve de belli bir süre pals sayma işlemi yapılarak dönme hızı tespitinde kullanılır.
Otomatik etiketleme aplikatörü, fabrikada konveyör bant üzerinde ilerleyen kolilere etiket yapıştırmak için kullanılır. Aplikatörün, konveyör hızına uygun hızda etiketi koliye yapıştırabilmesi için cihaza artımsal enkoder bağlanmaktadır. 64mm çapında bir tekerlek 500 pals/tur bir enkoder a bağlanır. Tekerlek, konveyör banta temas edecek şekilde montajlanır, böylece aplikatör bant hızından haberdar olmuş olur. Aynı zamanda bantın kaç mm ilerlediği bilgisi de aplikatöre gelmiş olur, örneğin 50 pals geldiyse, tekerlek bir tur attığında bant yaklaşık 200mm (64mm x pi) ilerlediğinden, 50 pals, 20mm bantta ilerleme demektir.
Takometre, motor miline veya konveyör banta temas sağlanarak kullanılır, bize rpm (dakikadaki devir sayısı) veya metre/dakika birimleriyle hız bilgisi gösterir.
Burada yapacağımız basit bir arduino projesi, aynen artımsal enkoder gibi motor dönerken pals üretecektir. Tipik bir enkoder bir turda 500 pals verirken bizimki bir turda bir pals verecek. Motorun dönüş hızını yani rpm ölçeceğimizden bu projeye, takometre de diyebiliriz. Projede kullanacağımız modül 10mm çatal aralığı olan bir sensördür, bir tarafında infrared led diğer tarafında npn bir transistör bulunmaktır.
LM393 Motor Hız Sensör Modülü
Araya bir nesne girip girmeme durumuna göre transistör iletimde veya yalıtımda olacak buna göre modül çıkış sinyali arada bir engel varsa HIGH (1), yoksa LOW (0) olacaktır. Proje düzeneği için, motor miline bir dil çubuğu parçasını sıcak silikon ile tutturdum. İki HIGH sinyali arasında geçen süreyi ölçerek rpm bilgisini hesapladım. Motoru farklı hızlarda sürmek için Arduino uno nun PWM çıkışını (pin 3), L298 motor sürücü modülünde ENA pinine girdim. L298 i 12V güç kaynağı ile besledim. Bu sayede Arduino IDE de, PWM çıkışına farklı değerler vererek, seri port ekranından hız bilgisini okuyor olacağız.
Bağlantılar bu şekilde.. L298 kullanımı için Robolink Akademi’de bulunan bu yazıya da bakabilirsiniz. GND leri ortak yapmayı unutmayın.
LM393 Arduino Kodu
#define enA 3
#define in1 6
#define in2 7
#define sensor 2
unsigned long start_time = 0;
unsigned long end_time = 0;
int steps=0; // işlemlerin sırayla yapılabilmesi için tanımlandı
float temp=0;
float rpm=0; //dakikadaki devir sayısı
void setup() {
Serial.begin(9600);
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(sensor, INPUT);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 30); // PWM Hız komutu
}
void loop() {
if(digitalRead(sensor) && steps==0)
{
start_time=millis();
steps=1;
delay(200);
}
if(digitalRead(sensor) && steps==1)
{
end_time=millis();
steps=0;
temp=int(end_time - start_time); //İki HIGH arası geçen milisaniye
rpm=60/(temp/1000.0);
Serial.println(rpm);
delay(200);
}
}
PWM değeri 30 un altındaysa motor dönmüyor.. Elde ettiğim veriler bu şekilde oluştu.. Gördüğünüz gibi rpm değeri motor voltajı ile orantılı olarak artmakta fakat pwm 125 ten sonra hız pek değişmemektedir. Projenin doğru ölçüm yaptığını takometre ile de doğruladım.