Geçen hafta aldığım arduino mega ile kendime yeni bir hobi edindim. Yaptığım uygulamaları da burada paylaşmayı düşünüyorum ve ilk olarak led yakmadan başlayalım. Bunun için youtube’a kendi çektiğim bir videoyu ekledim, bu videodan da bakabilirsiniz. Kullanacağımız malzemeler şu şekilde:
- Arduino Mega veya Arduino Uno
- 5 adet LED
- 1 adet Board
- Dirençler ve kablolar
LED’leri 5V’a direkt olarak bağlamamanızı tavsiye ederim. Arada direnç kullanmadığınız takdirde LEDleri yakabilirsiniz(kullanılmaz hale gelebilir). Çünkü mavi led yaklaşık 3,4 V ile yanarken diğerleri yaklaşık olarak 2,7 V ile yanmaktadır. Kod kısmına geçmeden önce c#’ta güzel bir arayüz oluşturalım, videoda görüldüğü üzere formumuza 6 adet buton koyalım. Öncelikle videoyu seyretmek isterseniz:
C# Arayüzüyle Arduino’da LED Yakma, Animasyon Oluşturma
C# kodları şu şekilde:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace ArduinoLedYakma
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SeriPort.PortName = “COM7”;
SeriPort.BaudRate = 9600;
SeriPort.Open();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
timer1.Enabled = true;
timer1.Start();
}
private void KirmiziBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“k”);
}
private void MaviBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“m”);
}
private void BeyazBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“b”);
}
private void SondurBtn_Click(object sender, EventArgs e)
{
SeriPort.Write(“s”);
}
private void Animasyon1Btn_Click(object sender, EventArgs e)
{
SeriPort.Write(“1”);
}
private void Animasyon2Btn_Click(object sender, EventArgs e)
{
SeriPort.Write(“2”);
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Opacity += 0.04;
label1.Text = label1.Text.Substring(1) + label1.Text[0].ToString();
}
}
}
Burada tek yaptığımız iş seri porttan arduinoya karakter göndermek. Gönderdiğimiz karakterlere göre arduino ledlerin yanıp sönmesini sağlayacak. Arduino üzerinde LEDleri digital girişlere bağlayınız. Burada da Arduino içerisine yazacağımız kodları veriyorum. Açıklamaları yorum satırı şeklinde yaptım:
int Led1=22;//Mavi
int Led2=24;//Beyaz
int Led3=26;//Kırmızı
int Led4=28;//Mavi
int Led5=50;//Mavi
{
Serial.begin(9600);
pinMode(Led1,OUTPUT);
pinMode(Led2,OUTPUT);
pinMode(Led3,OUTPUT);
pinMode(Led4,OUTPUT);
pinMode(Led5,OUTPUT);
//Ledleri çıkış olarak tanımladık
}void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
if(GelenKarakter == ‘k’)//GelenKarakter “k” ise kırmızı ledi yak
{
digitalWrite(Led3, HIGH);
}
else if(GelenKarakter == ‘m’)//GelenKarakter “m” ise mavi ledi yak
{
digitalWrite(Led1, HIGH);
digitalWrite(Led5, HIGH);
digitalWrite(Led4, HIGH);
}
else if(GelenKarakter == ‘b’)//GelenKarakter “b” ise beyaz ledi yak
{
digitalWrite(Led2, HIGH);
}
else if(GelenKarakter == ‘s’)//GelenKarakter “s” ise ledleri söndür
{
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
}
else if(GelenKarakter == ‘1’)//GelenKarakter “1” ise ledlerı 500 ms aralıklarla sırayla yak
{
for(int i=0; i < 5; i++ )
{
digitalWrite(Led5, LOW);
digitalWrite(Led1, HIGH);
delay(500);
digitalWrite(Led1, LOW);
digitalWrite(Led2, HIGH);
delay(500);
digitalWrite(Led2, LOW);
digitalWrite(Led4, HIGH);
delay(500);
digitalWrite(Led4, LOW);
digitalWrite(Led3, HIGH);
delay(500);
digitalWrite(Led3, LOW);
digitalWrite(Led5, HIGH);
delay(500);
}
}
else if(GelenKarakter == ‘2’)//GelenKarakter “2” ise 300 ms aralıklarla ledleri yak, söndür
{
for(int k=0; k < 7; k++)
{
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, HIGH);
digitalWrite(Led5, HIGH);
delay(300);
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
delay(300);
}
}
}
}
Güzel bir yazı teşekkürler 🙂
Çok teşekkür ederim çok faydalı bir konu olmuş. Elinize sağlık
Rica ederim Teşekkür ederim 🙂
Ustam bende mcp2200 var 2. bölümdeki kodları nereye yazmam gerekiyor ilk bölümdekileri hallettim. Yardımcı olursanız sevinirim 🙂
Bu projede Arduino Mega kullandım, sizin pic programlama ile yapmanız gerekiyor mcp 2200 kullanıyorsanız. Yani ilk kısımdaki kodlar işinizi görmez 🙂 Arduino ile yapacaksanız da Arduino’nun kendi derleyicisi var, onunla derleyip kodları karta upload etmeniz gerekiyor.
ilk bölümdeki kodla 2.kod arasında nasıl bi bağlantı kuracağını anlamadım bide ben arduino uno var cevaplarsanız sevinirim
Bağlantı portlar vasıtasıyla kuruluyor. Bunu Arduino Uno ile de yapabilirsiniz fakat benim belirttiim pinler Arduino Uno’da yok. Örnek olarak kodlarda şu şekilde yazmışım:
int Led1=22;//Mavi
int Led2=24;//Beyaz
int Led3=26;//Kırmızı
int Led4=28;//Mavi
int Led5=50;//Mavi
Siz Uno üzerinde dijital pinlere bakıp ona göre numaralandıracaksınız.
Eline sağlık hocam çok güzel bir çalışma. Uzaktan kumandalı araba üzerinde denedim ve gayet güzel çalıştı.
merhaba paylaşım için teşekkürler ama ben arduino kodunu derleyemedim.
kopyala yapıştır yaptığım zaman baya hata veriyor.Neden olabilir
Merhaba, hataları görmeden birşey diyemem.
merhabalar ben denedim olmadı Error 1 The name ‘SeriPort’ does not exist in the current context C:\Users\Bugra\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 16 1 WindowsFormsApplication1
böyle bir sorunla karşılaştım.bu yazım kısa oldu çünki yaklaşık c# 7-8 tane arduino led yakma projesi denedim buda 9 oldu sanırım hepsinde buna benzer sorunlar alıorum
http://www.picproje.org/index.php?topic=51014.0
http://stackoverflow.com/questions/3034548/serial-port-does-not-exist-in-current-context-c-sharp
Yukarıda verdiğim linkler işinizi görecektir.
merhaba paylaşım icin teşekürler butonlaryerine timer kullanıp örneğim karaşimşekdevresi gibi yapılabilirmi
Merhaba, yapılabilir tabi karaşimşek algoritmasına göre ledleri yaktırabilirsiniz. Zaten animasyon butonları da aynı mantıkla çalışıyor, sıralamayı değiştireceksiniz sadece algoritmaya göre.