Forum
Arkadaşlar,
Nasıl anlatacağım bilmiyorum ama hiç bilmediğim ve sadece merakımdan bir iş yapmak istiyorum.
Küçük bir konsol uygulaması ile kapı kilidi açmak istiyorum. Basitçe anlatmak istediğim için kapı kilidi dedim. Bilgisayar ile kilit arasında sanırım bir elektronik kart olacak ve o karta göndereceğim komut ile kilit mekanizması çalışacak.
Sorum şu; hiç yapmadım ve nereden nasıl başlayacağımı bilmiyorum. Neyi araştırmalıyım, c# dili ile yapılır mı? Başka yazılım dilleri de gerekecek mi?
Yardımcı olurmusunuz?
Merhaba,
Öncelikle kapı kilidini açacak bir elektronik ekipmana ihtiyaç var, elektronik bilgin yoksa seni zorlayacak kısım burası. Örneğin bir Arduino ile elektronik kilitleri açtırabilirsin fakat bunun için az biraz elektronik şart, arduino içerisine kod yazmak içinde c++ lazım.
Hepsini yaptığın sayarsak evet c# ile seri veya bluetooth üzerinden elektronik karta bilgi vererek kilit açıp kapattırabilirsin.
Merhaba,
1- 1 adet Arduino Uno R3
2- 2 adet SERIAL CAN BUS MODULE WITH MCP2551 AND MCP2515
3- 1 adet istediginiz uzunlukta veri iletimi icin bakir tel (Uzunluk kismina dikkat ediniz cünkü programlamaya calistiginiz veri iletisimi sisteminde verilerin belirli uzunluklara kadar garanti etmektedir.)
4- 1 adet Arduino Uno R3 uyumlu kilitlemek icin gereken elektronik kartiniz. Bunu sizin belirlemeniz gerekmekte ve UART + CAN uyumlu olmasi gerekiyor.
Kullanabileceginiz alternatif IDE'ler : Visual Studio 2019, Arduino IDE
Eger Visual Studio ile deneyiminiz varsa bunu C# ya da C/C++ ile seri iletisim örneklerine bakarak yapabilirsiniz. Arduino IDE icin de bolca örnekler yine internet üzerinde mevcut. Bir bilgisayara bagli olarak kumanda etmek istersneiz de farkliliklar dogmaktadir. Mesela bilgisayarin USB iletisim kanali ile mi yoksa ek satin aldiginiz bir PCI kartina monte edilmis D-Sub 9 yuvasi üzerinden mi haberleseceksiniz.. Biz yazimiza basit USB tarafindan bakalim simdilik. Ek kartlar üzerine monte edilmis D-SUB 9 yuvalari haberlesmesi icin yine üreticinin ek kaynak doslayarina ihtiyaciniz olacaktir. Tabii ki C#, C/C++ dilleri ile de iletisim saglayabilirsiniz. Ancak C# ve C/C++ dillerinde de programlamanin bu yönünde büyük farkliliklar mevcut. Yani C# ile kisace bir namespace tanimlarken, C/C++ tarafinda ya üretici baslik doslayarini, ya kendi USB ile haberlesen sabitlerin tanimlamalarini ve arti port tanimlamalarini yazmak zorundasiniz ve da gerisi gelen birtakim zorunluluklar.
Kisa Aciklama :
Arduino IDE ile kilitlemek icin düsündügünüz kodlari Arduino UNO kartiniza upload edeceksiniz ve yine bu karta baglanti sagladiginiz Serial Can Bus modül üzerinden kilitlemek icin aldiginiz karta monte ettiginiz ikinci CAN Bus modülüne veri gönderecegiz. Kilitleme kartiniza bagli olan ikinci Can Bus modülü de aldigi veriyi yine kilitleme kartiniza gönderecek. Burdan sonrasi mekanik olarak calismak zorunda. Yani kilitlemek icin aldiginiz kart kilitleme islemini gerceklestirecek. Orasini sizin planlamaniz gerekmektedir. Altyapi olarak sadece alternatif bilgi olmasi acisindan size bu örnegi yaziyorum.
Burada CAN Bus modülü kullanmamizin sebebi ise Arduino UNO karti ile kilitlemek icin aldiginiz kilitleme kartinin arasindaki mesafeyi istediginiz uzunlukta ayarlayabilmenizi saglamaktir. Ancak bununda sinirlari oldugunu hatirlatmak istiyorum.
İletim Mesafelerine Göre Bus Hızları (ISO 11898 standartlari) / max 30 dügüm / Sonlandirma direnci 120 Ohm :
Bus Uzunluğu (metre) Maksimum Bit Oranı (bit/s)
40 1 Mbit/s
100 500 kbit/s
200 250 kbit/s
500 125 kbit/s
6000 10 kbit/s
Ek bilgi olarak ISO 115119-2, ISO 11898-3 standartlari da mevcuttur. Kanumuz bu olmadigi icin detaylara girmiyorum.
Bu mesafelere ve sectiginiz iletim hizina / frekansina dikkat etmek zorundasiniz. CAN Protokolü basli basina cok genis bir konu oldugu icin lütfen türkce kaynaklardan yardim aliniz. Cok kisa bahsetmek gerekirse (Yildiz Teknik Üni. dökümanlarindan alintidir.) :
"CAN haberleşme protokolü Robert Bosch tarafından otomotiv sektöründe kullanılmak üzere 1980'li yılların sonuna doğru geliştirilmiş 'akıllı' aygıtları bir sistem veya alt-sistem içinde birbirleriyle haberleştiren seri haberleşme protokolüdür. Multi-Master yöntemi uyumlu sistemlerde kullanılır. Her CAN düğüm (aygıt) birbirleriyle haberleşebilir ve eşzamanlı cevaplar alabilir. Gerçek-zamanlı sistemlerde de kullanılır. ISO 11898 ile uluslararası standartları belirlenmiştir ve ISO/OSI referans modelinin en alt iki
katmanının da temelini oluşturur."
Bu protokol sayesinde hem kilitleme aygitiniza bakir tel araciligiyla uzaktan komut gönderebileceksiniz, hem de istediginiz farkli aygitlari da ayni zamanda bu sistem icerisinde kullanmak isterseniz entegre edebileceksiniz. Yalniz aygitlarinizi cogaltmayi düsünürseniz bu konu da ap ayri bir bilgi birikimini gerektirmektedir. CAN Frame'leraraciligiyla haberlesmektedir ve basitten coklu sisteme dogru adim atarken lütfen gerekli dökümanlardan faydalanin. Bu konuda size "The AVR Microcontroller and Embedded Systems" / Mazidi'nin Pearson baskisini kesinlikle tavsiye ediyorum. AVR tabanli olmasina karsin yine harikalar yaratan bir kitap yazmistir.
Arduino IDE ile ID 0x55'e veri gönderimi örnegi :
#include <Serial_CAN_Module.h>
#include <SoftwareSerial.h>
Serial_CAN can;
#define can_tx 2 // tx of serial can module connect to D2
#define can_rx 3 // rx of serial can module connect to D3
void setup()
{
Serial.begin(9600);
can.begin(can_tx, can_rx, 9600); // tx, rx
Serial.println("begin");
}
unsigned char dta[8] = {1, 2, 3, 4, 5, 6, 7, 8};
// send(unsigned long id, byte ext, byte rtrBit, byte len, const byte *buf);
void loop()
{
can.send(0x55, 0, 0, 8, dta); // SEND TO ID:0X55
Serial.println("Mesaj gonderildi");
delay(100);
}
Kartlariniz arasindaki baglantilar hayati önem tasimaktadir. Ayrica baglantilarinizin dogru oldugundan eminseniz seri haberlesme hizinizi da sistemizin durumuna göre ayarlamaniz gerekmektedir. Yani her iki tarafta alici/verici de ayni frekansta calismasi gerekmektedir. Istisnai durumlar haric. Onlarda konumuz icerisinde olmadigindan aciklamaya su an gerek yok diye düsünüyorum.
Aldiginiz CAN Bus modüllerinin 120 Ohm sonlandirma direnclerini de etkinlestirmeniz gerekebilir. Herseyden önce mutlaka ama mutlaka ilk önce bir plan yapin ve hangi standartlarda, hangi protokol üzerine nasil bir sistem gelistirmek istediginize karar verip bilgi sahibi olduktan sonra adim atmanizi tavsiye ediyorum. Aksi halde aldiginiz parcalarda uyum sorunlulugundan tutun, stabil calismama veya ghic calismama ya da diger tonlarca hata ile karsilasabilirsiniz. Buradaki kisa yazimda bir cok eksik oldugunun farkindayim ancak sadece kisa bir bilgi vermek adina girisi yapmaya calistim.
Eger sadece Arduino UNO ile bir baslangic yapip ise alismak acisindan sadece ona yönelik birkac satir program yazip yükleyebilir ve PuTTy veya yine Arduino'nun kendi icerisindeki "Serial Monitör" ile yaptiklarinizi ekrana basabilirsiniz. Planlama yaptiktan sonra adim adim ilerleyebilirsiniz.
Saygilarimla
There is always something you miss.
@enisciftci @aliuysal çok teşekkür ederim verdiğiniz cevaplar için.