Top Banner
T.C. MEKATRONİK MÜHENDİSLİĞİ MİKROİŞLEMCİLER YAZI YAZAN ROBOT RAPORU Ekip Üyesi : Okul No : OĞUZ TAHMAZ 140224018 KAAN SALI 140224036 HAKAN KOCAKOYUN 140224072
55

T.C. - Thingiverse

Feb 25, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: T.C. - Thingiverse

T.C.

MEKATRONİK MÜHENDİSLİĞİ

MİKROİŞLEMCİLER

YAZI YAZAN ROBOT RAPORU

Ekip Üyesi : Okul No : OĞUZ TAHMAZ 140224018 KAAN SALI 140224036 HAKAN KOCAKOYUN 140224072

Page 2: T.C. - Thingiverse

İçindekiler :

1. GİRİŞ VE TANITIM............................................................Sayfa 1

2. ELEKTRONİK

2.1 Simulasyon ve Şematik...........................................Sayfa 2

2.2 PCB ve 3D PCB Görünümü......................................Sayfa 3

3. MEKANİK

3.1 Çizilen Mekanizmanın Açıklanması ........................Sayfa 9

3.2 Mekanizma Render ve Montaj Görüntüleri............Sayfa 10

3.3 Teknik Resimler......................................................Sayfa 14

4. YAZILIM

4.1 Kodların Açıklanması..............................................Sayfa 22

4.2 C# Kullanıcı Arayüzü Görselleri...............................Sayfa 22

4.3 C# Kullanıcı Arayüzü Kodları...................................Sayfa 25

4.4 CCS C Kodları..........................................................Sayfa 31

5.SONUÇ

5.1 Yazı Yazan Robot Görselleri....................................Sayfa 53

5.2 Yazı Yazan Robot İle Alınan Baskı...........................Sayfa 53

Page 3: T.C. - Thingiverse

1

GİRİŞ

Bu proje ile Mikroişlemciler dersinde görülen teorik bilgilerin, uygulamalı

proje ile pratiğe dönüştürülmesi amaçlanmıştır. Bu çalışma esnasında bizi

yönlendiren Sn. Yrd. Doç. Dr. Selçuk KİZİR’ e teşekkür ederiz.

TANITIM

Mekanizma tasarımı, devre tasarımı ve yazılımı bu rapor kapağında isimleri

geçen Kocaeli Üniversitesi, Mekatronik Mühendisliği öğrencileri tarafından

yapılmıştır.

Bu proje ile hedeflenen, iki eksende hareket eden mekanizmanın, bilgisayar

arayüzünden girilen harf, rakam, kelime ve cümlelerin kağıda yazdırmasıdır.

Proje; CNC, 3D Printer ve diğer eksenel cihazların çalışma mantığından

yararlanılarak ortaya konulmuştur.

Ürettiğimiz ve Mikroişlemciler dersi kapsamında sunacağımız proje

geliştirilmeye oldukça açıktır. Geliştirilmesiyle birlikte ticarileştirilebilmeye

oldukça uygundur. Z ekseninin mekanizmaya eklenmesi ve geliştirilmesi ile

birlikte çok çeşitli görevi yerine getirme imkanına sahip olabilecek bir

makinedir.

Kullanılabileceği Alanlar :

Afişler ve Duyurular

Davetiyeler

Fazla Sayıda İmza Atılması / Doldurulması Gereken Evraklar

Page 4: T.C. - Thingiverse

2

ELEKTRONİK RAPORU

2.1 Simulasyon ve Şematik

Devre Proteus Circuit Designer ile tasarlandı. İlk olarak Şekil 2.1’de devre şeması aynı zamanda

simulasyon ekranının bir ekran alıntısı verilmiştir. PIC 16F877A Mikrodenetleyicisi kullanılmıştır.

Devrede 1 adet Servo Motor, 2 adet Step Motor çıkışı (X ve Y ekseni), 2 adet besleme girişi (5V,12V),

4 adet buton girişi (Başlat, Sonraki, Önceki Butonları, MCLR ile Sıfırlama Butonu), 1 adet 16*2

Karakter LCD çıkışı ve 1 adet seri iletişim çıkışı bulunmaktadır. Seri iletişim çıkışı, C# arayüzü ile PIC

mikrodenetleyicisini haberleştirmek amacıyla devreye eklenmiştir. Seri iletişim için CP2102 USB to

UART dönüştürücü kullanılmıştır.İletişim bilgisayar vasıtasıyla sağlanacağından butonlar

kullanılmamaktadır ancak ihtiyaç durumunda butonlar aktif edilebilmektedir.

Mikroişlemci : PIC 16F877A

Motor Sürücü : Pololu DRV8825

Step Motorlar : Nema 17

Servo Motor : Art-Tech 9g

Şekil 2.1 Devre Şeması

Page 5: T.C. - Thingiverse

3

2.2 PCB ve 3D PCB Görünümü

Devre’nin PCB’si Proteus Circuit Designer’da tasarlandı. Boyutları 87 mm * 100 mm’ dir.

Şekil 2.2, Şekil 2.2.1 ve Şekil 2.2.2 ‘de görülmektedir. Baskı devrede besleme girişlerinde,

motor sürücülerin Vmotor besleme girişlerinde, mikroişlemci besleme girişlerinde, LCD

besleme girişlerinde gerilim dalgalanmasını önlemek amacıyla kondansatörler kullanıldı.

Besleme girişlerinde ve motor sürülere bağlı olan kapasitörler 15V 100uF’ dır. 4 Mhz’ lik

kristale 22pF kondansatör bağlanmıştır. Bu değer Kristal frekansları için verilmiş olan kapasite

değerlerinden alınmıştır.

Şekil 2.2 PCB 3D Üstten Görünüşü

Page 6: T.C. - Thingiverse

4

Şekil 2.2.1 PCB 3D Önden Görünüşü

Şekil 2.2.2 Üretilmiş PCB

Page 7: T.C. - Thingiverse

5

Şekil 2.2.3 DRV8825 Step Motor Sürücü Bağlantı Şeması

Şekil 2.2.4 DRV8825 Step Motor Sürücü CAD Çizimi

Page 8: T.C. - Thingiverse

6

Şekil 2.2.5 Karakter LCD (16*2)

Şekil 2.2.6 PIC 16F877A

Şekil 2.2.7 PIC 16F877A Pin Çıkışları Şekil 2.2.8 PIC 16F877A Zorunlu

Bağlantıları

C# arayüzü ile mikrodenetleyici iletişimini sağlamak amacıyla CP2102 USB To TTL Dönüştürücü

