251105 [ Day 81 ] - Arduino (3)

TaeHyun·2025년 11월 5일

TIL

목록 보기
94/184

시작하며

오늘은 아두이노에서 활용할 수 있는 여러 모듈과 센서에 대해서 공부했다.

피에조 부저

  • 디지털 핀의 전압을 매우 짧은 시간 안에 바꾸어가며 주파수에 맞는 소리를 낼 수 있도록 해줌

피에조 부저 종류

  • 능동 부저
    • 음이 하나밖에 없음 (On / Off)
    • 다리가 긴쪽이 + 짧은쪽이 -
    • 전원만 공급하면 바로 소리 출력
  • 수동 부저
    • 주파수 범위 내에서 다양한 음을 낼 수 있음
    • 다리의 길이가 같음
    • 전원과 주파수를 설정해줘야 소리 출력
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

가변 저항 모듈

  • 저항 값을 조절할 수 있는 모듈
  • 일반 저항 소자와 달리 3개의 핀으로 구성되어 있으며, 노브를 돌려 저항값을 조절해 전류의 크기를 바꿈

가변 저항 모듈 구조

  • GND : 접지
  • VCC : 전원 5V
  • OUT : 아날로그 저항 값 입력
// 가변 저항 모듈로 LED 밝기 조절하기
int LED = 3;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  int resistor = analogRead(A0);
  Serial.println(resistor);
  resistor = map(resistor, 0, 1023, 0, 255); // 입력값을 출력값으로 변경
  analogWrite(3, resistor);
}

조도 센서

  • 주변 밝기를 측정하여 측정된 빛의 세기에 따라 저항 값이 변하는 센서
  • 빛이 강하면 저항 값이 작아지고, 빛이 약하면 저항 값이 커짐
// 조도 센서 사용해서 LED 작동
int LED = 3;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  int photoresistor = analogRead(A0);
  Serial.println(photoresistor);
  
  digitalWrite(LED, LOW);

  if(photoresistor > 940) {
  digitalWrite(LED, HIGH);
  }
  
  delay(100);
}

온습도 센서

  • 온도 센서와 습도 센서가 하나의 전자 부품으로 구성된 장치
  • 측정 범위와 정확도에 따라 DHT11(파란색)모델과 DHT22(하얀색)모델로 구분
  • 두 모델은 동작 전압과 소비 전류가 동일하지만 온도의 습도 측정 범위와 샘플링 주기가 다름

온습도 센서 원리

  • 세라믹 반도체의 온도에 따라 물질의 저항 값이 변하는 소재의 특성을 이용하여 값의 변화를 감지해 온도 값 출력
  • 두 전극 사이의 저항 변화를 측정하여 공기중의 습도 변화를 측정

DHT11

// 온습도 센서

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

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

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float c = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(c) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor");
    return;
  }

  Serial.print("Humidity : ");
  Serial.print(h);
  Serial.println(" % ");
  Serial.print("Temperature : ");
  Serial.print(c);
  Serial.print(" °C / ");
  Serial.print(f);
  Serial.println(" °F ");
  Serial.println("");
}

마치며

아두이노에 대해서 배울수록 프로젝트 구상도 점점 명확해지는 것 같다. 원래는 미니 스마트 그리드 시스템을 구상하고 있었지만, 조금 더 상호작용이 가능하고 시각적으로 보이는 주제가 좋을 것 같아서 태양광 ESS로 주제를 바꾸었다. 아두이노와 머신러닝 등 기능은 크게 다른 점은 없지만, 전력 거래라는 측면을 웹에서 표현하면 더 좋을 것 같아서 변경하게 되었다.
이제 내일부터 머신러닝 모델에 대해서 찾아보고, 학습 데이터 수집을 시작할 것 같다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글