Arduino Ders 31: Servo Motor ile Akıllı Çöp Kutusu

Arduino Uygulaması

Servo Motor ile Akıllı Çöp Kutusu

HC-SR04 ultrasonik mesafe sensörü ve SG90 servo motor kullanarak kapağı otomatik açılan akıllı çöp kutusu yapacağız.

Arduino akıllı çöp kutusu

Servo motor ile akıllı çöp kutusu uygulamasında mesafe sensörü el veya nesne yaklaştığında bunu algılar. Servo motor kapağı açar, belirli süre bekledikten sonra kapağı tekrar kapatır.

  • 1 adet RC servo motor (SG90)
  • Arduino Uno
  • HC-SR04 ultrasonik mesafe sensörü
  • 9V pil veya uygun güç kaynağı
  • Breadboard
  • Jumper kablolar
  • Yapıştırmak için sıcak silikon tabancası ve silikon

Servo motor yük altında fazla akım çekebilir. Daha kararlı çalışma için servo motoru harici 5V güç kaynağıyla beslemek daha doğru olur. Harici güç kullanılırsa Arduino GND ile güç kaynağı GND ortak bağlanmalıdır.

HC-SR04 sensörünün VCC pini 5V’a, GND pini GND hattına bağlanır. Trig pini Arduino’nun 7 numaralı pinine, Echo pini ise 8 numaralı pinine bağlanır.

Servo motorun kahverengi veya siyah kablosu GND’ye, kırmızı kablosu 5V’a, sarı veya turuncu sinyal kablosu Arduino’nun 9 numaralı pinine bağlanır.

Arduino akıllı çöp kutusu devre şeması

Ultrasonik sensör, çöp kutusunun önündeki mesafeyi sürekli ölçer. El veya nesne belirlenen mesafeden daha yakına geldiğinde servo motor kapağı açacak açıya döner.

Belirli süre geçtikten sonra servo motor tekrar kapalı konuma döner. Bu örnekte servo kapalı konumda 0 derece, açık konumda 160 derece olarak ayarlanmıştır.

Verilen kaynak koddaki #include<servo .h=""> satırı HTML içinde bozulmuştu. Doğru kullanım #include <Servo.h> şeklindedir. Ayrıca Serial.begin(9600) setup içine alınmalıdır.

#include <Servo.h>

Servo myservo;

const int eko = 8;
const int trig = 7;

int mesafe;
long sure;

void setup() {
  myservo.attach(9);
  myservo.write(0);

  pinMode(trig, OUTPUT);
  pinMode(eko, INPUT);

  Serial.begin(9600);
}

void loop() {
  digitalWrite(trig, LOW);
  delayMicroseconds(2);

  digitalWrite(trig, HIGH);
  delayMicroseconds(10);

  digitalWrite(trig, LOW);

  sure = pulseIn(eko, HIGH, 30000);

  if (sure == 0) {
    mesafe = 200;
  } else {
    mesafe = (sure / 29.1) / 2;
  }

  if (mesafe > 200) {
    mesafe = 200;
  }

  Serial.print("Mesafe: ");
  Serial.print(mesafe);
  Serial.println(" cm");

  if (mesafe <= 5) {
    myservo.write(160);
    delay(5000);
    myservo.write(0);
  }

  delay(500);
}
#include <Servo.h>

Servo kapakServo;

const int trigPin = 7;
const int echoPin = 8;
const int servoPin = 9;

const int acikAci = 160;
const int kapaliAci = 0;
const int algilamaMesafesi = 10;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  kapakServo.attach(servoPin);
  kapakServo.write(kapaliAci);

  Serial.begin(9600);
}

void loop() {
  int mesafe = mesafeOlc();

  Serial.print("Mesafe: ");
  Serial.print(mesafe);
  Serial.println(" cm");

  if (mesafe > 0 && mesafe <= algilamaMesafesi) {
    kapakServo.write(acikAci);
    delay(3000);
    kapakServo.write(kapaliAci);
    delay(1000);
  }

  delay(200);
}

int mesafeOlc() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long sure = pulseIn(echoPin, HIGH, 30000);

  if (sure == 0) {
    return -1;
  }

  return sure / 58;
}

Bu sürümde mesafe ölçümü ayrı fonksiyona alındı. Algılama mesafesi, açık açı ve kapalı açı sabit değişkenlerle daha kolay düzenlenebilir hale getirildi.

Servo motor kapağı hareket ettirecek şekilde sabitlenir. HC-SR04 sensörü ise elin yaklaşacağı ön bölüme bakacak biçimde yerleştirilir.

Arduino akıllı çöp kutusu montaj görseli

1 Yorumlar

Daha yeni Daha eski