kullanılmıştır.

Şekil 2.2.9 CP2102 USB To TTL Dönüştürücü

Page 9: T.C. - Thingiverse

7

Devrenin PCB görünüşü Şekil 2.2.10’ de verilmiştir. Devrede 8 adet 2.Katman atlatması vardır.

Gerekli Pin çıkışları’nın isimleri Şekil 2.2.10’ da verilmiştir.

Şekil 2.2.10 PCB

Page 10: T.C. - Thingiverse

8

Şekil 2.2.11 Baskı Devre (87mm * 100mm)

Page 11: T.C. - Thingiverse

9

MEKANİK RAPORU

3.1 Çizilen Mekanizmanın Açıklanması

2D düzleme yazı yazma mekanizması Siemens NX programı ile tasarlandı.Makine ana iki eksen ve

servo ekseni olmak üzere 3 eksenden oluşmaktadır. Tüm plastik parçalar 3D Yazıcıdan basılmıştır.

Baskıda kullanılan malzeme PLA+’ dır.

X ekseni:

İki adet 8mm*427mm krom kaplı indüksiyonlu mil ile sabitlenmiş, GT2 kayış kasnak sistemi ile y

ekseni tahrik edilmektedir. Miller üzerine konumlanmış 4 adet LM8UU lineer rulman ile y ekseni

düşük tolerans payı ile hareket ettirilmektedir.

Şekil 3.1 X Ekseni

Y ekseni:

Z eksenini oluşturan kalem başlığını taşıyan eksendir, x eksenine 4 adet lineer rulman ile

yataklanmıştır. Kayış, kasnak üzerine gerdirilerek y eksenini tahrik eden motor sabit konumlanmıştır.

Şekil 3.1.1 Y Ekseni

Page 12: T.C. - Thingiverse

10

Z ekseni:

Kalemin kağıt üzerinden kalkmasını sağlayan sistemdir, servo motor ile tahrik edilmektedir.

Minimum tolerans payı için 2 adet 3mm lik krom kaplı indüksiyonlu miller kullanılmıştır.

Şekil 3.1.2 Z Ekseni

3.2 Mekanizma Render ve Montaj Görüntüleri

Şekil 3.2 Montajlanmış Mekanizma

Page 13: T.C. - Thingiverse

11

Şekil 3.2.1 Montajlanmış Mekanizma

Şekil 3.2.2 Üretilmiş Mekanizma

Page 14: T.C. - Thingiverse

12

Şekil 3.2.3 Elektronik Kutusu

Şekil 3.2.4 Üretilmiş Elektronik Kutusu

Page 15: T.C. - Thingiverse

13

Şekil 3.2.5 3D Baskı Aşaması

Şekil 3.2.6 PCB + Güç Kaynağı (12V) + Elektronik Kutusu

Montajlanmış Görüntüsü

Page 16: T.C. - Thingiverse

14

3.3 Mekanizma Teknik Resimleri

Page 17: T.C. - Thingiverse

15

Page 18: T.C. - Thingiverse

16

Page 19: T.C. - Thingiverse

17

Page 20: T.C. - Thingiverse

18

Page 21: T.C. - Thingiverse

19

Page 22: T.C. - Thingiverse

20

Page 23: T.C. - Thingiverse

21

Page 24: T.C. - Thingiverse

22

YAZILIM RAPORU

4.1 Kodların Açıklanması

Yazı Yazan Robot’un amacı bilgisayar arayüzünden girilen harflerin, kelimelerin, cümlelerin,

rakamların mekanizma yardımı ve bir kalem ile kağıda yazılmasıdır. Bu amaçla PIC 16F877A

Mikrodenetleyicisi CCS C Derleyicisinde programlanmıştır. Arayüz C#’ta hazırlanmıştır.

CCS C’de C# Arayüzünden gelen verilerin beklenmesi esastır. Arayüzden herhangi bir veri

geldiğinde bu CCS C Derleyicisindeki harf ve rakam fonksiyonlarını çağırır.Bir harfin yazım işlemi

bittiğinde diğer harfin fonksiyonu çağırılır ve bu döngü bu şekilde devam eder. Tüm bu döngü

tamamlandığında mikrodenetleyiciye LCD’ye işlem durumunu yazdırması amacıyla başka bir karakter

gönderilir ve bu karakter fonksiyonunun altında LCD’ye ‘’İŞLEM BİTTİ” yazdırılır veya USB girişi

bilgisayara bağlandığında mikrodenetleyiciye yeni bir karakter yollanır ve LCD’ye “CIHAZ BAGLANDI”

yazdırılır. Örneğin kullanıcı cihazın bilgisayar ile olan bağlantısını kestiğinde LCD’ye ‘’BAGLANTI

KOPTU” yazdırılır. LCD ve C# Arayüzü ile daha kullanıcı dostu ve kullanımı kolay bir makine üretmek

amaçlandı. Ana mantık karakterlerin bilgisayardan mikrodenetleyiciye aktarılması ve buna göre

gerekli fonksiyonların icra edilmesidir.

4.2 C# Kullanıcı Arayüzü Görselleri

Şekil 4.2 Kontrol Paneli Açılış Ekranı

Page 25: T.C. - Thingiverse

23

Şekil 4.2.1 Kontrol Paneli Başarılı Bağlantı Durumu

Şekil 4.2.2 Kontrol Paneli Kesilen Bağlantı Durumu

Page 26: T.C. - Thingiverse

24

Şekil 4.2.3 Kontrol Paneli İşlem Durumu

Şekil 4.2.4 Kontrol Paneli İşlem Bitti Durumu

Page 27: T.C. - Thingiverse

25

4.3 C# Kullanıcı Arayüzü Kodları

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Threading;

using System.Windows.Forms;

using System.IO.Ports; //Giris Cikis Portlari Tanimlaniyor.

namespace WindowsFormsApplication8

