Arduino Geri Sayım Sayacı
Kategori: Arduino 496 kez okunmuş. Yorum Yok 22 Nisan 2018

Bu eğitimde Arduino kullanarak bir Geri Sayım Sayacının nasıl yapıldığını göreceğiz. Burada zaman almak için herhangi bir Gerçek Zaman Saati (Real Time Clock – RTC) modülü kullanmıyoruz. Zaman süresi kullanıcı tarafından Keypad ve 16×2 LCD yardımıyla sağlanacak. Zamanlayıcı Sıfır’a ulaştığında, Buzzer yardımı ile ikaz sesi ötecek.

 

Gerekli Malzemeler

  • Arduino UNO
  • LCD 16 * 2
  • 4 * 4 matris tuş takımı
  • Buzzer
  • Buton
  • Potansiyometre (10k)
  • Direnç (10k, 100 ohm)
  • Bağlantı kablosu

 

Devre şeması

 

Bu devrede Arduino Uno kullanacağız. Zaman süresini beslemek için bir tuş takımı ve geri sayımı görüntülemek için 16 * 2 LCD kullanıyoruz. Buton zamanı başlatmak için kullanılır.

 

Bağlantılar ve Kodlama

 

Öncelikle, keypad ve LCD için kütüphaneleri ve kodda kullanılan değişkenleri tanımlıyoruz.

 

#include <LiquidCrystal.h>
#include <Keypad.h>

long int set1;
long int set2;
long int set3;
long int set4;
long int j;
int t1, t2, t3, t4, t5, t6;
int r1, r2, r3;
char key;
String r[8];
String hours;
String minutes;
String seconds;

Ardından tuş takımını tanımlıyoruz.

// Define the Keymap
char keys[ROWS][COLS] = {

 {'1','2','3','A'},

 {'4','5','6','B'},

 {'7','8','9','C'},

 {'*','0','#','D'}

};

Arduino ile 4 * 4 matris tuş takımını bağlamak için, satır ve sütunların pinlerini tanımlamalıyız. Bu nedenle aşağıdaki kodda, Tuş Takımı ve 16×2 LCD için pinleri tanımladık.

byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins
byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t

LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

Tuş takımını tanımlıyoruz

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

 

“setup” fonksiyonunda seri port başlangıcı, lcd bağlantısı ve pin bağlantılarını tanımlıyoruz.

void setup()
 {
 lcd.begin(16,2);
 Serial.begin(9600);
 pinMode(A0, OUTPUT);
 pinMode(A1, OUTPUT);
 pinMode(A3, INPUT);
 pinMode(A4, OUTPUT);
}

Sayacın süresi için bir fonksiyon tanımlıyoruz: “setFeedingTime”. Burada süreyi alıp “D” tuşuna basınca sayacı başlatacak kodları yazıyoruz.

void setFeedingTime()
{
 feed = true;
 int i=0;

 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Set feeding Time");
 lcd.clear();
 lcd.print("HH:MM:SS");
 lcd.setCursor(0,1);

 while(1){
 key = kpd.getKey();
 char j;

 if(key!=NO_KEY){
 lcd.setCursor(j,1);
 lcd.print(key); 
 r[i] = key-48;
 i++;
 j++;

 if (j==2 || j == 5)
 {
 lcd.print(":"); j++;
 }
 delay(500);
 }

 if (key == 'D')
 {key=0; break; }
 }
 lcd.clear();
}

 

 

Bu Arduino Timer’ın çalışması basittir, ancak kod biraz karmaşıktır. Kodları açıklayalım.

İlk olarak, butona basana kadar LCD ekranda “Arduino Timer” yazdıracaktır. Butona bastığınız anda, “setFeedingTime” işlevini çağırarak geri sayım süresini girmenizi isteyecektir. Ardından tuş takımını kullanarak zaman süresini girebilirsiniz. Daha sonra zamanı kaydetmek ve geri sayım zamanlayıcısına başlamak için ‘D’ tuşuna basmanız gerekir. Burada void loop () fonksiyonunda, saniye olarak saniyeyi azaltmak ve kalan süreye göre Saat, Dakika ve Saniye (HH: MM: SS) değerlerini göstermek için bazı hesaplamalar yaptık. Buzzer kısmı alttaki kodlarda bulunuyor.

 

 

 

 

