Arduino Uno 로 FSR 압력센서 를 사용해서 DC모터를 구동시켜 보는 프로젝트 입니다
먼저 압력센서를 사용해서 시리얼 모니터에 압력값을 출력해 보고 LED를 제어해 보는 프로젝트를 먼저 보겠습니다
FSR (Force Sensitive Resisiter) 압력센서 는 정밀도가 뛰어나진 않지만 저렴한 가격에 간단한 구조로 설계되어 손쉽게
물리적인 압력이나 무게등을 측정할수 있습니다
<FSR 압력센서 이미지>
위 이미지 처럼 다양한 사이즈의 다양한 모양의 FSR 압력 센서가 있습니다
(각자의 프로젝트나 용도에 맞게 선택해서 사용하면 되겠습니다)
<FSR 압력센서의 구조>
위 이미지 처럼 FSR 압력센서는 몇개의 레이어로 구성되어 있습니다
Active Area 의 면적중 Semi-Conductor 에 닿는 면적이 증가하면서 저항이 줄어드는 원리입니다
구조는 간단한 반면 정확도는 떨어지는 단점이 있습니다
다양한 제조사에서 생산한 FSR 압력센서가 시중에 판매되고 있으며
본 테스트에서는 압력센서 FSR IMS009-C7.5 (센싱영역 7.5mm)를 사용하였습니다
FSR (Force Sensitive Resisiter) 라는 이름처럼 압력센서는 물리적인 압력에 따라서 저항값이 변하게 됩니다
압력이 없을 경우에는 센서는 무한대의 저항값을 가집니다
약간의 압력을 가해서 100KΩ 의 저항이 발생하며, 이후에 압력이 커질수록 저항값이 떨어지게 됩니다
위 그래프를 보면 압력값에 따른 저항값의 변화를 확인할수 있습니다
위 표는 5V 전원 및 10K 풀다운 저항이있는 센서의 힘 / 저항을 기준으로 한 대략적인 아날로그 전압을 나타냅니다
사용된 부품
Arduino Uno R3 (Italy)
압력센서 FSR IMS-C20B
점퍼케이블
미니 브래드보드
저항 10K (Ohm)
저항 220 (Ohm)
5mm LED 블루
3색 RGB LED 캐소드 타입
소형 DC모터 R140
다이오드 (1N4148)
트랜지스터 (P2N2222AG)
구성 배선도 - 압력감지시 시리얼 모니터로 출력값 변화 확인하기
구성 배선도 - 감지되는 압력에 따른 LED의 밝기 변화 확인하기
사용된 예제소스
주의사항
센서의 VCC 에는 아두이노의 3.3V 또는 5V의 전원에 연결하고, ADC 는 풀다운(pull down)저항을 거쳐서 GND로 연결하면 됩니다
풀다운(pull doun)저항--->외부 변화가 생기기전 GND 를 (0V) 입력 상태로 묶어 두는것
저항과 센서 사이의 선을 아두이노의 analog 핀으로 연결하면 압력이 없을경우 0V,
압력이 생길경우 최대 5V 까지 입력이 됩니다
"FSR" 예제는 압력센서에 가해지는 압력변화에 따른 아날로그 출력값 변화를 0~255 수치까지
시리얼 모니터로 확인할 수 있는 제예입니다
아두이노의 아날로그 출력값은 0~1023 까지이고 이 수치를 0~255 까지 변환해서 시리얼 모니터로 출력해 줍니다
int mfsr_r18 = map(SensorReading, 0, 1024, 0, 255);
Serial.println(mfsr_r18);
"FSR LED" 예제는 LED를 배선하여 압력센서에 가해지는 압력변화에 따라 LED의 밝기가 변화는것을 확인할수 있습니다
analogWrite(ledPin, value);
예제코드를 확인해 보면 알수 있듯이 시리얼 모니터로 역시 아날로그 출력값(0~255)을 확인해 볼수 있습니다
Serial.println(value);
value = map(value, 0, 1023, 0, 255);
"FSR Serial Monitor" 예제는 압력센서에 가해지는 압력변화에 따라 아날로그 출력값 0~1023 까지
if (analogReading < 10) // from 0 to 9
Serial.println(" -> NO FORCE DETECTED");
else if (analogReading < 100) // from 10 to 99
Serial.println(" -> LOW FORCE");
else if (analogReading < 350) // from 99 to 349
Serial.println(" -> MEDIUM FORCE");
else // from 350 to 1023
Serial.println(" -> HIGH FORCE");
압력값이 10보다 작을때는 NO FORCE DETECTED
압력값이 10~99 사이일때는 LOW FORCE
압력값이 100~349 사이일때는 MEDIUM FORCE
압력값이 350~1023 사이일때는 HIGH FORCE
로 시리얼 모니터에 출력해 줍니다
프로젝트 동영상 - 압력감지시 시리얼 모니터로 출력값 변화 확인하기
프로젝트 동영상 - 감지되는 압력에 따른 LED의 밝기 변화 확인하기
프로젝트 동영상 - 압력감지시 시리얼 모니터로 출력값 변화 확인하기 (LOW~HIGH FORCE 문구 출력)
이어서 FSR 압력센서 를 사용해서 DC모터를 구동시켜 보는 프로젝트를 진행해 보겠습니다
압력센서로 DC모터를 구동시키는 프로젝트는 LED를 제어하는 프로젝트와 동일하게 진행하면 됩니다
아두이노의 동일한 핀에 LED 대신 DC모터를 연결해 주면 되는데 모터는 역전류로 부터 모터를 보호하고
안정적인 구동을 위해 트랜지스터와 다이오드를 사용해서 배선합니다, 때문에 배선이 약간 복잡해 집니다
모터의 배선은 아래 포스팅을 참조해서 배선하였습니다
Step.18-Arduino Uno 로 직류 DC 모터 구동 시키고, 속도 제어해 보기
구성 배선도 - 감지되는 압력에 따른 모터 속도 변화 확인해 보기
사용된 예제소스
소형 DC 모터 이지만 나름 모터류라 전류(A)를 많이 잡아먹기 때문에 압력 센서와는 별도의 전압으로
5V로 연결해 줍니다, 압력센서는 모터와 별도로 3.3V 전원으로 연결해 줍니다
압력센서와 DC모터 모두 동일한 5V로 전원으로 연결할 시 전류(A) 부족으로 모터가 구동하지 않을수 있습니다
다이오드(1N4148)는 저항과는 다르게 방향성이 있습니다 배선도를 참조해서 방향을 잘 확인해서 배선합니다
예제코드를 보면 알수 있듯이 LED를 제어하는 예제 코드와 동일하고
LEDPin 대신 MotorPin 으로 수정하였습니다
//Constants:
const int MotorPin = 3; //pin 3 has PWM funtion
const int sensorPin = A0; //pin A0 to read analog input
모터 제어핀 3번 센서 입력핀 A0 입니다
void setup(){
pinMode(MotorPin, OUTPUT); //Set pin 3 as 'output'
Serial.begin(9600); //Begin serial communication
}
셋업에서 시리얼 통신 속도 9600으로 3번 모터핀 출력입니다
void loop(){
value = analogRead(sensorPin); //Read and save analog value from potentiometer
Serial.println(value); //Print value
value = map(value, 0, 1023, 0, 255); //Map value 0-1023 to 0-255 (PWM)
analogWrite(MotorPin, value); //Send PWM value to Motor
delay(100); //Small delay
}
루프 부분에서 센서의 아날로그 출력값을 읽어와서 모터를 아날로그 출력값 0-1023 / PWM 0-255 수치로 제어합니다
프로젝트 동영상 - 감지되는 압력에 따른 모터 속도 변화 확인해 보기 (C7.5사용)
프로젝트 동영상 - 감지되는 압력에 따른 모터 속도 변화 확인해 보기 (C20B사용)
위 동영상에서도 확인할수 있듯이 C20B 센싱영역 20mm 압력센서가
7.5mm 압력센서 보다 모터를 구동시키기 위해 더 많은 압력을 필요로 합니다
압력 감도를 변경 시키고 싶다면 위 구성 배선도에서 압력센서와 연결 된 10K Ohm 의
저항의 용량을 높이거나 낮춰서 변경할 수 있습니다
'Arduino(아두이노) 활용 강좌' 카테고리의 다른 글
Arduino Uno 로 DS18B20 온도센서를 사용해서 실내온도 및 수온 측정해 보기 (3) | 2020.11.07 |
---|---|
Arduino Uno 로 MLX90614 비접촉 온도센서를 사용해서 실내온도 측정해 보기 (0) | 2020.07.16 |
Arduino Uno 로 MAX7219 (8X8) 도트 매트릭스 모듈과 MPU-6050 자이로센서를 사용해서 미로 탈출 게임 만들어 보기 (0) | 2020.05.09 |
Arduino Uno 로 탁도 센서를 사용해서 액체의 탁도 변화를 측정해 보고 LCD에 출력해 보기 (0) | 2020.04.29 |
Arduino Uno 로 레이저 송수신 모듈을 사용해서 광학효과 만들어 보기 (0) | 2019.12.27 |
댓글