Otomatik Play Pause
Atölyedeki gürültülü cihazlar çalıştığında videoyu otomatik durduran sese duyarlı sistem
Bu videoda sese duyarlı, oynatılan videoyu durdurup tekrar oynatabilen bir cihaz yaptık. Cihazın temel mantığı atölyedeki gürültülü bir cihaz çalıştırıldığında bluetooth ses sistemimizin butonuna basarak videoyu kontrol etmesini sağlamak. Videodaki gibi bir bluetooth cihazınız yoksa klavyenizin multimedya tuşunu da kullanabilirsiniz. Unutmayın ki bu yalnızca bir örnek, kodu eğip bükerek, farklı sensörler ekleyip çıkararak bambaşka projeler de yapabilirsiniz.
1. Kullanılan Ürünler
- Arduino UNO R3 – SMD Klon (CH340 Çipli)
- Ses Sensör Kartı – Mikrofon Sensörü (3 Pinli)
- Tower Pro SG90 Mini Servo Motor – 9g
2. Bağlantı Şeması
En ucuz ve en çok kullanılan servo motorlar olan sg90’ların kabloları genellikle standarttır. Aşağıdaki tablolara göre Arduino bağlantılarınızı gerçekleştirebilirsiniz:
Servo Motor Bağlantısı
| SG90 Kablo Rengi | Arduino Pini |
|---|---|
| Kahverengi | Herhangi bir GND |
| Kırmızı | Herhangi bir 5V |
| Sarı | 9 |
Mikrofon Sensörü Bağlantısı
| Sensör Pini | Arduino Pini |
|---|---|
| VIN | Herhangi bir 5V |
| GND | Herhangi bir GND |
| VOUT (OUT) | 2 |
3. Arduino Kodu
Aşağıdaki kodu kopyalayarak Arduino IDE üzerinden kartınıza yükleyebilirsiniz.
// Otomatik Play/Pause Projesi
// 07/10/2025, İrfan İzbırakan
#include <Servo.h>
Servo myservo;
const int inputPin = 2; // Mikrofon giriş pini
unsigned long interval = 100; // Ölçüm aralığı (ms) - ihtiyaca göre değiştir
unsigned long previousMillis = 0;
int pulseCount = 0;
int lastState = LOW;
int pulseThreshold = 45; // Eşik değer
int runningCount = 15;
int stopCount = 20;
int aboveCount = 0; // Üst üste eşik üstü sayaç
int belowCount = 0; // Üst üste eşik altı sayaç
bool isMachineRunning = false; // Makine durumu
void setup() {
myservo.attach(9); // Servonun bağlanacağı pin
pinMode(inputPin, INPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Giriş pinini oku
int currentState = digitalRead(inputPin);
myservo.write(0); // nolur nolmaz başlangıçta servoyu sıfıra çekiyoruz.
// LOW -> HIGH geçişini say
if (currentState == HIGH && lastState == LOW) {
pulseCount++;
}
lastState = currentState;
// Zaman kontrolü
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
//Serial.print(interval); // Bu kısım seri monitör ve seri plotter ile test için. Şu an pasif // , /* , */ karakterlerini kaldırırsanız aktifleşir.
//Serial.print(" ms içinde HIGH pulse sayısı: ");
/*Serial.print(0);
Serial.print(" ");
Serial.print(200);
Serial.print(" "); */
//Serial.println(pulseCount);
// Makine çalışma/durma kontrolü
if (pulseCount > pulseThreshold) {
aboveCount++;
belowCount = 0; // sıfırla
if (aboveCount >= runningCount && !isMachineRunning) {
isMachineRunning = true;
Serial.println(" ");
Serial.println("Makine Çalışıyor");
Serial.println(" ");
digitalWrite(12, HIGH);
myservo.write(0);
delay(100);
myservo.write(18);
delay(200);
myservo.write(0);
delay(200);
}
} else {
belowCount++;
aboveCount = 0; // sıfırla
if (belowCount >= stopCount && isMachineRunning) {
isMachineRunning = false;
Serial.println(" ");
Serial.println("Makine Durdu");
Serial.println(" ");
digitalWrite(12, LOW);
myservo.write(0);
delay(100);
myservo.write(18);
delay(200);
myservo.write(0);
delay(200);
}
}
// Sayaç ve zaman sıfırlama
pulseCount = 0;
previousMillis = currentMillis;
}
}