{

public partial class Form1 : Form

{

//Değişkenler Tanimlaniyor.

string veri;

int harf_say;

int i = 0;

int j = 0;

string[] ports = SerialPort.GetPortNames(); //Seriportların İsimleri Ports Dizisine Ataniyor.

public Form1()

{

//İlk Olarak Program Arayüzünde Aktif ve Aktif Olmayacak Kısımlar Belirleniyor.

InitializeComponent();

portbox.Enabled = true;

baudbox.Enabled = true;

baglanbtn.Enabled = true;

kesbtn.Enabled = false;

Page 28: T.C. - Thingiverse

26

metinbox.Enabled = false;

puntobox.Enabled = false;

gonderbtn.Enabled = false;

refreshbtn.Enabled = true;

}

private void Form1_Load(object sender, EventArgs e)

{

//Combobox'lara Gerekli İtemler Ekleniyor.

baudbox.Items.Add("300");

baudbox.Items.Add("1200");

baudbox.Items.Add("2400");

baudbox.Items.Add("4800");

baudbox.Items.Add("9600");

baudbox.Items.Add("19200");

baudbox.Items.Add("38400");

baudbox.Items.Add("57600");

baudbox.Items.Add("74880");

baudbox.Items.Add("115200");

baudbox.Items.Add("230400");

baudbox.Items.Add("250000");

puntobox.Items.Add("10");

puntobox.Items.Add("12");

puntobox.Items.Add("14");

puntobox.Items.Add("16");

puntobox.Items.Add("18");

puntobox.Items.Add("20");

puntobox.Items.Add("22");

puntobox.Items.Add("24");

puntobox.Items.Add("26");

puntobox.Items.Add("28");

puntobox.Items.Add("30");

metinbox.Text = "";

baudbox.Text = "9600"; //Mikrodenetleyicimizin Baudrate'i 9600'e Ayarlandığından Kullanıcıya İlk Olarak

//9600 Baudrate Gösteriliyor.

foreach (string port in ports)

{

//İsimleri Alinan Portlar Portbox Combobox'ına Ekleniyor.

Page 29: T.C. - Thingiverse

27

portbox.Items.Add(port);

portbox.SelectedIndex = 0;

}

}

private void baglanbtn_Click(object sender, EventArgs e) //Yazıcıya Bağlan Butonuna Basılınca

//Gerçekleşecek Olaylar Fonksiyonu.

{

//Verileri Gönder Butonuna Basınca Gerçekleşecek Olaylar

try // COM Portta İletişim Kurulacak Cihaz Takılıysa Gerçekleşecek Olaylar.

{

serialPort1.PortName = portbox.SelectedItem.ToString(); //Hangi Seri Port'un Kullanılacağı

//Belirleniyor.

serialPort1.BaudRate = Int32.Parse(baudbox.SelectedItem.ToString()); //Baudrate'in Ne Olacağı

//Belirleniyor.

baudbox.Enabled = false; //Baudrate Combobox'ı Aktif Değil.

portbox.Enabled = false; //Portbox Combobox'ı Aktif Değil.

serialPort1.Open(); //Seri Port İletişime Açılıyor.

metinbox.Enabled = true; //Metinbox Combobox'ı Aktif Değil.

gonderbtn.Enabled = true; //Verileri Gönder Butonu Aktif.

puntobox.Enabled = true; //Puntobox Combobox'ı Aktif Değil.

kesbtn.Enabled = true; //Bağlantıyı Kes Butonu Aktif.

baglanbtn.Enabled = false; //Yazıcıya Bağlan Butonu Aktif.

bilgi.Text = "BAĞLANTI BAŞARILI"; //Bağlantı Durumu Arayüze Yazdırılıyor.

bilgi.ForeColor = System.Drawing.Color.Green; //Bağlantı Durumu'nun Rengi Yeşil Olarak Değiştiriliyor.

serialPort1.Write("+"); //Mikrodenetleyici LCD Ekranına "Bilgisayara Bağlandı" Yazması Sağlanıyor

refreshbtn.Enabled = true; //Baglan Butonuna Basıldığında Yenile Butonunun Aktif Olması Sağlanıyor.

}

catch //COM Portta Hiçbir Cihaz Takılı Değilse Kullanıcıya Uyarı Göster.

{

MessageBox.Show("COM PORTU AÇILAMADI"); //Kullanıcıya Uyarı Veriliyor.

}

}

private void kesbtn_Click(object sender, EventArgs e) //Bağlantıyı Kes Butonuna Basılınca Gerçekleşecek Olaylar Fonksiyonu.

{

Page 30: T.C. - Thingiverse

28

try

{

serialPort1.Write("&"); //Mikrodenetleyici LCD Ekranına "Bağlantı Kesildi" Yazması Sağlanıyor.

serialPort1.Close(); // Seri Port İletişimi Kapatılıyor.

portbox.Enabled = true; //Portbox Combobox'ı Aktif.

baudbox.Enabled = true; //Baudrate Combobox'ı Aktif.

baglanbtn.Enabled = true; //Yazıcıya Bağlan Butonu Aktif.

kesbtn.Enabled = false; //Bağlantıyı Kes Butonu Aktif Değil.

metinbox.Enabled = false; //Metinbox Combobox'ı Aktif Değil.

puntobox.Enabled = false; //Puntobox Combobox'ı Aktif Değil.

gonderbtn.Enabled = false; //Verileri Gönder Butonu Aktif.

bilgi.Text = "BAĞLANTI KESİLDİ "; //Bağlantı Durumu Arayüze Yazdırılıyor.

bilgi.ForeColor = System.Drawing.Color.Red; //Bağlantı Durumu'nun Rengi Kırmızı Olarak Değiştiriliyor.

}

catch

{

serialPort1.Close(); // Seri Port İletişimi Kapatılıyor.

portbox.Enabled = true; //Portbox Combobox'ı Aktif.

baudbox.Enabled = true; //Baudrate Combobox'ı Aktif.

baglanbtn.Enabled = true; //Yazıcıya Bağlan Butonu Aktif.

kesbtn.Enabled = false; //Bağlantıyı Kes Butonu Aktif Değil.

metinbox.Enabled = false; //Metinbox Combobox'ı Aktif Değil.

puntobox.Enabled = false; //Puntobox Combobox'ı Aktif Değil.

gonderbtn.Enabled = false; //Verileri Gönder Butonu Aktif.

bilgi.Text = "BAĞLANTI KESİLDİ "; //Bağlantı Durumu Arayüze Yazdırılıyor.

bilgi.ForeColor = System.Drawing.Color.Red; //Bağlantı Durumu'nun Rengi Kırmızı Olarak Değiştiriliyor.

}

}

private void gonderbtn_Click(object sender, EventArgs e) //Verileri Gönder Butonuna Basılınca

//Gerçekleşecek Olaylar Fonksiyonu.

{

harf_say = metinbox.TextLength; //Arayüzden Yazılan Metnin Uzunluğu Alınıyor.

islem.Text = "İŞLEM SÜRÜYOR..."; //İşlem Yapılırken Kullanıcıya Arayüz Vasıtasıyla İşlem Durumu İle İlgili

//Bilgi Veriliyor.

islem.ForeColor = System.Drawing.Color.DarkOrange; //İşlem Durumunu Gösteren Yazının Rengi

//Turuncu Olarak Değiştiriliyor.

try

Page 31: T.C. - Thingiverse

29

{

harf_say = metinbox.TextLength; //Arayüzden Yazılan Metnin Uzunluğu Alınıyor.

islem.Text = "İŞLEM SÜRÜYOR..."; //İşlem Yapılırken Kullanıcıya Arayüz Vasıtasıyla İşlem Durumu İle

//İlgili Bilgi Veriliyor.

islem.ForeColor = System.Drawing.Color.DarkOrange; //İşlem Durumunu Gösteren Yazının Rengi

//Turuncu Olarak Değiştiriliyor.

serialPort1.Write("-"); //Mikrodenetleyici LCD Ekranının Temizlenmesi Sağlanıyor

Thread.Sleep(3000);

for (i = 0; i < harf_say; i++) //Kullanıcının Arayüz Vasıtasıyla Mikrodenetleyiciye Yolladığı Verileri

//Sırasıyla İşleme Sokuyoruz.

{

veri = metinbox.Text.Substring(j, 1); // Metinbox'a Girilen Metnin İçerisindeki Karakterleri Tek Tek

//Veri Değişkenine Atıyoruz.

j++; //Her Döngüde Bir Sonraki Karaktere Geçmek Amacıyla J'yi Bir Artırıyoruz.

serialPort1.Write(veri); //Metinden Çekilen Her Bir Karakter Her Bir Döngüde Seriporta Yazdırılıyor.

Thread.Sleep(20000); //Verilerin İletişim Sırasında Kaybolmaması ve Atlanmaması İçin İşlem

//Sırasında Arayüzü Bekletiyoruz.Kullanılmaması Durumunda İşlem Sırasında

//Bazı Karakterlerin Aktarılmadığı Gözlemlendi.

}

islem.Text = "İŞLEM BİTTİ..."; //Tüm Veriler Mikrodenetleyiciye Aktarıldıktan Sonra Kullanıcıya Arayüz

//Vasıtasıyla İşlem Durumu İle İlgili Bilgi Veriliyor.

islem.ForeColor = System.Drawing.Color.Green; //İşlem Durumunu Gösteren Yazının Rengi Yeşil Olarak

//Değiştiriliyor.

//i ve j Değişkenleri Sıfırlanıyor.

serialPort1.Write("*"); //Mikrodenetleyici LCD Ekranında "Yazdırma İşlemi Bitti" Yazması Sağlanıyor

i = 0;

j = 0;

}

catch

{

harf_say = metinbox.TextLength; //Arayüzden Yazılan Metnin Uzunluğu Alınıyor.

islem.Text = "İŞLEM DURUMU"; //İşlem Yapılırken Kullanıcıya Arayüz Vasıtasıyla İşlem Durumu İle İlgili

//Bilgi Veriliyor.

islem.ForeColor = System.Drawing.Color.Black; //İşlem Durumunu Gösteren Yazının Rengi Turuncu

//Olarak Değiştiriliyor.

bilgi.Text = "BAĞLANTI KESİLDİ "; //Bağlantı Durumu Arayüze Yazdırılıyor.

Page 32: T.C. - Thingiverse

30

bilgi.ForeColor = System.Drawing.Color.Red; //Bağlantı Durumu'nun Rengi Kırmızı Olarak Değiştiriliyor.

MessageBox.Show("Yazıcı Bağlı Değil");

i = 0;

j = 0;

}

}

private void baudbox_SelectedIndexChanged(object sender, EventArgs e)

{

}

private void refreshbtn_Click(object sender, EventArgs e) //Kullanıcı Mikrodenetleyiciyi Çıkarıp Taktığı

//Zaman Programı Kapatıp Açmak Yerine Yenileme Butonu Sayesinde

// COM Port Durumunu Güncellemesi Sağlanıyor.

{

portbox.Enabled = true;

baudbox.Enabled = true;

baglanbtn.Enabled = true;

puntobox.Enabled = false;

gonderbtn.Enabled = false;

kesbtn.Enabled = false;

serialPort1.Close();

bilgi.Text = "BAĞLANTI KESİLDİ "; //Bağlantı Durumu Arayüze Yazdırılıyor.

bilgi.ForeColor = System.Drawing.Color.Red; //Bağlantı Durumu'nun Rengi Kırmızı Olarak Değiştiriliyor.

portbox.Items.Clear(); //Portbox İtemleri Siliniyor.

portbox.Text = " "; //Portbox'ın Üzerinde Yazan Port'un İsmi Siliniyor.

string[] ports = SerialPort.GetPortNames(); //Seri Port'a Takılı Olan Port İsimleri Alınıp Diziye Atanıyor.

//İsimleri Alinan Portlar Portbox Combobox'ına Ekleniyor.

foreach (string port in ports)

{

portbox.Items.Add(port);

portbox.SelectedIndex = 0;

}

}

}

}