Tüm kodlar

#include <LiquidCrystal.h>
#include <Keypad.h>

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

long int set1;
long int set2;
long int set3;
long int set4;
long int j;

String hours;
String minutes;
String seconds;
// Define the Keymap

char keys[ROWS][COLS] = {

{'1','2','3','A'},

{'4','5','6','B'},

{'7','8','9','C'},

{'*','0','#','D'}

};

byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins
byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

int t1, t2, t3, t4, t5, t6;
int r1, r2, r3;

boolean feed = true; // condition for alarm

char key;
String r[8];

void setFeedingTime()
{
feed = true;
int i=0;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set feeding Time");
lcd.clear();
lcd.print("HH:MM:SS");
lcd.setCursor(0,1);
while(1){
key = kpd.getKey();

char j;

if(key!=NO_KEY){

lcd.setCursor(j,1);

lcd.print(key);

r[i] = key-48;
i++;
j++;

if (j==2 || j == 5)
{
lcd.print(":"); j++;
}
delay(500);
}

if (key == 'D')
{key=0; break; }
}
lcd.clear();
}

void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A3, INPUT);
pinMode(A4, OUTPUT);
}

void loop()
{
lcd.setCursor(0,0);
lcd.print("Arduino Timer");
//Serial.println(A3);

if (digitalRead(A3)==1) //
{
lcd.clear();
setFeedingTime();
for(int i = 0; i < 6; i++)  // this for loop is used to get the value of the feeding time and print it serially
{
Serial.print(r[i]);
Serial.println();
}

hours = String (r[0]) + String (r[1]) ; //combining two separate int values of r[0] and r[1] into one string and save it to "hours"
minutes = String (r[2]) + String (r[3]) ;  //combining two separate int values of r[2] and r[3] into one string and save it to "minutes"
seconds = String (r[4]) + String (r[5]) ;  //combining two separate int values of r[4] and r[5] into one string and save it to "seconds"
set1 = (hours.toInt()*3600); //converting hours into seconds
set2 = (minutes.toInt() * 60);  //converting minutes into seconds
set3 = seconds.toInt();
set4 = (hours.toInt() * 3600)+ (minutes.toInt() * 60) + seconds.toInt(); //adding set1, set2 and set3 together in set4
Serial.print("set4");
Serial.print(set4);
Serial.println();

lcd.setCursor(0,0);
lcd.print("Countdown begins");
delay(1000);
lcd.clear();

for(long int j = set4; j >= 0; j--) // this for loopis used to decrease the total time in seconds
{
Serial.println(j);

lcd.setCursor(0,0);
lcd.print("HH:MM:SS");

long int HH = j / 3600; // converting the remaining time into remaining hours
lcd.setCursor(0,1);
Serial.println(HH);
if (HH < 10) { lcd.print('0');  }
lcd.print(HH);
lcd.print(":");

long int MM = (j - (HH*3600))/60 ; //converting the remaining time into remaining minutes
lcd.setCursor(3,1);
Serial.println(MM);
if (MM < 10) { lcd.print('0');  }
lcd.print(MM);
lcd.print(":");

long int SS = j - ((HH*3600)+(MM*60)); //converting the remaining time into remaining seconds
lcd.setCursor(6,1);
Serial.println(SS);
if (SS < 10) { lcd.print('0');  }
lcd.print(SS);
delay(1000);

if (digitalRead(A3)==1){break;}

if (j == 0)

{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Timer Stop");
lcd.setCursor(2,1);
lcd.print("-Ring-Ring-");

for(int k =0; k<= 100; k++) //this for loop is used for the buzzer to beep 100 time as the timer reaches zero
{
digitalWrite(A4,HIGH);
delay(300);
digitalWrite(A4,LOW);
delay(300);
if (digitalRead(A3)==1){break;}
}
}
}
}
}
Yorum Yaz

Sosyal Medya
Popüler Yazılar
15 Yorum  61.880 kez okunmuş.
15 Yorum  39.750 kez okunmuş.
1 Yorum  32.465 kez okunmuş.
0 Yorum  17.364 kez okunmuş.
0 Yorum  15.939 kez okunmuş.
0 Yorum  14.745 kez okunmuş.
Arşivler