251106 [ Day 82 ] - Arduino (4)

TaeHyun·2025년 11월 6일

TIL

목록 보기
95/182

시작하며

오늘도 아두이노에 대해 이어서 공부했다.

초음파 센서

  • 디지털 신호
  • 20KHz 이상의 주파수를 가진 소리인 초음파을 이용해서 앞쪽에 위치한 물체아의 거리를 인식하는 센서
#define TRIG 9
#define ECHO 8

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop() {
  digitalWrite(TRIG, HIGH);
  delay(10);
  digitalWrite(TRIG, LOW);
  float duration = pulseIn(ECHO, HIGH);
  float distance = ((34000*duration)/1000000)/2;
  Serial.print(distance);
  Serial.println("cm");
  delay(100);
}
// 초음파 센서로 부저와 LED 작동

#define TRIG 9
#define ECHO 8
#define BUZZER 13
#define LED 3

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(LED, OUTPUT); 
  pinMode(BUZZER, OUTPUT); 
}

void loop() {
  digitalWrite(TRIG, HIGH);
  delay(10);
  digitalWrite(TRIG, LOW);

  float duration = pulseIn(ECHO, HIGH);
  float distance = ((34000*duration)/1000000)/2;

  if(distance < 300) {
    digitalWrite(BUZZER, HIGH);
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(BUZZER, LOW);
    digitalWrite(LED, LOW);
  }

  Serial.print(distance);
  Serial.println("cm");
  delay(100);
}

가스 센서

  • 아날로그 신호
  • 화재 경보 장치, 가스 누설 경보기 등
#define GAS_A A0
#define GAS_D 8
#define BUZZER 13
#define LED 3

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT); 
  pinMode(BUZZER, OUTPUT); 
  Serial.println("히터 가열");
  delay(1000);
}

void loop() {
  float sensorValue = analogRead(GAS_A);
  float sensorDValue = digitalRead(GAS_D);
  Serial.println("");
  Serial.print("센서 입력 : ");
  Serial.println(sensorValue);

  if(sensorValue > 300) {
    Serial.print(" |연기감지!");
    Serial.println("");
    digitalWrite(BUZZER, HIGH);
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(BUZZER, LOW);
    digitalWrite(LED, LOW);
  }

  Serial.print("센서 디지털 : ");
  Serial.print(sensorDValue);
  Serial.println("");

  delay(1000);
}

자이로 / 가속도 센서

  • 자이로 센서와 가속도 센서가 합쳐진 센서
  • 자이로 센서
    • x, y, z축을 기준으로 변화하는 방향에 따른 정보를 제공하는 센서
  • 가속도 센서

서브 모터

  • DC모터와는 달리 속도와 각도를 모두 제어할 수 있는 모터
    • 노란색 : 데이터 핀
    • 빨간색 : VCC
    • 검정색 : GND
  • Servo 라이브러리 사용
#include <Servo.h>

Servo servo;

void setup() {
  Serial.begin(9600);
  servo.attach(10);
}

void loop() {
  for (int angle=0; angle<=180; angle ++) {
    servo.write(angle);
    Serial.print("angle : ");
    Serial.print(angle);
    Serial.println("");
    delay(100);
  }
}

LCD 디스플레이

  • 뒷면에 백라이트를 배치하고 앞면에 액정을 두어 전기 신호에 따라 빛을 차단하거나 통과시키는 방식
  • 문자나 숫자 등을 표시하는 장치
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.print("Hello, World!");
  delay(1000);

  lcd.setCursor(0, 1);
  lcd.print("Posco X Codingon");
  delay(1000);

  lcd.clear();
  delay(1000);
}
  • 가번 저항 모듈 + 서브 모터 + LCD 디스플레이
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;

int prevResistor = -1;

void setup() {
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
  servo.attach(10);
  lcd.setCursor(0, 0);
  lcd.print("Current Angle");
}

void loop() {
  int resistor = analogRead(A0);
  Serial.println(resistor);
  resistor = map(resistor, 0, 1023, 0, 180);
  servo.write(resistor);

  if(resistor != prevResistor) {
    lcd.setCursor(0, 1);
    lcd.print("   ");
    lcd.setCursor(0, 1);
    lcd.print(resistor);
    lcd.write(0xDF);

    prevResistor = resistor;
  }
  Serial.println("");
  Serial.print(resistor);
  Serial.println(" °");
}

마치며

이제 어느 정도 익숙해져서 문제를 보자마자 회로 구성을 쉽게 할 수 있었다. 코드 작성도 거의 비슷한 패턴이 많아서 하면 할수록 적응되고 있는 것 같다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글