Page 33: T.C. - Thingiverse

31

4.4 CCS C Kodları

//*YAZI YAZAN ROBOT * CCS C KODLARI*

//---------------------------------------------------

#include <16F877A.h> //Kullandıgimiz Microcontroller'in Kutuphanesi Eklendi.

#fuses XT,NOWDT,NOLVP,NOBROWNOUT,NOPROTECT // Harici Kristal Belirtildi.

#use delay(clock=4M)//4 Mhz Kristal Belirtildi.

#define MOTOR_X_STEP PIN_B1 //X Ekseninde Hareket Edecek Olan Step Motor'un Step Sinyalini Alacagi Cikis Belirtildi.

#define MOTOR_Y_STEP PIN_B2//Y Ekseninde Hareket Edecek Olan Step Motor'un Step Sinyalini Alacagi Cikis Belirtildi.

#define MOTOR_X_DIR PIN_B0//X Ekseninde Hareket Edecek Olan Step Motor'un Direction Sinyalini Alacagi Cikis Belirtildi.

#define MOTOR_Y_DIR PIN_B4//Y Ekseninde Hareket Edecek Olan Step Motor'un Direction Sinyalini Alacagi Cikis Belirtildi.

#define SONRAKI PIN_B5//Sonraki Harfe Gecmemizi Saglayan Buton Cikisi Belirtildi.

#define ONCEKI PIN_B6//Önceki Harfe Gecmemizi Saglayan Buton Cikisi Belirtildi.

#define BASLAT PIN_B7//Harf Yazdirmaya Baslamamızı Saglayan Buton Cikisi Belirtildi.

#define SERVO PIN_C3//Servo Motorun Sinyali Alacagi Cikis Belirtildi.

