*사용 부품

서보모터 1개

LED 2개 (Green, Yellow)

조도센서(CDS) 1개

부저 1개

 

*기능 설명

1. 초음파 센서에 10cm이하의 거리일 때 Servo모터가 작동해서 차단바가 올라가고 부저가 울림

2. CDS센서가 가려지면 LED_Y가 켜지고 LED_G가 꺼짐

 

*동작영상

*전체 소스코드

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <softPwm.h>
#include <softTone.h>
#include <string.h>
#include <errno.h>

#define Buzzer 28
#define Servo 1
#define LED_G 6
#define LED_Y 5
#define micro_trig 23
#define micro_echo 24
#define CDS 7

int Warning[11] = {0,659,0,659,0,659,0,659,0,659,0};

int main ()

{
  
  int start_time, end_time;
  float distance;


  if(wiringPiSetup() == -1) exit(1);
  softToneCreate (Buzzer);

  pinMode(LED_G, OUTPUT);
  pinMode(LED_Y, OUTPUT);
  pinMode(Servo, PWM_OUTPUT);
  pinMode(micro_trig, OUTPUT);
  pinMode(micro_echo, INPUT);
  pwmSetMode(PWM_MODE_MS);
  pinMode(CDS, INPUT);
  pwmSetClock(384);
  pwmSetRange(1000);

  while(1)
  {
	  
	  
	  //초음파센서
    digitalWrite(micro_trig, LOW);
    delay(1500);
    digitalWrite(micro_trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(micro_trig, LOW);
    while (digitalRead(micro_echo) == 0);
    start_time = micros();
    while (digitalRead(micro_echo) == 1);
    end_time = micros();
    distance = (end_time - start_time) / 29. / 2.;
    printf("distance %.2f cm\n", distance);
	//초음파센서 끝
	
 
//초음파센서 + 서보모터 + 부저
	
	//CDS + LED
	
      
	
	if(distance < 10.00 && digitalRead(CDS) == HIGH){
	pwmWrite(Servo, 120);
	digitalWrite(LED_Y, HIGH);
	digitalWrite(LED_G, LOW);

	for (int i = 0; i < 11; ++i)
    {
      
      softToneWrite(Buzzer, Warning[i]);
      delay (200);
    }
      }
  
	else if(distance > 10.00 && digitalRead(CDS) == HIGH){
	pwmWrite(Servo,75);
	digitalWrite(LED_Y, HIGH);
	digitalWrite(LED_G, LOW);
	}
      
	else if(distance < 10.00 && digitalRead(CDS) == LOW){
	pwmWrite(Servo, 120);
	for (int i = 0; i < 11; ++i)
    {
      
      softToneWrite(Buzzer, Warning[i]);
      delay (200);
    }
	digitalWrite(LED_Y, LOW);
	digitalWrite(LED_G, HIGH);
      }
	else if(distance > 10.00 && digitalRead(CDS) == LOW)
	{
	  pwmWrite(Servo,75);
	  digitalWrite(LED_Y, LOW);
	  digitalWrite(LED_G, HIGH);
	  
	}

	
}
  return 0 ;
 }

 

+ Recent posts