본문으로 바로가기

  아두이노(Arduino) 기초 센서 5편 - 압력센서 & 휨센서  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.



안녕하세요. 애드라이프입니다.

한참 아두이노 중급 포스팅중에 정말 예전에 쓰던 부품함에서 

압력센서와 휨센서를 찾았습니다.(약 8년전 부품함에서 발견했어요.)


그래서 센서 자체가 작동이 될까하는 의구심으로 TEST했는데

아주 잘되길래 포스팅하기로 했죠.


우선 8살짜리 센서 실물을 확인 해볼까요?▼

아두이노 압력센서 휨센서




원리는 가변저항과 똑같아요.

휨 센서는 휘는 정도에 따라 저항값이 달라지고

압력센서는 원형부분에 가해지는 압력에 따라 저항값이 달라지기 때문에

그 값을 받아봐서 여러 분야에 응용할 수 있게 되는 것이죠.


이번 포스팅은 각각의 센서의 값을 LED밝기로 연결시키는 예제를 다룰 텐데요.

시리얼 모니터와 함께 시각정으로 확인 할 수있는 LED를 달아서

구성한 회로를 확인 해보겠습니다.▼

[아두이노] 압력센서와 휨센서를 이용한 LED켜기 회로

회로도에서 센서들 다리에 연결되있는 저항들은 적절한 저항으로 선정하시면 됩니다.

저의 경우는 휨측정 센서가 휘지 않은 경우 22Kohm정도 여서 30Kohm을 선정하였고

압력센서는 꾹 누르고 있을 경우 1Kohm이하로 저항이 떨어져서 1Kohm으로 정했습니다.

저항 선정은 너무 작거나 너무 크지만 않으면 적절한 선에서 아무거나 사용하셔도 될 듯 싶네요.

자신이 TEST할 센서들의 사양을 확인 하는 것은 기본중에 기본이죠!


회로도에서 저항선정만 잘되면 나머진 전압값읽기와 동일 하기 때문에


[아두이노/아두이노 기초] - 아두이노(Arduino) 기초 아날로그 입출력(전압 읽기) 2편



바로 프로그램을 살펴보도록 하겠습니다.▼

회로도는 센서 특성이 같아서 하나로 구성하였지만 프로그램은 

각각 센서별로 설명하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//압력센서를 이용한 LED밝기 조절하기 by 애드라이프
int Pressure_Sensor_Pin = A4;                 //회로를 참고하여 압력센서의 한쪽을 아날로그A4번 포트에 연결합니다.
int LED = 3;                                  //압력센서의 값으로 제어할 LED의 +단을 디지털 포트 3번에 연결해 주세요.
void setup() {
  Serial.begin(9600);                         //통신속도 9600
}
void loop() {
  int SensorValue; 
  int LED_BrightnessValue;
  
  SensorValue= analogRead(Pressure_Sensor_Pin);      
  //SensorValue변수에 압력센서로 부터 읽어온 아날로그 값을 저장합니다.
  LED_BrightnessValue = map(SensorValue, 0 , 10230255);
  //SensorValue변수에 저장된 0~1023까지의 데이터를 LED를 켜기위한 0~255까지의 범위로 조정합니다.
  analogWrite(LED,LED_BrightnessValue);              
  //조정된 값을 LED에 출력합니다. 밝기 조절용 데이터
  Serial .println("압력센서 값 : " +String(SensorValue) + ", LED 밝기값 : " + String(LED_BrightnessValue));
  //압력센서에서 받아온 데이터와 LED밝기를 조절해 주는 값을 시리얼 모니터에 출력합니다.
  
  delay(100);
}
cs

프로그램의 전체적인 흐름은 주석을 확인해 주세요.(옆으로 넘기면서 보실 수 있습니다.)


ADC 기능을 알고 있다면 그다지 어렵지 않은 프로그램입니다.

map(기준이 되는 값 변수,기준값 min,기준값 max,원하는 값 min,원하는 값max)

map함수를 이용하여 비례식으로 센서에서 받아온 0~1023의 값을

LED 밝기값으로 0~255까지 변환 하여 사용합니다.