#include <lcd.c> //16*2 LCD Tanımlaniyor.

#use rs232 (baud=9600, xmit=PIN_C6 , rcv=PIN_C7,restart_wdt) //C# Arayüzü ile Haberleşme için İletişim Port ve Baudrate Tanimlamalari

int16 xpos=0 , ypos=0 , son_ypos=0 ,son_xpos=0 ; //Pozisyon Degiskenleri

int16 i=0, j=0 ,k=0 ,s=0, a=0; //Döngülerde ve Fonksiyonlarda Kullanılmak Uzere Tanimlanmis Harf Degiskenleri

//------------------------TANIMLANAN KONUM FONKSIYONLARI---------------------------//

/*Burada Tanimlanan Fonksiyonlarin Amaci Kodu Kisaltmaktir.Her Harfi ve Rakami Tek Tek Kendi Fonksiyonu

Icinde Tanimlamak Yerine Buradaki Konum Fonksiyonlarini Cagirarak Motorlarimiza Gerekli Hareketi Verebiliyoruz.*/

void motor_asagi(int pos) //Step Motoru Asagi Yonde Hareket Ettirme Fonksiyonu

{

son_ypos = ypos + pos; // Pozisyondan Baska Bir Pozisyona Gecildiginde Degisken Son Pozisyon Bilgisini Yeni Bir Degiskene Atiyoruz.

output_high(MOTOR_Y_DIR); //y Eksenindeki Motorun Yonu Ayarlaniyor.

for(i = ypos ; i<son_ypos ; i++) //for Dongusu Ile Step Motor Suruluyor.

{

output_high(MOTOR_Y_STEP);

output_low(MOTOR_Y_STEP);

delay_ms(10);

}

write_eeprom(1,son_ypos/10); //y'nin EEPROM'da Kaydedilmesi Saglaniyor.

ypos = son_ypos; //son_ypos Tekrar ypos Degiskenine Ataniyor.

return;

}

Page 34: T.C. - Thingiverse

32

void motor_sol(int pos)//Step Motoru Sol Yonde Hareket Ettirme Fonksiyonu

{

son_xpos = xpos - pos; // Pozisyondan Baska Bir Pozisyona Gecildiginde Degisken Son Pozisyon Bilgisini Yeni Bir Degiskene Atiyoruz.

output_high(MOTOR_X_DIR); //x Eksenindeki Motorun Yonu Ayarlaniyor.

for(i = xpos ; i>son_xpos ; i--) //for Dongusu Ile Step Motor Suruluyor.

{

output_high(MOTOR_X_STEP);

output_low(MOTOR_X_STEP);

delay_ms(10);

}

write_eeprom(0,son_xpos/10); //x'in EEPROM'da Kaydedilmesi Saglaniyor.

xpos = son_xpos; //son_xpos Tekrar xpos Degiskenine Ataniyor.

return;

}

void motor_yukari(int pos) //Step Motoru Yukari Yonde Hareket Ettirme Fonksiyonu

{

son_ypos = ypos - pos; // Pozisyondan Baska Bir Pozisyona Gecildiginde Degisken Son Pozisyon Bilgisini Yeni Bir Degiskene Atiyoruz.

output_low(MOTOR_Y_DIR); //y Eksenindeki Motorun Yonu Ayarlaniyor.

for(i = ypos ; i>son_ypos ; i--) //for Dongusu Ile Step Motor Suruluyor.

{

output_high(MOTOR_Y_STEP);

output_low(MOTOR_Y_STEP);

delay_ms(10);

}

write_eeprom(1,son_ypos/10); //y'in EEPROM'da Kaydedilmesi Saglaniyor.

ypos = son_ypos; //son_ypos Tekrar ypos Degiskenine Ataniyor.

return;

}

void motor_sag(int pos) //Step Motoru Sag Yonde Hareket Ettirme Fonksiyonu

{

son_xpos = xpos+pos; // Pozisyondan Baska Bir Pozisyona Gecildiginde Degisken Son Pozisyon Bilgisini Yeni Bir Degiskene Atiyoruz.

output_low(MOTOR_X_DIR); //x Eksenindeki Motorun Yonu Ayarlaniyor.

for(i = xpos ; i<son_xpos ; i++) //for Dongusu Ile Step Motor Suruluyor.

{

Page 35: T.C. - Thingiverse

33

output_high(MOTOR_X_STEP);

output_low(MOTOR_X_STEP);

delay_ms(10);

}

write_eeprom(0,son_xpos/10); //x'in EEPROM'da Kaydedilmesi Saglaniyor.

xpos = son_xpos; //son_xpos Tekrar xpos Degiskenine Ataniyor.

return;

}

void motor_sag_yukari(int adim,int x,int y) //Step Motoru Sag Yukarı Capraz Yonde Hareket Ettirme Fonksiyonu

{

for(k=0;k<adim;k++) //For Dongusu Ile Mekanizmaya Capraz Hareketi Vermek Icın x ve y Eksenindeki Motorlar Tek Tek Hareket Ettiriliyor.

{ //Gerekli Fonksiyonlar Teker Teker Cagiriliyor.

motor_yukari(y);

motor_sag(x);

}

k=0; //k Degiskeni Baska Fonksiyonda Kullanilacaginden Sifirlaniyor.

}

void motor_sol_yukari(int adim,int x,int y) //Step Motoru Sol Yukarı Capraz Yonde Hareket Ettirme Fonksiyonu

{

for(k=0;k<adim;k++) //For Dongusu Ile Mekanizmaya Capraz Hareketi Vermek Icın x ve y Eksenindeki Motorlar Tek Tek Hareket Ettiriliyor.

{ //Gerekli Fonksiyonlar Teker Teker Cagiriliyor.

motor_yukari(y);

motor_sol(x);

}

k=0; //k Degiskeni Baska Fonksiyonda Kullanilacaginden Sifirlaniyor.

}

void motor_sag_asagi(int adim,int x,int y) //Step Motoru Sag Asagi Capraz Yonde Hareket Ettirme Fonksiyonu

{

for(k=0;k<adim;k++) //For Dongusu Ile Mekanizmaya Capraz Hareketi Vermek Icın x ve y Eksenindeki Motorlar Tek Tek Hareket Ettiriliyor.

{ //Gerekli Fonksiyonlar Teker Teker Cagiriliyor.

motor_asagi(y);

motor_sag(x);

}

Page 36: T.C. - Thingiverse

34

k=0; //k Degiskeni Baska Fonksiyonda Kullanilacaginden Sifirlaniyor.

}

