- Katılım
- 27 Şubat 2019
- Mesajlar
- 12,195
Bu projemde Arduino Promini Kullanarak Zaman Ayarlı Röle yaptım.
Projeyi iki ayrı parça halinde yaptım. Buradaki amacım lcd devresini rahatca istediğim yere yerleştirmekti.
Butonlardan Saniye ve Dakikaya girip start tuşuna bastığımız da röle tetikleniyor ve geri sayım başlıyor.
Geri sayımı MAX7219 SMD entegresi kullanarak 4 Digit 7 Segment Display'e yansıttım.
Entegrenin SMD olması sizi korkutmasın 24 tane delik delmekten her halükarda daha kolay oluyor.
Ayrıca bacak padlerini orjinalden daha kalın çizdim ki kolay lehimleme yapılsın.
Geri sayım bittiğinde röle kendini bırakıyor ve buzzer 6 defa "BIP" leyerek sizi uyarıyor.
Dakika ve saniye sayımını amatörce "delay" fonksiyonu kullanarak ayarladım.
Rahatsız ekmeyecek kadar doğru çalışıyor ancak eğer size çok yüksek doğrulukta geri sayım gerekiyorsa bu kodu kullanmayın.
Devreyi yapmak isteyenler için baskı devrelerin pdf dosyalarını aşağı ekliyorum.
LCD Şeması
LCD Baskı Devre Görünümü
LCD Devre 3D Görüntüsü Ön Tarafı - Arka Tarafı
Arduino Devre Şeması
Arduino Baskı Devre Görünümü
Arduino Devresi 3D Görüntüsü. Ön Tarafı - Arka Tarafı
Arduino Pro Mini Kodları
Projeyi iki ayrı parça halinde yaptım. Buradaki amacım lcd devresini rahatca istediğim yere yerleştirmekti.
Butonlardan Saniye ve Dakikaya girip start tuşuna bastığımız da röle tetikleniyor ve geri sayım başlıyor.
Geri sayımı MAX7219 SMD entegresi kullanarak 4 Digit 7 Segment Display'e yansıttım.
Entegrenin SMD olması sizi korkutmasın 24 tane delik delmekten her halükarda daha kolay oluyor.
Ayrıca bacak padlerini orjinalden daha kalın çizdim ki kolay lehimleme yapılsın.
Geri sayım bittiğinde röle kendini bırakıyor ve buzzer 6 defa "BIP" leyerek sizi uyarıyor.
Dakika ve saniye sayımını amatörce "delay" fonksiyonu kullanarak ayarladım.
Rahatsız ekmeyecek kadar doğru çalışıyor ancak eğer size çok yüksek doğrulukta geri sayım gerekiyorsa bu kodu kullanmayın.
Devreyi yapmak isteyenler için baskı devrelerin pdf dosyalarını aşağı ekliyorum.
LCD Şeması
LCD Baskı Devre Görünümü
LCD Devre 3D Görüntüsü Ön Tarafı - Arka Tarafı
Arduino Devre Şeması
Arduino Baskı Devre Görünümü
Arduino Devresi 3D Görüntüsü. Ön Tarafı - Arka Tarafı
Arduino Pro Mini Kodları
Kod:
//We always have to include the library
#include "LedControl.h"
/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
int dakika = 0 ; // dakika değişkenini tanımlıyoruz
int saniye = 0 ;// saniye değişkenini tanımlıyoruz
int saniye2 = 0;
int dakika2 = 0;
LedControl lc = LedControl(12, 11, 10, 1);
void setup() {
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0, false);
/* Set the brightness to a medium values */
lc.setIntensity(0, 4);
/* and clear the display */
lc.clearDisplay(0);
lc.setDigit(0, 0, 0, false);
lc.setDigit(0, 1, 0, true);
lc.setDigit(0, 2, 0, false);
lc.setDigit(0, 3, 0, false);
//delay(5000);
pinMode( 2 , INPUT); // Min DOWN butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 3 , INPUT); // Min UP butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 5 , INPUT); // Sec UP butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 4 , INPUT); // Sec DOWN butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 7 , INPUT); // START butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 6 , INPUT); // STOP butonların bağlanacağı pinleri giriş olarak tanımlıyoruz
pinMode( 8, OUTPUT); // Rölemizin bağlanacağı pini çıkış olarak tanımlıyoruz
pinMode( 9, OUTPUT); // Buzzerın bağlanacağı pini çıkış olarak tanımlıyoruz
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
Serial.begin(115200);
digitalWrite(9, HIGH); // 200ms Buzzer Aktif
delay(200);
digitalWrite(8, LOW); // Röle Pasif
digitalWrite(9, LOW); // Buzzer Pasif
}
void loop() {
/////////// Saniye Artır ve Azalt /////////////////////
if (digitalRead(5)) // 5. pine bağlı butona basılmışsa
{
if ((saniye2 == 5) && (saniye == 9))
{
saniye = 0;
saniye2 = 0;
lc.setDigit(0, 3, saniye, false);
lc.setDigit(0, 2, saniye2, false);
delay(200);
saniye = -1;
}
if (saniye == 9)
{
saniye = 0;
saniye2 = (saniye2 + 1);
lc.setDigit(0, 3, saniye, false);
lc.setDigit(0, 2, saniye2, false);
delay(200);
saniye = -1;
}
saniye = ( saniye + 1 ) ; // saniyeyi arttırıyoruz
lc.setDigit(0, 3, saniye, false);
delay( 200 );
}
if (digitalRead(4)) // 4. pine bağlı butona basılmışsa
{
if ((saniye2 > 0) && (saniye == 0))
{
saniye2 = (saniye2 - 1);
saniye = 9;
lc.setDigit(0, 3, saniye, false);
lc.setDigit(0, 2, saniye2, false);
saniye = (saniye + 1);
delay(200);
}
saniye = ( saniye - 1 ) ; // saniyeyi azaltıyoruz
lc.setDigit(0, 3, saniye, false);
lc.setDigit(0, 2, saniye2, false);
delay( 200 );
if ((saniye <= 0) && (saniye2 <= 0))
{
saniye = 0;
saniye2 = 0;
}
}
////////////// Dakika Artır ve Azalt ////////////////////
if (digitalRead(3)) // 3. pine bağlı butona basılmışsa
{
if ((dakika2 == 5) && (dakika == 9))
{
dakika = 0;
dakika2 = 0;
lc.setDigit(0, 1, dakika, true);
lc.setDigit(0, 0, dakika2, false);
delay(200);
dakika = -1;
}
if (dakika == 9)
{
dakika = 0;
dakika2 = (dakika2 + 1);
lc.setDigit(0, 1, dakika, true);
lc.setDigit(0, 0, dakika2, false);
delay(200);
dakika = -1;
}
dakika = ( dakika + 1 ) ; // dakikayı arttırıyoruz
lc.setDigit(0, 1, dakika, true);
delay( 200 );
}
if (digitalRead(2)) // 2. pine bağlı butona basılmışsa
{
if ((dakika2 > 0) && (dakika == 0))
{
dakika2 = (dakika2 - 1);
dakika = 9;
lc.setDigit(0, 1, dakika, false);
lc.setDigit(0, 0, dakika2, false);
dakika = (dakika + 1);
delay(200);
}
dakika = ( dakika - 1 ) ; // dakikayı azaltıyoruz
lc.setDigit(0, 1, dakika, false);
lc.setDigit(0, 0, dakika2, false);
delay( 200 );
if ((dakika <= 0) && (dakika2 <= 0))
{
dakika = 0;
dakika2 = 0;
}
}
delay(100); // kararlı çalışması için küçük bir bekleme ekliyoruz
if (digitalRead(7)) // 7. pine bağlı butona basılmışsa sayacı başlatıyoruz.
{
while (saniye2 >= 1 || saniye >= 1 || dakika >= 1 || dakika2 > 0)
{
if (digitalRead(6))
{
saniye = 0;
saniye2 = 0;
dakika = 0;
dakika2 = 0;
lc.setDigit(0, 3, dakika, false);
lc.setDigit(0, 2, dakika2, false);
lc.setDigit(0, 1, dakika, true);
lc.setDigit(0, 0, dakika2, false);
int i = 0;
for (i = 5; i >= 0; i--) {
delay(100);
digitalWrite(9, HIGH); //Buzzer Aktif
delay(600);
digitalWrite(9, LOW); // Buzzer Pasif
}
break;
}
digitalWrite(8, HIGH); // Röle Aktif
saniyeSay();
dakikaSay();
digitalWrite(8, LOW); // Saniye ve Dakika Sıfırlandığında Sayaç Tamamlanmış Olacak ve Röleyi Pasif Yapacak
if ((saniye2 == 0) && (saniye == 0) && (dakika == 0) && (dakika2 == 0))
{
int i = 0;
for (i = 5; i >= 0; i--) {
delay(100);
digitalWrite(9, HIGH); // Buzzer Aktif
delay(600);
digitalWrite(9, LOW); // Buzzer Pasif
}
}
}
}
}
/////////// FONKSİYONLAR //////////
/////////// Saniye Sayma Fonksiyonu /////////////////
void saniyeSay() {
if (saniye > 0)
{
saniye = saniye - 1;
lc.setDigit(0, 3, saniye, false);
delay(1000);
}
if ((saniye == 0) && (saniye2 > 0))
{
saniye = saniye - 1;
saniye = 9;
saniye2 = saniye2 - 1;
lc.setDigit(0, 2, saniye2, false);
lc.setDigit(0, 3, saniye, false);
delay(1000);
}
}
//////////////// Dakika Sayma Fonksiyonu //////////////////////
void dakikaSay() {
if ((dakika > 0) && (saniye2 == 0) && (saniye == 0))
{
saniyeSay();
dakika = dakika - 1;
lc.setDigit(0, 1, dakika, true);
saniye = 10;
saniye2 = 5;
lc.setDigit(0, 2, saniye2, false);
}
if (dakika == 0)
{
saniyeSay();
}
if ((dakika2 > 0) && (dakika == 0) && (saniye2 == 0) && (saniye == 0))
{
dakika2 = dakika2 - 1;
lc.setDigit(0, 0, dakika2, false);
saniye = 10;
saniye2 = 5;
dakika = 9;
lc.setDigit(0, 1, dakika, true);
lc.setDigit(0, 2, saniye2, false);
}
}
Ekler
Son düzenleme: