Bilim Fuarı Projesi için Bu Çizgi İzleyen Robotu Yapın

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, Arduino'yu kullanarak, özel olarak çizilmiş bir çizgi düzeni üzerinde çalışacak ve mevcut olduğu ve sensörleri tarafından izlenebilir olduğu sürece onu sadakatle takip edecek bir çizgi izleyici robot devresinin nasıl oluşturulacağını öğreneceğiz.

Navneet sajwan tarafından



Çizgi İzleyen Robot Nedir

Otonom robot, bir insan tarafından gerçek zamanlı olarak manuel olarak kontrol edilmeden, programcının talimatına göre bir dizi eylemi gerçekleştirebilen bir makinedir.

Çizgi takipçileri (LFR'ler) ayrıca bir veya daha fazla sensör ve siyah veya beyaz bir çizgi yolu tarafından yönlendirilen otonom robot arabalardır. Modern sürücüsüz arabaların temelini oluştururlar.



Her otonom robot gibi, hat takipçilerinde bir sinyal işleme ve karar verme ünitesi, sensörler ve aktüatörler bulunur. Robotikte yeni başlayan biriyseniz ve ciddiye almak istiyorsanız, başlamanız gereken yer burasıdır. Yapmaya başlayalım.

Bu projeyi yapmak için iki kızılötesi sensör ve üç tekerlekten çekiş kullandım. Kullanılabilecek minimum sensör sayısı birdir ve PID tabanlı hat takibi için maksimum sekiz sensör yeterlidir.

Gerekli Bileşenler:

Arduino uno

Şasi

İki pille çalışan (b.o.) Motor ve uyumlu lastikler

Castor topu

İki kızılötesi sensör

Motor sürücü modülü

Güç kaynağı

Arduino IDE yazılımı

Şimdi bileşenlerimize bir göz atalım:

ARDUINO ONE : Bunu robotumuzun kontrol odası olarak hayal edin. Şimdi, bu proje için düşünülen çok sayıda geliştirme kartı var, ancak Arduino UNO diğerleriyle eşleşmiyordu. Kahramanımızın çok boyutlu özellikleri bakımından üstün olduğu anlamına gelmez.

Durum böyle olsaydı, Raspberry Pi ve Intel Edison onu gözlerinin arasına vururdu. Arduino UNO'nun seçilmesine yol açan en ikna edici argümanlar, projenin özellikleri, fiyatı, boyutu ve gereksiniminin birleşiminden oluşuyordu.

İlgili bazı nedenler şunlardı:

BOYUT : Atmega16 veya Atmega8 tabanlı geliştirme kartlarına göre oldukça küçüktür, kasada az yer kaplar, böylece kompakt ve kullanışlı bir bot elde edersiniz.

Robotik yarışmalarında bu gerçekten önemlidir. İnan bana, o büyük çirkin botla ortalıkta dolaşıp bütün gün mekan değiştirmekten nefret edersin.

Boyut ne kadar küçükse, robot daha hızlı ve dönüşler daha verimli.

EN İYİ PROTOTYP KURULU : Kuşkusuz, Arduino UNO aşağıdakiler için en iyi özellik kombinasyonuna sahiptir: prototip oluşturma . Devreleriniz yerine oturduğunda ve projeniz mükemmel şekilde çalıştığında, onu Arduino Nano ve Attiny85 ic gibi daha küçük ve daha ucuz bir şeyle değiştirebilirsiniz.

Üniversite projeleri için hat takipçisi olanlar için, sonunda UNO'yu Nano ile değiştirmeyi öneriyorum.

ŞASİ : Tüm bileşenleri yerinde tutan çerçevedir. Yeni kasa alırken dikkat etmeniz gereken birkaç nokta var,

Hafif ve güçlü olmalıdır.

Projeler için, piyasadan bir tane satın almanız daha iyidir. Ancak rekabete hazırlanıyorsanız, rekabetin boyutlarını ve gereksinimlerini göz önünde bulundurarak kendinize göre özelleştirmenizi şiddetle tavsiye ederim.

Plastik veya ahşap bir şasi seçin. Metalik çerçeveler Arduino ile temas ettiğinde, bazı pinler kısa devre yapar. Bu, şasiye bakarken odaklanılması gereken büyük bir faktördür.

Kasanızı olabildiğince düşük tutun - bu, bota denge sağlar.

MOTORLAR : Hafif pille çalışan (B.O.) dc kullanın. motorlar.

TEKERLEK TOPU : Normal tekerlekler tek bir eksen boyunca öteleme hareketi sağlar, ancak bir tekerlek bilyesi yüzeyde herhangi bir yönde hareket etmek için tasarlanmıştır. Bize üç tekerden çekiş sağlıyor.

Dört teker yerine üç tekerlekten çekiş tercih edilmesinin nedeni, nispeten daha hızlı dönme hareketidir. Bisiklet çekçeklerinin sürüngenler gibi trafiği delip geçtiğini fark etmişsinizdir. Aynı robotumuz için de geçerli.

SENSÖRLER : Çevremizin herhangi bir fiziksel parametresini algılayan veya ölçen ve onu elektrik sinyallerine dönüştüren cihazdır. Bu durumda tespit edilen parametre kızıl ötesi ışınlardır.

Sensörler, her robot için son derece temeldir. Peki, eğer arduino bizim botumuzun beyni ise, sensörler de gözlerin rolünü oynayabilir. İşte sensörler hakkında birkaç şey:

Sensörler, ledler yere bakacak şekilde yönlendirilmelidir.

Botunuzun ön ucuna yerleştirilmelidir.

Aralarındaki minimum boşluk, siyah çizginin genişliğinden daha büyük olmalıdır.

MOTOR SÜRÜCÜ KARTI : Motor sürücüleri, daha yüksek voltaj gerektiren motorları çalıştırmak için düşük voltaj sinyalleri alan tampon devrelerdir.

Bizim durumumuzda Arduino, motorları sürmek için yeterli voltaj sağlayabilir ancak yeterli akım sağlayamaz. Arduino UNO’nun 5v ve GND pinleri 200mA akım değerine sahipken, herhangi bir GPIO pini 40 mA değerine sahiptir. Bu, ihtiyacımız olan başlangıç ​​ve durma akım motorlarından çok daha düşüktür.

Bu proje için tercih ettiğim iki motor sürücü var: L298N ve L293D. Her ikisi de bu projeyi yapmak için eşit derecede uygundur.

Rağmen, L293D nispeten daha ucuzdur ancak düşük bir akım derecesine sahiptir. Bağlantıları neredeyse aynı. Her ikisi için de bağlantıları verdiğim için, botunuzu nasıl yapacağınız tamamen size kalmış.

GÜÇ KAYNAĞI :

12 voltluk bir adaptör veya pil kullanın (en fazla 12 volt).

Bileşenlerin yerleştirilmesi (önden arkaya):

Botunuzun başındaki sensörler.

Ortada tekerlek tekerleği.

Arkada tek sıra halinde motorlar ve lastikler.

Bağlantılar:

ARDUINO'ya SENSÖRLER :

Sensör pinini gösterildiği gibi arduino pinine bağlayın,

Sensör pimiArduino pimi
VCC (5v)5V
GND (G)GND
SOL SENSÖR ÇIKIŞI (DO)iğne 6
SAĞ SENSÖR ÇIKIŞI (DO)iğne 7

Not: Sensörünüzün açık olup olmadığını kontrol etmek için, cep telefonu kameranızı IR verici ledine doğrultun. Çıplak gözlerimizle görülemeyen ekranda ledin parladığını göreceksiniz. Bazı modern cep telefonu kameralarında Kızılötesi filtresi bulunur. Bu yüzden lütfen bunu hesaba katın.

MOTOR-MOTOR SÜRÜCÜSÜ:

Her motorun, motor sürücüsüne bağlanması gereken iki terminali vardır. Bunları asla doğrudan arduino'ya bağlamayı denemeyin. Size yakın motorlar ve sensörler uzakta olacak şekilde botunuzun arkasından bakarak bunları aşağıdaki şekilde bağlayın:

MOTORL298NL293D
SOL MOTORPIN 1 VE 2PIN 7 VE 8
SAĞ MOTORPIN 13 VE 14PIN 9 VE 10

MOTOR SÜRÜCÜSÜNÜ ARDUINO UNO'ya:

MOTOR SÜRÜCÜSÜ (L298N)ARDUINO ONE
PIN 4ŞARAP
PIN 5GND
PIN 65V
PIN 8 ve PIN 9PIN 3 ve PIN 9
PIN 10 ve PIN 11PIN 5 ve PIN 10
PIN 7 ve PIN 125V
MOTOR SÜRÜCÜSÜ (L293D)ARDUINO ONE
PIN 3ŞARAP
PIN 2GND
PIN 15V
PIN 5 VE PIN 6PIN 3 ve PIN 9
PİM 11 VE PİM 12PIN 5 ve PIN 10
PIN 4 VE PIN 55V

NOT: l298n'nin 8 ve 9 numaralı pinleri, 1 ve 2'ye bağlı motoru kontrol etmek için kullanılır. 13 ve 14 numaralı pinlere bağlı 10 ve 11 kontrol motoruna benzer şekilde, l293d'nin 5 ve 6 numaralı pinleri, bağlı motoru kontrol etmek için kullanılır. 7 ve 8. Ve 9 ve 10 pinlerine bağlı 12 ve 11 kontrol motoru.

İşte tasarım bölümünün sonuna kadar adamız. Hala yapmamız gereken kodlama var ama ondan önce satır takibine izin veren ilkelerden geçeceğiz.

Kızılötesi sensör nasıl çalışır:

Kızılötesi sensörler (IR sensörleri), renklerdeki kontrastı ve nesnelerin ona olan yakınlığını algılamak için kullanılabilir. IR sensörünün çalışmasının ardında yatan prensip oldukça basittir.

Gördüğümüz gibi, iki led var - IR yayan led ve bir fotodiyot. Verici-alıcı çifti olarak hareket ederler. Yayıcı ışınların önüne bir engel geldiğinde, geri yansıtılır ve alıcı tarafından yakalanır.

Bu, engelle karşılaşıldığında gerekli eylemi gerçekleştirmek için mikro denetleyicilere ve çalıştırıcılara beslenebilen dijital bir sinyal üretir.

Temel fizik bize siyah bir cismin üzerinde meydana gelen tüm elektromanyetik radyasyonu emdiğini, beyaz bir cismin ise yansıttığını söyler. Bu ilkeden beyaz ve siyah yüzey arasında ayrım yapmak için bir çizgi takipçisi tarafından yararlanılır.

Bir çizgi izleyen robot nasıl çalışır:

HAT TAKİP DÜZENİ

Normal durumda robot, her iki sensörün de beyaz üzerinde ve siyah çizgi her iki sensörün ortasında olacak şekilde hareket eder.

Her iki motoru da bot ileri yönde hareket edecek şekilde döndürmek için programlanmıştır.

Oldukça doğal olarak, zaman geçtikçe iki sensörden biri siyah çizginin üzerinden gelir.

Sol sensör hattın üzerinden gelirse sol motorlar durur ve bunun sonucunda sol sensör beyaz yüzey üzerine gelmedikçe bot sola dönmeye başlar ve normal duruma ulaşılır.

Benzer şekilde, sağ sensör siyah çizginin üzerine geldiğinde, sağ motorlar durdurulur ve sonuç olarak sensör beyaz yüzey üzerine gelmedikçe bot artık sağa döner. Bu dönüş mekanizması, diferansiyel tahrik mekanizması olarak bilinir.

DEVRE ŞEMASI:

KABLOLAMA DETAYLARI:

PROGRAMLAMA VE KAVRAMLAR:

Devre kısmını yaptıktan sonra şimdi programlama kısmına geçeceğiz. Bu bölümde robotumuzu kontrol eden programı anlayacağız. İşte kod: / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

Kullanılan işlevlerin açıklaması:

read_sensors (): Her iki sensörün okumalarını alır ve bunları sol ve sağ değişkenlerde depolar.

move_forward (): Arduino bu işlevi çalıştırdığında, her iki motor da ileri yönde hareket eder.

turn_left (): Sol motor durur. Bot sola döner.

turn_right (): Sağ motor durur. Bot sağa dönüyor.

halt (): Bot durur.

print_readings (): Seri monitörde sensörlerin okumalarını görüntüler. Bunun için geçersiz kurulumda “Serial.begin (9600)” açıklamasını kaldırmanız gerekir.

SENSÖR OKUMALARI:

HAT ÜZERİNDE SENSÖRSENSÖR OKUMALARI
AYRILDISAĞ
SOL SENSÖR01
SAĞ SENSÖR10
YOK11
HER İKİSİ DE00

HIZ KONTROLÜ:

Bazen motorların hızı o kadar yüksektir ki arduino sensör sinyallerini yorumlamadan önce robot hattı kaybeder. Kısacası bot yüksek hızdan dolayı çizgiyi takip etmiyor ve algoritma doğru olsa bile çizgiyi kaybetmeye devam ediyor.

Bu tür durumlardan kaçınmak için PWM tekniğini kullanarak botun hızını düşürüyoruz. Yukarıdaki kodda değer adında bir değişken var.

Hızı azaltmak için fonksiyondaki sayısal değeri azaltmanız yeterlidir. Arduino UNO'da sadece 0 ile 255 arasında pwm değerlerine sahip olabilirsiniz.

analogWrite (pin, değer)

0<= value <=255

Bu, hat takipçisindeki yazımın sonu. Umarım tüm yanan sorularınızı yanıtlayacak kadar ayrıntılıdır ve en nadir gerçekte değilse, o zaman her zaman sizin için yorum bölümü hazırız. Şüphelerinizi yorumlayın. Mutlu bir tamirat dilerim!




Önceki: DTMF Modülünü Kullanan Cep Telefonu Kontrollü Robot Araba Sonraki: Şifre Kontrollü AC Şebeke AÇMA / KAPAMA Anahtarı