void motor_sol_asagi(int adim,int x,int y) //Step Motoru Sol Asagi Capraz Yonde Hareket Ettirme Fonksiyonu

{

for(k=0;k<adim;k++) //For Dongusu Ile Mekanizmaya Capraz Hareketi Vermek Icın x ve y Eksenindeki Motorlar Tek Tek Hareket Ettiriliyor.

{ //Gerekli Fonksiyonlar Teker Teker Cagiriliyor.

motor_asagi(y);

motor_sol(x);

}

k=0; //k Degiskeni Baska Fonksiyonda Kullanilacaginden Sifirlaniyor.

}

void servo_onoff (int state) //Servo Motoru Asagi veya Yukari Ayarlamak Icin Tanimlanan Fonksiyon

{

switch (state)

{

case 0: //90 derece aci verecek

{

for(j=10;j>0;j--) //PWM Sayısı

{

output_high(SERVO);//Duty cycle

delay_us(500);

output_low(SERVO);

delay_ms(19);

delay_us(500);

}

break;

}

case 1: //180 derece aci verecek

{

for(j=10;j>0;j--)

{

output_high(SERVO);

delay_us(1500);

output_low(SERVO);

delay_ms(18);

delay_us(500);

Page 37: T.C. - Thingiverse

35

}

break;

}

return;

}

}

//-------------------TANIMLANAN HARF VE RAKAM FONKSIYONLARI-----------------------//

/*Basla Fonksiyonunun Amaci; Yukarida Yazili Olan Yon ve Adim Fonksiyonlari

Vasitasiyla Step Motorlari Cesitli Harfleri ve Rakamlari Cizecek Sekilde Surmesidir.

Her Harf Icin Switch Case'lerden Yararlanilmistir.

Seri Porttan Gelen Her Bir Veri Ile Buradaki Harf,Rakam Durum Fonksiyonlari Cagirilir.

ORNEK 1: motor_asagi(200); Motor Asagi 200 Adimlik Bir Inis Yapacagini Belirtir.

ORNEK 2: servo_onoff(1); Servo Motorun Kalemi Asagi Indirecegini Belirtir.

ORNEK 3: motor_sag_yukari(25,1,2); Motorun Sag Yukari Capraz Olarak 25 Adimlik

For Dongusunde X Motorunu 1'er Y Motorunu 2'ser Adimlarla Hareket

Ettirecegini Belirtir*/

void basla(char c)