압력센서에 가해지는 압력에 따라 변화하는 저항값과 고정저항(1Khom) 사이에서

분배되는 전앖을 읽어 들여 수치의 높낮이에 따라 LED의 밝기를 바꾸는 것이죠.



바로 결과를 확인해 보겠습니다.

우선 시리얼 모니터 확인 결과 입니다.▼

아두이노 압력센서 시리얼 모니터값

0~1023의 값을 0~255값으로 표현되는 시리얼 모니터입니다.

압력을 가했을 때 센서값이 올라가면서 LED밝기 값도 올라가는 것이 보이시죠?


이번엔 동영상으로 확인 해보겠습니다.▼

동영상을 보시면 손으로 센서를 집으면 LED가 밝아지는 것이 보이시나요?


그럼 바로 휨 센서로 넘어가도록 하겠습니다.

원리는 모두 동일함니다. 회로 구성도 보면 아시겠지만 저항하고 센서만 다릅니다.


그럼 프로그램도 거의 같겠죠? 실제로 살펴보겠습니다.▼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//휨센서를 이용한 LED밝기 조절하기 by 애드라이프
int Flex_Sensor_Pin = A5;                 //회로를 참고하여 휨센서의 한쪽을 아날로그A5번 포트에 연결합니다. 
int LED = 5;                              //압력센서의 값으로 제어할 LED의 +단을 디지털 포트 5번에 연결해 주세요.
void setup() {
    Serial.begin(9600);                          //통신속도 9600
}
void loop() {
  int FlexValue; 
  int LED_BrightnessValue;
  
  FlexValue = analogRead(Flex_Sensor_Pin); 
  //FlexValue 휨센서로 부터 읽어온 아날로그 값을 저장합니다.
  LED_BrightnessValue = map(FlexValue, 320 , 5800255);
  //FlexValue 변수에 저장된 320~580까지의 데이터를 LED를 켜기위한 0~255까지의 범위로 조정합니다.
  analogWrite(LED,LED_BrightnessValue);               
  //조정된 값을 LED에 출력합니다. 밝기 조절용 데이터
  Serial .println("압력센서 값 : " +String(FlexValue) + ", LED 밝기값 : " + String(LED_BrightnessValue));
  //휨센서에서 받아온 데이터와 LED밝기를 조절해 주는 값을 시리얼 모니터에 출력합니다.
  
  delay(100);
}
cs

프로그램의 전체적인 흐름은 주석을 확인해 주세요.(옆으로 넘기면서 보실 수 있습니다.)


딱 한가지 다른점이라고 한다면 map()함수 부분입니다.

제가 쓰고있는 휨 센서와 제가 선정한 저항으로 값을 측정해 보니

휨센서가 펴져 있을 경우(평상시)에 560

휨센서를 휘었을 경우 최소값 350이였습니다.


그럼 350~560정도의 값에 범위를 갖지만 측정값의 오차를 생각하여 조금더 범위를

넓게 선정하는 것이 좋습니다. 조금이라도 자신이 선정한 범위를 넘어간 쉬가 측정이 된다면

원하는 밝기로 LED를 켤 수 없기 때문이죠.

예를 들어 560을 최대값으로 선정하면 센서에서 측정된 값이 

560일 경우 LED밝기 값은 그 최대인 255가 될 것입니다.

만약 560을 넘어가면 어떻게 될까요?

오히려 밝기 값이 낮아져 버리게 됩니다.

저희가 전혀 원하지 않는 결과가 나와버리는 셈이죠.


이런 오류를 원치 않는다면 위에서 언급한 대로 

자신이 사용하는 센서의 스팩을 잘 알고 있어야 합니다.

두번 강조 했으니 이제 시리얼 모니터 결과부터 살펴보겠습니다.▼

아두이노 휨 센서 시리얼 모니터값

320~580까지의 범위를 0~255까지로 변환하여 출력한 결과입니다.


바로 동영상 결과도 확인 해보도록 하겠습니다.▼



지금까지 아두이노(Arduino) 기초 센서 5편 - 압력센서와 휨센서에 대한 포스팅이였습니다.

계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.

by 애드라이프