Pintu Otomatis dengan Sensor Ultrasonik, Arduino Uno dan Motor Servo

 



List Program :

//Sertakan library Servo

#include <Servo.h>


Servo myservo1;

Servo myservo2;


//variabel untuk perhitungan sudut putar

int sudut1;

int sudut2;

int sudut;


const int trigPin = A0; // Trigger Pin of Ultrasonic Sensor

const int echoPin = A1; // Echo Pin of Ultrasonic Sensor

const int trigPin2 = A4; // Trigger Pin of Ultrasonic Sensor

const int echoPin2 = A5; // Echo Pin of Ultrasonic Sensor


long duration, distance, inches, cm;

long duration2, distance2, inches2, cm2;


void setup() {

  Serial.begin(9600);

  myservo1.attach(6);  // servo terhubung pin 6

  myservo2.attach(7);

  pinMode(echoPin, INPUT);

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin2, INPUT);

  pinMode(trigPin2, OUTPUT);

}


void loop() {



  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);


  digitalWrite(trigPin2, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin2, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin2, LOW);


  duration = pulseIn(echoPin, HIGH);

  inches = microsecondsToInches(duration);

  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);

  Serial.print("in, ");

  Serial.print(cm);

  Serial.print("cm");

  Serial.println();


  duration2 = pulseIn(echoPin2, HIGH);

  inches2 = microsecondsToInches(duration2);

  cm2 = microsecondsToCentimeters(duration2);

  Serial.print(inches2);

  Serial.print("in, ");

  Serial.print(cm2);

  Serial.print("cm");

  Serial.println();


  //konversi hasil analog (0-1023) menjadi hasil sudut (0-180)

  sudut1 = map(cm, 0, 20, 90, 180);

  sudut2 = map(cm2, 0, 20, 90, 180);


  if ((cm <= 20) || (cm2 <= 20)) {

    if (cm <= cm2) {

      //set posisi sudut motor servo

      sudut == sudut1;

      myservo1.write(sudut);

      myservo2.write(180 - sudut);

      delay(15);

    }

    if (cm >= cm2) {

      //set posisi sudut motor servo

      sudut == sudut2;

      myservo1.write(sudut);

      myservo2.write(180 - sudut);

      delay(15);

    }

  }

  delay(100);

}


long microsecondsToInches(long microseconds)

{

  return microseconds / 74 / 2;

}


long microsecondsToCentimeters(long microseconds)

{

  return microseconds / 29 / 2;

}



Comments