{

switch (c)

{

case 'A':

{

motor_asagi(200);

servo_onoff(1);

motor_yukari(150);

motor_sag_yukari(25,1,2);

motor_sag(50);

motor_sag_asagi(25,1,2);

motor_asagi(150);

motor_yukari(100);

motor_sol(100);

servo_onoff(0);

motor_yukari(100);

motor_sag(150);

break;

}

Page 38: T.C. - Thingiverse

36

case 'B':

{

servo_onoff(1);

motor_asagi(200);

motor_sag(80);

motor_sag_yukari(20,1,1);

motor_yukari(60);

motor_sol_yukari(20,1,1);

motor_sol(80);

motor_sag(80);

motor_sag_yukari(20,1,1);

motor_yukari(60);

motor_sol_yukari(20,1,1);

motor_sol(80);

servo_onoff(0);

motor_sag(150);

break;

}

case 'C':

{

servo_onoff(1);

motor_sag(100);

motor_sol(100);

motor_asagi(200);

motor_sag(100);

servo_onoff(0);

motor_sag(50);

motor_yukari(200);

break;

}

case 'D':

{

servo_onoff(1);

motor_asagi(200);

motor_sag(80);

Page 39: T.C. - Thingiverse

37

motor_sag_yukari(20,1,1);

motor_yukari(160);

motor_sol_yukari(20,1,1);

motor_sol(80);

servo_onoff(0);

motor_sag(150);

break;

}

case 'E':

{

motor_sag(100);

servo_onoff(1);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case 'F':

{

motor_sag(100);

servo_onoff(1);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

motor_sol(100);

motor_asagi(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(150);

break;

Page 40: T.C. - Thingiverse

38

}

case 'G':

{

motor_sag(100);

servo_onoff(1);

motor_sol(80);

motor_sol_asagi(20,1,1);

motor_asagi(160);

motor_sag_asagi(20,1,1);

motor_sag(80);

motor_sag_yukari(20,1,1);

motor_yukari(80);

motor_sol(70);

servo_onoff(0);

motor_yukari(100);

motor_sag(120);

break;

}

case 'H':

{

servo_onoff(1);

motor_asagi(200);

motor_yukari(100);

motor_sag(100);

motor_yukari(100);

motor_asagi(200);

servo_onoff(0);

motor_sag(50);

motor_yukari(200);

break;

}

case 'I':

{

servo_onoff(1);

motor_sag(100);

Page 41: T.C. - Thingiverse

39

motor_sol(50);

motor_asagi(200);

motor_sol(50);

motor_sag(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case 'J':

{

servo_onoff(1);

motor_sag(100);

motor_asagi(160);

motor_sol_asagi(20,1,2);

motor_sol(60);

motor_sol_yukari(20,1,2);

servo_onoff(0);

motor_sag(120);

motor_yukari(190);

break;

}

case 'K':

{

servo_onoff(1);

motor_asagi(200);

motor_yukari(100);

motor_sag_asagi(100,1,1);

servo_onoff(0);

motor_yukari(200);

servo_onoff(1);

motor_sol_asagi(100,1,1);

servo_onoff(0);

motor_sag(150);

motor_yukari(100);

break;

Page 42: T.C. - Thingiverse

40

}

case 'L':

{

servo_onoff(1);

motor_asagi(200);

motor_sag(100);

servo_onoff(0);

motor_sag(50);

motor_yukari(200);

break;

}

case 'M':

{

motor_asagi(200);

servo_onoff(1);

motor_yukari(200);

motor_sag_asagi(50,1,2);

motor_sag_yukari(50,1,2);

motor_asagi(200);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case 'N':

{

motor_asagi(200);

servo_onoff(1);

motor_yukari(200);

motor_sag_asagi(100,1,2);

motor_yukari(200);

servo_onoff(0);

motor_sag(50);

break;

}

Page 43: T.C. - Thingiverse

41

case 'O':

{

motor_sag(20);

servo_onoff(1);

motor_sol_asagi(20,1,1);

motor_asagi(160);

motor_sag_asagi(20,1,1);

motor_sag(60);

motor_sag_yukari(20,1,1);

motor_yukari(160);

motor_sol_yukari(20,1,1);

motor_sol(60);

servo_onoff(0);

motor_sag(150);

break;

}

case 'P':

{

motor_asagi(200);

servo_onoff(1);

motor_yukari(200);

motor_sag(80);

motor_sag_asagi(20,1,1);

motor_asagi(80);

motor_sol_asagi(20,1,1);

motor_sol(80);

servo_onoff(0);

motor_yukari(100);

motor_sag(150);

break;

}

case 'R':

{

motor_asagi(200);

servo_onoff(1);

Page 44: T.C. - Thingiverse

42

motor_yukari(200);

motor_sag(80);

motor_sag_asagi(20,1,1);

motor_asagi(60);

motor_sol_asagi(20,1,1);

motor_sol(80);

motor_sag_asagi(100,1,1);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case 'S':

{

motor_sag(100);

servo_onoff(1);

motor_sol(80);

motor_sol_asagi(20,1,1);

motor_asagi(60);

motor_sag_asagi(20,1,1);

motor_sag(60);

motor_sag_asagi(20,1,1);

motor_asagi(60);

motor_sol_asagi(20,1,1);

motor_sol(80);

servo_onoff(0);

motor_yukari(200);

motor_sag(150);

break;

}

case 'T':

{

servo_onoff(1);

motor_sag(100);

motor_sol(50);

motor_asagi(200);

Page 45: T.C. - Thingiverse

43

servo_onoff(0);

motor_yukari(200);

motor_sag(100);

break;

}

case 'U':

{

servo_onoff(1);

motor_asagi(200);

motor_sag(100);

motor_yukari(200);

servo_onoff(0);

motor_sag(50);

break;

}

case 'V':

{

servo_onoff(1);

motor_sag_asagi(50,1,4);

motor_sag_yukari(50,1,4);

servo_onoff(0);

motor_sag(50);

break;

}

case 'Y':

{

servo_onoff(1);

motor_sag_asagi(50,1,2);

motor_sag_yukari(50,1,2);

motor_sol_asagi(50,1,2);

motor_asagi(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(100);

break;

Page 46: T.C. - Thingiverse

44

}

case 'Z':

{

servo_onoff(1);

motor_sag(100);

motor_sol_asagi(100,1,2);

motor_sag(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case '1':

{

motor_asagi(20);

servo_onoff(1);

motor_sag_yukari(20,1,1);

motor_asagi(200);

motor_sol(50);

motor_sag(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case '2':

{

servo_onoff(1);

motor_sag(100);

motor_asagi(100);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

servo_onoff(0);

motor_yukari(200);

Page 47: T.C. - Thingiverse

45

motor_sag(50);

break;

}

case '3':

{

servo_onoff(1);

motor_sag(100);

motor_asagi(100);

motor_sol(100);

motor_sag(100);

motor_asagi(100);

motor_sol(100);

servo_onoff(0);

motor_yukari(200);

motor_sag(150);

break;

}

case '4':

{

servo_onoff(1);

motor_asagi(100);

motor_sag(100);

motor_yukari(100);

motor_asagi(200);

servo_onoff(0);

motor_yukari(200);

motor_sag(50);

break;

}

case '5':

{

motor_sag(100);

servo_onoff(1);

motor_sol(100);

motor_asagi(100);

Page 48: T.C. - Thingiverse

46

motor_sag(100);

motor_asagi(100);

motor_sol(100);

servo_onoff(0);

motor_sag(150);

motor_yukari(200);

break;

}

case '6':

{

motor_sag(100);

servo_onoff(1);

motor_sol(100);

motor_asagi(200);

motor_sag(100);

motor_yukari(100);

motor_sol(100);

servo_onoff(0);

motor_sag(150);

motor_yukari(100);

break;

}

case '7':

{

servo_onoff(1);

motor_sag(100);

motor_asagi(200);

servo_onoff(0);

motor_sag(50);

motor_yukari(200);

break;

}

case '8':

{

servo_onoff(1);

Page 49: T.C. - Thingiverse

47

motor_asagi(200);

motor_sag(100);

motor_yukari(200);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

servo_onoff(0);

motor_sag(150);

motor_yukari(100);

break;

}

case '9':

{

motor_asagi(200);

servo_onoff(1);

motor_sag(100);

motor_yukari(200);

motor_sol(100);

motor_asagi(100);

motor_sag(100);

servo_onoff(0);

motor_sag(50);

motor_yukari(100);

break;

}

case '0':

{

servo_onoff(1);

motor_asagi(200);

motor_sag(100);

motor_yukari(200);

motor_sol(100);

servo_onoff(0);

motor_sag(150);

break;

}

Page 50: T.C. - Thingiverse

48

case ' ':

{

if(s!=0) //s = 0 Degilse Yazicinin Imleci En basta Degildir.O Zaman Imlec

//Bir Yana Kayarak Bosluk Karakterini Olusturabilir.

{

motor_sag(150); //Bosluk Olusturmak Icin Kullanilan Fonksiyon

}

if(s==0) //s = 0 ise Imlec Ilk Bastadir ve Ilk Basta Gereksiz Bosluk Karakteri

//Olusturulmasi Istenmez Bunun Icın Burada Seri Iletisimde Gelen Veriyi

//Saymak Icın Kullandigimiz ve Her Gelen Veride 1 Artirdigimiz s Degiskenini

//Gereksiz Yere Yazdirilmayan Bir Harf Icin Artirmak Istemeyiz.

//Artirilan S Degiskenini Burada s = 0 Sarti Icin -1 Azaltiyoruz.

{

s--;

}

break;

}

case '-': //LCD'ye Islem Durumunu Yazdiran ve Seri Iletisimle Arayuzden Gelen '-' Karakteri

{

s--; //Harf veya Rakam Yazdirilmadigindan Gereksiz Artirilan s Degiskenini -1 Azaltiyoruz.

printf(lcd_putc,"\f"); //LCD Temizlendi.

lcd_gotoxy(1,1); //LCD Imleci 1,1 Konumuna Gidiyor.

printf(lcd_putc,"ISLEM SURUYOR..."); //LCD'ye Yazdiriliyor.

lcd_gotoxy(1,2); //LCD Imleci 1,2 Konumuna Gidiyor.

printf(lcd_putc,"BEKLEYINIZ..."); //LCD'ye Yazdiriliyor.

break;

}

case '+': //LCD'ye Islem Durumunu Yazdiran ve Seri Iletisimle Arayuzden Gelen '+' Karakteri

{

s--; //Harf veya Rakam Yazdirilmadigindan Gereksiz Artirilan s Degiskenini -1 Azaltiyoruz.

printf(lcd_putc,"\f"); //LCD Temizlendi.

lcd_gotoxy(1,1); //LCD Imleci 1,1 Konumuna Gidiyor.

printf(lcd_putc,"CIHAZ BAGLI!.."); //LCD'ye Yazdiriliyor.

break;

}

Page 51: T.C. - Thingiverse

49

case '&': //LCD'ye Islem Durumunu Yazdiran ve Seri Iletisimle Arayuzden Gelen '&' Karakteri

{

s--; //Harf veya Rakam Yazdirilmadigindan Gereksiz Artirilan s Degiskenini -1 Azaltiyoruz.

printf(lcd_putc,"\f"); //LCD Temizlendi.

lcd_gotoxy(1,1); //LCD Imleci 1,1 Konumuna Gidiyor.

printf(lcd_putc,"BAGLANTI KOPTU!"); //LCD'ye Yazdiriliyor.

break;

}

case '*': //LCD'ye Islem Durumunu Yazdiran ve Seri Iletisimle Arayuzden Gelen '*' Karakteri

{

s--; //Harf veya Rakam Yazdirilmadigindan Gereksiz Artirilan s Degiskenini -1 Azaltiyoruz.

printf(lcd_putc,"\f");

lcd_gotoxy(1,1);

printf(lcd_putc,"YAZDIRMA ISLEMI");

lcd_gotoxy(1,2);

printf(lcd_putc,"BITTI!..");

break;

}

}

return;

}

//----------------------SERI PORT HABERLESME KESMESI--------------------------//

#int_rda //Haberlesme Seri Iletisim Kesmesi

void seri_kesme()

{

disable_interrupts(int_rda);

basla(getc()); // Seri Porttan Her Bir Gelen Verinin Yazdirilmasi

//Icin Basla Fonksiyonu Calistiriliyor.

s++; //Her Gelen Veri Satir Sinir Islemlerini Yapmak Icin Sayiliyor

delay_ms(5);

if(s==10) //Mekanizma Satirda 10'dan Fazla Karakter Yazamadigindan 10 Karakterden

//Sonra Imlec Bir Asagi Sutuna Inmeli

{

Page 52: T.C. - Thingiverse

50

if(read_eeprom(0)!=0) //Eepromda x Konumu Sifir Olarak Kayitli Degilse

{

output_high(MOTOR_X_DIR); //-X Yonu Tanimlandi

for(i = xpos ; i>0 ; i--) //Xpos Sifirlaniyor X Ana Konumunda Donuyor.

{//Step Motor Suruluyor.

output_high(MOTOR_X_STEP);

output_low(MOTOR_X_STEP);

delay_ms(10);

}

write_eeprom(0,1); //Eeprom'daki X Konumu 0 Yapildi.

xpos = 1; //Konum Degerlerini Eeprom Almadigindan 10'a Bolerek Eeprom'da

//Sakliyoruz.10'a Bolmek xpos = 0 Oldugunda 0 /10 Durumundan

//Oturu Beklenmeyen Sonuclar Veriyor.Bundan Dolayi Xpos = 1 Yapiyoruz.

}

s=0; //Bir Sonraki Satira Indigimizde Imlecimiz Ilk Konumda Oldugundan s = 0 Yapiyoruz.

servo_onoff(0); //Kalemi Yukari Kaldiriyoruz.

motor_asagi(250); //Motoru Asagi Indiriyoruz.

}

}

//-------------------ANA (MAIN) FONKSIYONU-----------------------//

void main()

{

setup_adc(ADC_OFF); //Analog Dijital Cevirici Kapali Olarak Ayarlandi.

setup_adc_ports(NO_ANALOGS); //Analog Cikislar Kullanilmayacak.

enable_interrupts(GLOBAL); //Kesmeler Acildi.

set_tris_d(0x00); //D Portu Cikis Olarak Kullanilacak.

output_d(0x00); //D Portu Cikislari 0'dir.

lcd_init(); //LCD’yi Kullanima Hazirla.

lcd_gotoxy(1,1); //LCD Imlecini 1,1 Konumuna Al.

printf(lcd_putc,"YAZI YAZAN ROBOT"); //LCD'ye Yazdirildi.

for(a=1;a<17;a++) //For Dongusu Vasitasiyla LCD'nin 2. Satirina Yildizlar

//Sirasiyla Cizdiriliyor

{

lcd_gotoxy(a,2);

printf(lcd_putc,"*");

delay_ms(200);

Page 53: T.C. - Thingiverse

51

}

delay_ms(1000);

printf(lcd_putc,"\f"); //LCD Temizlendi.

lcd_gotoxy(1,1); //LCD Imleci 1,1 Konumuna Gitti.

/*

lcd_gotoxy(1,1);

printf(lcd_putc,"----KONUMLAR----");

lcd_gotoxy(1,2);

printf(lcd_putc,"--SIFIRLANIYOR--");

xpos=read_eeprom(0);

ypos=read_eeprom(1);

if(xpos==0){

xpos=1;}

if(ypos==0){

ypos=1;}

xpos=xpos*10;

ypos=ypos*10;

if(read_eeprom(0)!=0)

{

output_high(MOTOR_X_DIR);

for(i=xpos;i>0;i--){

output_high(MOTOR_X_STEP);

output_low(MOTOR_X_STEP);

delay_ms(10);

}

write_eeprom(0,1);

xpos=1;

}

if(read_eeprom(1)!=0)

{

output_low(MOTOR_Y_DIR);

for(i=ypos;i>0;i--){

output_high(MOTOR_Y_STEP);

output_low(MOTOR_Y_STEP);

delay_ms(10);

}

Page 54: T.C. - Thingiverse

52

write_eeprom(1,1);

ypos=1;

}

*/

printf(lcd_putc,"VERI BEKLENIYOR."); //LCD'ye Yazdiriliyor ve PC'den Veri Bekleniyor.

while(TRUE) //Sonsuz Dongude PC'den Veri Bekleniyor ve Beklenen Veriler Isleniyor.

{

enable_interrupts(int_rda); //Iletisim Kesmesi.

}

}

Page 55: T.C. - Thingiverse

53

SONUÇ

5.1 YAZI YAZAN ROBOT

Şekil 5.1’de Yazı Yazan Robot’un üretilmiş hali görülmektedir.

Şekil 5.1 Yazı Yazan Robot

5.2 YAZI YAZAN ROBOT İLE ALINAN BASKI

Aşağıda, Şekil 5.2’ de Yazı Yazan Robot’un başarılı bir şekilde yazı yazdığı ilk örneklerden biri

görülmektedir.

Şekil 5.2 Yazı Yazan Robot ile Alınan Baskı