Alkışla Yanan Lamba Yaptık

Arduino ile yapabileceklerimi ilk öğrendiğimde aklıma direk “ Alkışla Yanan Lamba” projesi geldi. Tembellikten olduğunu düşünüyorsunuz ama yanılıyorsunuz. Benim iki tane küçük kızım var. Evimiz biraz eski olduğundan lamba prizleri onların erişemeyeceği boyutta. Evde banyoya ne zaman girseler ışığı yakmak için çamaşır sepetine tırmanıyorlardı J Eğer banyoya alkışla yanan bir lamba koyarsam bu sorunu çözeceğimi düşünüyordum ama Nasıl?

İlk olarak Makers Türkiye’de Hakan Kaya hocamızdan Arduio temel eğitim dersleri aldım. Ders bitiminde proje kafamda şekillenmişti. Fakat birçok eksik malzeme ve yazılım için gereken kodlar hatta birazda elektrik bilgisi lazımdı.

Malzemeleri internette araştırıp en uygun siteden temin ettim:

1 adet Arduino Uno

1 adet tekli role

1 adet Protoshield ( yer kaplamasın diye tercih ettim)

1 adet ses sensörü

1 prizli lamba

1 adet pil yuvası

Jumper kablolar

Daha sonra gelen malzemelerle biraz internet araştırma yaparak ve Hakan Hoca ile yaptığımız 1 saatlik proje görüşmesi sonrasında devreyi oluşturdum.

RÖLE

