아래 다이어그램은 초음파 센서와 아두이노를 보여주며, 모델은 프레젠테이션용으로만 제작되었습니다.
소개
레벨 인디케이터는 거의 모든 산업 분야에서 사용됩니다. 소규모 작업이나 가정용으로도 구현 가능합니다. 우리는 탱크 내 유체 점유량을 연속적으로 읽어주는 유체 레벨 센서를 제작했습니다. 이 시스템은 유체 양을 알려줄 뿐 아니라 펌프를 사용해 제어하는 피드백 시스템입니다.
구성
위 그림은 제작한 시스템의 단순화된 블록 다이어그램입니다. 아두이노가 마이크로컨트롤러 역할을 합니다. 초음파 센서 HC-SR04가 아두이노에 연결되고, 센서는 탱크 상단에 장착됩니다. 모델용으로 잠수 펌프 2개를 사용했습니다. 잠수 펌프는 단방향(한 방향에서 다른 방향으로만 유체 이송)입니다. 양방향 펌프를 쓰면 양방향 작동 가능. 두 펌프 모두 아두이노에서 신호받아 작동. 펌프는 12V 필요하므로 모터 드라이버도 필요합니다(블록 다이어그램엔 미표시).
작동 원리
이해하기 쉽게 시스템을 여러 섹션으로 나눕니다:
감지 시스템
제어 시스템
감지
감지 시스템에 초음파 센서 HC-SR04 사용. 초음파 범위는 20kHz 이상. 이 센서엔 송신부와 수신부가 있습니다. 송신부가 40kHz 주파수 발생, 이 초음파가 유체 표면에서 반사돼 수신부로 돌아옵니다. 센서는 4핀: 그라운드는 아두이노 그라운드, VCC는 3.3V 또는 5V. 트리거 핀으로 송신부에 트리거 신호, 에코 핀으로 반사파 수신. 초음파 발생~수신 시간 측정 후 거리를 계산합니다:
duration = pulseIn(echoPin, HIGH); // 에코 펄스 폭 측정
distance = duration * 0.034 / 2; // 거리 계산 (cm)
제어 시스템
아두이노가 센서 데이터 수신 후 펌프에 원하는 신호 전송. 코드에서 임계 레벨 설정 가능. 레벨이 임계값 초과 시 탱크 내 펌프 작동해 임계값 미만까지 배출. 레벨이 임계값 미만으로 떨어지면 저수조 펌프가 탱크로 유체 공급. 탱크와 펌프 1개만 사용할 수도 있습니다.
향후 개선 사항
탱크 외부에 설치 가능한 양방향 펌프 사용 시 펌프 1개로 충분
OLED 또는 LCD 화면에 결과 표시
IoT 연결 시 데이터 클라우드 저장
IoT 연결 시 앱으로 유체 레벨 제어 및 모니터링
탱크 오버플로 시 안전 부저 추가, 오버플로 방지 코드 수정
코드
수위 컨트롤러 Arduino
int tankPump=3;
int reserviorPump=2;
int trigPin = 9; // 흰색
int echoPin = 10; // 갈색
long duration;
int distance;
void setup(){
Serial.begin(9600);
pinMode(tankPump,OUTPUT);
pinMode(reserviorPump,OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop(){
ultrasound();
pump();
}
void ultrasound(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance:");
Serial.println(distance);
delay(1000);
}
void pump(){
if (distance > 10){
digitalWrite(tankPump,HIGH);
digitalWrite(reserviorPump,LOW);
} else{
digitalWrite(tankPump,LOW);
}
if(distance < 6){
digitalWrite(reserviorPump,HIGH);
digitalWrite(tankPump,LOW);
} else{
digitalWrite(reserviorPump,LOW);
}
}