Arduino ve ASP.NET MVC ile RGB Led Kontrolü Projesi
Projemde, Arduino' ya internet sitesi üzerinden erişerek RGB Led kontrol ediyorum. Web sitesini ASP.NET MVC ile yaptım. Entity Framework ve LINQ kullandım.
Arduino ile Nesnelerin İnterneti (Internet of Things - IoT)
Günümüz teknolojisi sayesinde internete bağlı olan nesneler, hayatlarımızda yer edinmeye başladı. Akıllı nesneler şu an endüstride, ev ve binaların otomasyonunda, ulaşımda, çevre analizinde, enerji ve sağlık sektöründe yoğun bir şekilde kullanılıyor. Arduino ve Raspberry Pi gibi kartları programlayarak, siz de nesneleri internete bağlayıp kontrol edebilirsiniz. Arduino’nun çeşit çeşit modeli var. Arduino’nun ethernet kartı olmayan versiyonlarında, internet bağlantısı için Ethernet Shield almanız gerekiyor. Raspberry Pi için böyle bir zorunluluk yok çünkü üzerinde ethernet kartı var.
Projeyi Nasıl Yaptım?
Bu projemde, Arduino’ya internet sitesi üzerinden erişerek RGB Led kontrol ediyorum. Önce internet sitesi üzerinde Hex kodunu kırmızı, yeşil ve mavi renk olarak ayırıyorum. Led’i açacaksam, karta mesajı “kırmızı + yeşil + mavi + hex kodu” olarak gönderiyorum. Kapayacaksam “Kapat” mesajı gönderiyorum. Arduino içinde bu gelen mesaja bakıyorum. Eğer mesaj renk açmayla ilgiliyse, mesajı tekrar renklere ayırıp Led’i yakıyorum. “Kapat” mesajı geldiyse Led’i kapıyorum. Ayrıca Arduino’dan, bağlanan siteye RGB Led’in durumuyla ilgili mesaj gönderiyorum. Aynı rengin tekrar açılması istendiyse Led’i ellemiyorum ve siteye “Renk aynı” mesajı gönderiyorum. Kapalıyken kapanması istendiyse, siteye “Kapalı” mesajı gönderiyorum. İnternet sitesine gelen mesaja bakarak, Arduino’nun hangi tarih-saatte açılıp kapandığının ve hangi renk olduğunun bilgisini veri tabanına ekliyorum. Eğer aynı rengi bir daha açma mesajı gönderdiysem veya kapalıyken tekrar kapama butonuna bastıysam, veri tabanına herhangi bir ekleme yapmıyorum ve sayfayı yeniliyorum. İnternet sitesini ASP.NET MVC ile yaptım. Tasarımını Bootstrap ile yaptım. Veri tabanını, Entity Framework kullanarak, Code First tekniğiyle oluşturdum. Veri sorgulama, ekleme ve çıkarma işlemlerini LINQ Ve Entity Framework aracılığıyla yaptım. Projeyi aşağıdaki videodan izleyebilirsiniz:
Projede kullandığım malzemeler
- Arduino Uno Rev3
- Arduino Ethernet Shield
- Breadboard
- 3 x 220 Ω direnç
- 1 x Ortak anot RGB Led
- 4 x İki ucu erkek jumper kablo
Arduino Bağlantı Şeması, Modem Ayarı ve Kodu
Bağlantı Şeması
Not: RGB Led’in uzun bacağı 5V’a bağlanıyor.
Modem Ayarı
Arduino ile internet projelerinde, modemde bir IP ve Port eşleştirme yapmanız gerekiyor. Ben projemde “192.168.1.13” IP’si ve 8090 portunu Arduino ile eşleştirdim. Tarayıcınızın adres satırına “192.168.1.1” yazarak modeminizin paneline ulaşabilirsiniz. Benim kullandığım modemde “Gelişmiş - NAT - Port Eşleştirme” kısmından ayarlama yapılıyor.
Kod
Github üzerinde incelemek için tıklayın.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Kullanılacak kütüphaneler çağrılıyor
#include <SPI.h>
#include <Ethernet.h>
// Kırmızı, yeşil ve mavi renk için sabit oluşturuyorum
const int kirmizi = 6;
const int yesil = 5;
const int mavi = 3;
// Led' in son durumunu bu değişkende tutuyorum. Eğer kapalı değilse son gelen renk hex formatında atanıyor (#000000 gibi)
String sonRenk = "Kapalı";
// Ethernet kalkanının, mac ve ip adresi giriliyor. Başka adreslerle çakışmadığı sürece istenilen girilebilir
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
// Ip adresi elle belirleniyor. istenirse otomatik atama da yapılabilir
IPAddress ip(192,168,1,13);
// HTTP için 8090 portunu açtığım için onu yazıyorum
EthernetServer server(8090);
// Burada gerekli ön hazırlıklar yapılıyor.
void setup() {
// Bilgisayarla seri iletişim başlatılıyor. Saniyede 9600 bit gönderimi ayarlanıyor
Serial.begin(9600);
// Çıkış olarak 3,5,6 numaralı pinler belirleniyor
pinMode(kirmizi, OUTPUT);
pinMode(yesil, OUTPUT);
pinMode(mavi, OUTPUT);
// Led başlangıçta kapatılıyor. Rgb led anot olduğu için HIGH yapınca kapanıyor.
digitalWrite(kirmizi, HIGH);
digitalWrite(yesil, HIGH);
digitalWrite(mavi, HIGH);
// Ethernet belirlenen ip'de çalıştırılıyor
Ethernet.begin (mac, ip);
// Sunucu başlatılıyor
server.begin();
}
// Döngü başlatılıyor
void loop() {
// İstemcinin bağlanmasını bekleniyor
EthernetClient client = server.available();
// Eğer istemci bağlandıysa bu bölüm çalışıyor
if (client) {
String gelen = "";
// İstemci bağlı olduğu sürece bu döngü çalışıyor
while (client.connected()) {
if (client.available()) {
// Arduino'ya bağlanan bilgisayardan gelen mesajın karakteri okunup c değişkenine atanıyor
char c = client.read();
// Seri monitörde gelen karakterleri sırayla yazdırıyorum
Serial.print(c);
// İstemciden gelen karakterler "gelen" isimli stringe ekleniyor
gelen += c;
// Eğer boş bir satırdan sonra tekrar boş bir satıra denk gelinirse HTTP isteği sonlanmış demektir
if (c == '\n') {
// İstemciden gelen mesaj "Kapat" ise led kapanıyor ve sonRenk değişkeni "Kapalı" oluyor.
if (gelen == "Kapat\n") {
client.print(sonRenk);
sonRenk = ledKapa();
//Serial.println(sonRenk);
} else {
// Renk aynı mı diye kontrol etmek amaçlı bir değişken oluşturuyorum
String kontrol = renkAyarla(gelen);
// Eğer renk aynıysa sonRenk aynı kalıyor ve istemciye "Renk aynı" diye mesaj gönderiliyor
if (kontrol == "Renk aynı") {
client.print("Renk aynı");
//Serial.println(sonRenk);
//Serial.println("Renk aynı");
}
// Değilse sonRenk'e yeni gelen renk atanıyor ve istemciye en son gönderdiği renk gönderiliyor
else {
sonRenk = kontrol;
client.print(sonRenk);
//Serial.println(sonRenk);
}
}
break;
}
}
}
// Web tarayıcıya verileri alması için 1 ms zaman veriliyor
delay(1);
// İstemciyle bağlantı sonlandırılıyor
client.stop();
}
}
// Bu metodla rgb led'in renkleri ayarlanıyor
void setColor(int red, int green, int blue) {
analogWrite(kirmizi, red);
analogWrite(yesil, green);
analogWrite(mavi, blue);
}
// Bu metodla rgb led kapanıyor ve "Kapalı" mesajı döndürüyor
String ledKapa() {
digitalWrite(kirmizi, HIGH);
digitalWrite(yesil, HIGH);
digitalWrite(mavi, HIGH);
return "Kapalı";
}
// Rgb led anot olduğu için renk düzenlemesi yapmak gerekiyor
int renkDuzenle (int renk) {
return (255 - renk);
}
// Bu metodla gelen mesaj parçalara ayrılıyor. İstemciye gönderilecek renk belirleniyor
String renkAyarla(String s) {
String red = "";
String green = "";
String blue = "";
String gonderilecekRenk = "";
byte sayac = 1;
// Gelen mesajın tüm karakterleri kontrol ediliyor. '+' karakteri görülürse sayaç arttırılarak diğer renge atama yapılıyor. '\n' ise döngü sonlandırılıyor.
for(int i = 0, r = s.length(); i < r; i++) {
if (s[i] == '+') {
sayac++;
continue;
} else if (s[i] == '\n') {
break;
} else {
if (sayac == 1) {
red += s[i];
} else if (sayac == 2) {
green += s[i];
} else if (sayac == 3) {
blue += s[i];
} else {
gonderilecekRenk += s[i];
}
}
}
// sonRenk değişkeniyle gelen renk aynı ise, "Renk aynı" mesajı döndürülüyor
if (gonderilecekRenk == sonRenk) {
return "Renk aynı";
}
// Renk aynı değilse yeni renk ayarlanıyor ve bu yeni renk döndürülüyor
else {
setColor(renkDuzenle(red.toInt()), renkDuzenle(green.toInt()), renkDuzenle(blue.toInt()));
return gonderilecekRenk;
}
}
ASP.NET MVC Anasayfa, Veri Tabanı Ekranı ve Kodu
Ana Sayfa
Veri Tabanı Ekranı
Kodlar
Model, View ve Controller kodları burada çok yer kaplayacağı için Github sayfa linklerini verdim.
Model:
View:
Controller:
Projeyi indirmek isterseniz:
- Arduino için tıklayın (“Arduino_ile_Internet_Uzerinden_Rgb_Led_Kontrolu” adlı klasör)
- ASP.NET MVC için tıklayın (“RgbLedMvc” adlı klasör)
Diğer yazılarımı incelemek için tıklayın => Erdi Uçar