Elimde bulunan birbirine bağlı şekildeki lamba ve prizinin kablosunu ikiye ayırdım. İçinden iki kablo çıktı. Bir kablo prizden direkt lambaya gitti. Diğer prizden geleni Rölenin ilk girişine, Lambadan geleni ise ikinci girişine taktım. Röle gelen 220V luk elektriği arduinoya 5V olarak çevirmeye yarıyordu. Ayrıca açma kapama düğmesi mantığında çalışıyordu. Komutla elektriği veriyor sonra tekrar kesiyordu. Rölenin çalışıp çalışmadığını görmek için ayrıca denedim. ( bknz https://www.projehocam.com/arduino-role-uygulamasi/  ve http://blog.ikizoglu.com/2018/02/arduino-role-kullanimi/ ). Rölenin bağlantılarını yaparken çok dikkatli olmakta fayda var.

Rölenin diğer çıkışında bulunan girişleri şu şekilde bağladım.

VCC – Ardiunoda 5V

GND – Ardiunoda GND

IN –   5. Digital pine

SES SENSÖRÜ – MİKROFON

Benim elimde bulunan ses sensoru 4 çıkışlıydı. Nasıl çalıştığını anlamak için ayrıca denedim. ( bknz https://www.robimek.com/arduino-ile-mikrofon-modulu-kullanimi/ ve https://maker.robotistan.com/arduino-ile-ses-sensor-modulu/ ) Ses sensoru ortamdaki ses düzeyini ölçüyordu. Üzerindeki potansiyometre ile düşük ya da yüksek ses seviyesi şiddeti ayarlanabiliyordu. Ama benim ilk aldığım ses sensörünün üzerindeki potansiyometre sürekli döndüğünden verim alamadım ve sabit olan ile değiştirdim. Ses sensörünü ise şu şekilde bağladım:

VCC – Ardiunoda 5V

GND – Ardiunoda GND

OUT – 4. Digital pine

KODLAR

Tüm devreyi kurduktan sonra kodlarımı Ardiuno’ya yükledim. Kodları yazarken ki mantık, ses sensörünün alkış sesini diğer ortamdaki seslerden ayırt edebiliyor olmasıydı.

Algoritma ise Sensör ortamdaki sesi dinleyecek gürültü var ise bunun ilk gürültü mü ikinci gürültü mü olduğuna karar verecek. İlk gürültüyse tekrar dinlemeye koyulacak ve iki alkış arasındaki zaman aralığını ölçecek. ( iki alkış arasındaki süre ortalama 400 müş)  İlk gürültü değilse sayacı artırıp tekrar dinleyemeye koyulacak. İkinci gürültü ve ilk gürültü arasındaki zaman aralığı kodumuzu uyuyorsa röleyi çalıştıracak. (Kodlarda meraklımaymum web sitesinden yararlandım.)

int ses_sensoru = 4;

int role = 5;

int alkis = 0;

long algilama_araligi_baslangic = 0;

long algilama_araligi = 0;

boolean isik_durumu = false;

void setup() {

  pinMode(ses_sensoru, INPUT);

  pinMode(role, OUTPUT);

}

void loop() {

int sensor_durumu = digitalRead(ses_sensoru);

 if (sensor_durumu == 0)

  {

    if (alkis == 0)

    {

algilama_araligi_baslangic = algilama_araligi = millis();

      alkis++;

    }

    else if (alkis > 0 && millis()-algilama_araligi >= 50)

    {

      algilama_araligi = millis();

      alkis++;

    }

  }

 if (millis()-algilama_araligi_baslangic >= 400)

  {

    if (alkis == 2)

    {

      if (!isik_durumu)

        {

          isik_durumu = true;

          digitalWrite(role, HIGH);

        }

        else if (isik_durumu)

        {

          isik_durumu = false;

          digitalWrite(role, LOW);

        }

    }

    alkis = 0;

  }

}

ÇALIŞTIRMAK

Devreyi kurduktan , kodları yazıp Ardiuno’ya yükledikten sonra Ardiuonoya güç sağlaması için 9V luk pil taktım. Alkış sesinin şiddetini ayarlamak için ses sensörünün üzerindeki potansiyometreyi ayarladım. Ardından lambamım prizini prize soktum. İki alkışla düzeneğim çalıştı. Fakat çocuklara denetince kodların çok da istediğime uygun olmadığını gördüm. Çünkü çocuklar alkışı düzgün yapamıyordu. Ne kadar uğraştıysam da mikrofonun üstündeki potansiyometre hassaslığı en düşük ayara getiremiyordu. Daha hassas bir koda ihtiyacım vardı. Yani sadece ses duyunca yanacak. Ben de projeyi baştan düzenledim.

SES SENSÖRÜ – MİKROFON

Dört çıkışlı ses sensörümü direkt ardiunoyaya sırasıyla A0-A1-A2-A3 e bağladım

A0 – A0

A1- GND

A2- VCC

A3-DO

RÖLE

OUT – 13.PİNE

GND-GND

VCC-5V

KODLAR

int micPin = A0;          // pin that the mic is attached to

int gndPin = A1;

int powerPin = A2;

int micValue1 = 0; 

int micValue2 = 0; // the Microphone value

int led1 = 13;

boolean lightOn = false;

void setup() {

  pinMode(led1, OUTPUT);

  pinMode(powerPin, OUTPUT);

  pinMode(gndPin, OUTPUT);

  pinMode(micPin, INPUT);

 digitalWrite(gndPin,LOW);

  delay(500);

  digitalWrite(powerPin,HIGH);

  Serial.begin(9600);  //for test the input value initialize serial

}

void loop() {

  micValue1 = analogRead(micPin);  // read pin value

  Serial.println(micValue1);

  delay(1);

  micValue2 = analogRead(micPin);

  Serial.println(micValue2);

  if (micValue1-micValue2 > 2||micValue2-micValue1 > 2){

  lightOn = !lightOn;

  delay(100);

  digitalWrite(led1, lightOn);

  }

}

2 thoughts on “Alkışla Yanan Lamba Yaptık”

  1. merhaba ikinci kod’da tek alkış ile yanıyor ben ise iki alkış olsun istiyorum kodun hangi kısmını değiştirmem gerek yardımcı olur musunuz ?

    1. İlk kod sizin için daha uygun. İkinci kod da sadece ses olması yeterli
      if (alkis == 2)

      {

      if (!isik_durumu)

      {

      isik_durumu = true;

      digitalWrite(role, HIGH);

      }

      else if (isik_durumu)

      {

      isik_durumu = false;

      digitalWrite(role, LOW);

      }

      }

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir