본문 바로가기
Nefus

NEFUS_Arduino_20230515

by JJWon 2023. 5. 14.

포텐쇼미터(Potentiometer)

포텐쇼미터는 '가변저항기'라고도 불립니다. 가변저항은 전자회로에서 저항을 임의로 바꿀 수 있는 저항를 말합니다. 포텐쇼미터로 저항을 바꾸게 되면 전류의 크기도 바뀌게 됩니다. 전압을 가하면 설정에 따라 전압 일부를 전달하는 역할을 하기 때문에 스피커 볼륨 조절, 보일러 온도 조절 등의 기능을 위하여 부착됩니다. 

포텐쇼미터의 내부에는 탄소로 만들어진 둥근 회색 띠가 있는데, 이 띠를 통하여 전기가 흐르며 저항의 기능을 합니다. 세 단자 중 가운데를 제외한 양쪽 단자는 탄소 띠로 이어져 있고, 가운데 단자는 따로 떨어져 있습니다. 가운데 단자와 탄소 띠를 이어주는 것은 우리가 조절할 수 있는 조절 슬라이더와 연결되어 있는 와이퍼입니다. 그래서 우리가 조절 슬라이더를 돌리면, 오른쪽 단자를 통해 들어온 전기가 탄소 띠를 따라 흘러가다가, 중간에 와이퍼를 만나서 와이퍼 쪽으로 방향을 틀어 가운데 단자로 흘러가게 됩니다. 이 때 와이퍼가 어디에 있느냐에 따라서 탄소 띠를 얼마만큼 오래 따라가다가 와이퍼로 빠져나가는 지가 달라지기 때문에 저항값이 달라집니다. 참고로 탄소 띠를 따라가다가 빨리 와이퍼를 만나면 저항이 작아지고, 탄소 띠를 다 지날 쯤 되어서야 와이퍼를 만나면 저항이 커집니다. 이 원리를 이용하여 볼륨이나 온도를 조절하는 것입니다.

 

초음파센서(Ultrasonic Sensor)

초음파라는 인간의 청력 범위를 벗어난 오디오 주파수를 뜻합니다. 초음파 센서는 주파수를 사용하여 존재를 감지하거나 원격 물체에 대한 거리를 계산합니다.

초음파 센서의 송신기(TRIG)는 23kHz~40kHz 사이의 주파수를 포함하는 처프라는 고주파 음파의 짧은 버스트를 방출합니다. 이 소리의 펄스(매우 짧은 동안만 흐르는 전류)가 물체의 부딫혀서 반사된 일부 음파를 수신기(ECHO)가 수신합니다. 센서는 초음파 신호를 송신한 후 수신할 때까지의 시간을 측정하여 물체까지의 거리를 계산합니다.

 

조도센서(Photoresistor)

조도센서는 주변 밝기를 측정하여 입력 값으로 보내는 센서입니다. 조도는 단위 면적 당 단위 시간에 받는 빛의 양을 뜻합니다. 조도에 따라 저항의 값을 변화하는데, 빛의 양과 저항값은 반비례 관계이기에 주위가 밝으면 저항값이 감소하고, 주위가 어두우면 저항값이 증가합니다. 아무 방향으로 꽃아도 상관없다는 특징도 있습니다.

조도센서 윗부분에 있는 지그재그 모양의 주황색 부분이 광자의 양을 측정합니다. 광에너지를 받으면 내부에 움직이는 전자가 발생하여 전도율이 변하는 광전효과를 가지는 소자를 사용합니다. 광에너지를 받으면 센서 내부의 광도전체에서 반송자의 밀도가 높아지기 때문에 전류가 증가하고(==저항 감소), 광에너지를 받지 않으면 반송자의 밀도가 높아지지 않기 때문에 전자에 비해 전류가 잘 흐르지 않습니다(==저항 증가). 반송자에 관한 내용은 https://jjwon4.tistory.com/6 를 확인하시면 좋습니다. 

 

릴레이모듈(Relay Module) 센서가 아닙니까?

릴레이모듈은 고전압, 대전류의 장치를 제어할 때 사용됩니다.

 

코드 정리하기

(1) Serial.Print()

void setup() {
	Serial.begin(9600); // 시리얼 통신 전 초당 9600비트를 전송하겠다는 통신속도 맞추기 
}
void loop() {
	Serial.print("hello!"); // serial monitor에 hello 출력
    delay(1000);
}

(2) Potentiometer

int val = 0; // 가변저항으로부터 아날로그 신호를 받을 변수 선언
void setup() {
	Serial.begin(9600);
    pinMode(11, OUTPUT); // 보드에서 아날로그 핀으로 쓸 수 있는 핀 중 하나 선택
}
void loop() {
	val = analogRead(A0); // 가변저항으로부터 아날로그 신호를 받아서 변수에 저장
    Serial.println(val); // 변수 출력
    val = map(val, 0, 1023, 0, 255); // 변수의 최댓값을 매핑(입력값의 범위를 출력값의 범위에 맞추기)
    analogWrite(11, val);
}

(3) Ultrasonic Sensor

#define TRIG 9 // 송신기 핀 설정
#define ECHO 8 // 수신기 핀 설정
void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT); // 송신기 핀 설정
  pinMode(ECHO, INPUT); // 수신기 핀 설정
}

void loop() {
  long duration, distance;
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  duration = pulseIn (ECHO, HIGH); // 초음파 송신->수신 시간 저장
  
  // 3400*시간/1000000/2(편도) : 계산 공식

  distance = duration * 17 / 1000; // PC모니터로 초음파 거리값을 확인하는 코드
  
  Serial.println(duration); // 시간을 보여줌
  Serial.print("\nDIstance : ");
  Serial.print(distance); // 거리값 보여줌
  Serial.println(" Cm");
  delay(1000);
}

(4) Photoresistor

void setup() {
  Serial.begin(9600);
}

void loop() {
  int readValue = analogRead(A0); // 조도센서 값 측정
  Serial.println(readValue); // 조도센서 값 출력
}

(5) Relay Module

 int Relaypin = 3; // 릴레이 설정
int Switch = 9; // 스위치 설정

void setup() {
  pinMode(Relaypin, OUTPUT);
  pinMode(Switch, INPUT_PULLUP);
}

void loop() {
  if(digitalRead(Switch)==LOW){ // 스위치가 꺼져 있으면?
    digitalWrite(Relaypin, HIGH); // 릴레이 키기
    delay(100);
  }
  else{ // 스위치가 켜저 있으면?
    digitalWrite(Relaypin, LOW); //릴레이 끄기
    delay(100);
  }
}

 

작품 만들기

조도센서와 LED를 이용하여 조도센서값이 어느정도 되어야 LED에 불이 들어오는 지 확인하는 작품을 만들겠습니다. 세 개의 부품을 이용해야 하니, 제 원할 때만 작동되도록 스위치도 사용하겠습니다.

void setup() {
  Serial.begin(9600);
}

void loop() {
  int readValue = analogRead(A0);
  Serial.println(readValue);
  delay(1000);
}

 

'Nefus' 카테고리의 다른 글

NEFUS_Arduino_20230531  (0) 2023.05.31
NEFUS_Arduino_20230517  (0) 2023.05.17
NEFUS_Arduino_20230508  (0) 2023.05.08
NEFUS_프로젝트  (1) 2023.04.20
NEFUS_포인터  (2) 2023.04.12