3주차_외부 LED 제어 - sookite22/SmartDivice_24 GitHub Wiki

목차

  • ESP32 실습 키트
    • 구성품
    • ESP32 Devkit 핀
  • ESP32 GPIO 다루기
    • GPIO
    • ADC
    • DAC와 PWM
  • 실습 - 외부 LED 제어
    • 점멸
    • 밝기 변화
    • 버튼 모듈로 ON/OFF 조작
    • 가변저항 모듈로 밝기 제어
      • map 함수
      • 가변저항 - 해상도의 이해
      • 옴의 법칙
  • 후기

1. ESP32 실습 키트

1.1. 구성품

ESP32, ESP32 확장 실드, 점퍼 케이블, LED 모듈, RGB LED 모듈, 버튼 모듈, 가변 저항 모듈, 온습도 센서 모듈, OLED, 빛 센서 모듈, 엑티브 부저 모듈, 초음파 센서, 토양 습도 센서 모듈, USB 5핀 케이블.

1.2. ESP32 Devkit 핀

스크린샷 2024-03-25 173514

  • EN, VIN, 3V3, GND핀 및 입력 전용핀(34(EN), 35, 36, 39)을 제외한 모든 핀을 디지털 출력으로 사용 가능하다.

2. ESP32 GPIO 다루기

2.1. GPIO

GPIO란 General Purpose Input/Output 의 약자로, 다목적 입출력 핀을 가리킨다. 주로 마이크로컨트롤러나 마이크로프로세서에서 사용되며, 사용자가 직접 제어할 수 있는 입출력 핀 이다.

마이크로컨트롤러 또는 마이크로프로세서의 GPIO는 전자 제어 시스템에서 중요한 역할을 한다. 이를 통해 다양한 외부 장치와의 상호작용을 통제하고, 시스템의 동작을 제어할 수 있어 다양한 용도로 활용이 가능하다.

아두이노와 사용법이 같아 편리하다.

2.2. ADC

ADC는 Analog-to-Digital Converter 의 약자로, 아날로그 신호디지털 데이터 로 변환하는 장치나 회로를 가리키며 이는 주로 마이크로컨트롤러나 마이크로프로세서에서 사용된다. 샘플링(표본화)/큐랜타이징(양자화)/코딩(부호화)의 3단계를 거쳐 아날로그 센서로부터 받은 물리적 신호를 디지털 형태로 변환하여 처리할 수 있게 해준다.

2.3. DAC와 PWM

  • 모두 디지털 신호를 아날로그 형태로 변환하는 방법이다. 그러나 작동 원리와 사용 용도에는 차이가 있다. 스크린샷 2024-03-25 204617

  • DAC(Digital-to-Analog Converter): 디지털 입력 값을 정확한 아날로그 출력 으로 변환한다.

    • 사용 예시: 음악 재생, 센서 데이터 처리, 신호 처리 등
  • PWM(Pulse Width Modulation): 디지털 신호를 시간적으로 변화하는 아날로그 신호로 변환하여 특정 시스템의 요구에 따라 조절된 평균적인 값 을 생성한다.

    • 사용 예시: LED 밝기 제어, 모터 속도 제어, 오디오 출력 등
    • 스마트디바이스연습 실습 환경에서는 아두이노와 동일하게 PWM 출력 지원한다.

3. 실습 - 외부 LED 제어

3.1. 점멸

보드 연결

  • 주의사항: 보드와 모듈 간 점퍼 케이블을 G/V/S에 맞춰 동일하게, 알맞는 위치의 핀에 연결시켜야 한다!

스크린샷 2024-03-25 181705

코드 입력

const int ledPin = 4;
// setup 함수는 리셋을 누르거나 보드에 전원을 공급할 때 한 번 실행

void setup(){
  pinMode(ledPin, OUTPUT); // ledPin을 출력으로 설정
}

// loop 함수는 전원이 꺼질 때까지 계속 실행
void loop(){
  digitalWrite(ledPin, HIGH);
  delay(1000); // 1초 기다리기
  digitalWrite(ledPin, LOW);
  delay(1000);
}

결과

https://github.com/sookite22/SmartDivice_24/assets/162407612/2d0da442-d629-47fa-83d6-2ad8bd7fdfb5


3.2. 밝기 변화

보드 연결

스크린샷 2024-03-25 181705

코드 입력

// LED 핀 번호
const int ledPin = 4; // 4는 GPIO4에 해당

void setup()P
  pinMode(ledPin, OUTPUT);
}

void loop(){
  // LED 밝기 증가
  for(int i = 0; i <= 255; i++){
    // PWM으로 LED 밝기 변경
    analogWrite(ledPin, i);
    delay(15);
  }

  // LED 밝기 감소
  for(int i = 255; i >= 0; i--){
    // PWM으로 LED 밝기 변경
    analogWrite(ledPin, i);
    delay(15);
  }
}

결과

https://github.com/sookite22/SmartDivice_24/assets/162407612/04556d7b-001e-49b3-84ed-ed9aae435fac


3.3. 버튼 모듈로 ON/OFF 조작

보드 연결

스크린샷 2024-03-25 181832

코드 입력

const int buttonPin = 33; // 버튼 핀 번호
const int ledPin = 4; // LED 핀 번호
int buttonstate = 0; // 버튼 상태를 읽기 위한 변수

void setup(){
  // LED 핀을 출력으로 초기화
  pinMode(ledPin, OUTPUT);
  // 푸시버튼 핀을 입력으로 초기화
  pinMode(buttonPin, INPUT);
}

void loop(){
  // 버튼 상태 읽기
  buttonState = digitalRead(buttonPin);
  // 버튼이 눌렸는지 확인. 그렇다면 buttonState는 LOW이다. 
  if(buttonState == LOW){
    // LED 켜기
    digitalWrite(ledPin, HIGH);
  } else {
    // LED 끄기 
    digitalWrite(ledPin, LOW);
  }
}

결과

https://github.com/sookite22/SmartDivice_24/assets/162407612/93066a70-d2a9-4973-8e83-1f4b5a7e9109


3.4 가변저항 모듈로 밝기 제어

보드 연결

스크린샷 2024-03-25 182137

코드 입력

// 가변 저항 모듈은 GPIO 34(아날로그 ADC1_CH6에 연결
const int potPin = 34;
// LED 모듈은 GPIO 4에 연결
const int ledPin = 4; 
// 가변 저항 값을 저장하기 위한 변수
int potValue = 0;

void setup(){
  pinMode(potPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop(){
  // 가변 저항 값을 읽음
  potValue = analogRead(potPin);
  analogWrite(ledPin, map(potValue, 0, 4095, 0, 255));
  delay(500);
}
  • 아날로그 입력은 0~4095 값을 리턴한다.
  • 그러므로 potPin 변수는 0~4095 값을 가지게 된다.

결과

https://github.com/sookite22/SmartDivice_24/assets/162407612/8787f405-e32d-41ad-a4c9-542d3ef909cb

3.4-1. map 함수란?

map 함수는 주어진 범위에서의 값을 다른 범위로 변환하는 데 사용된다.

map(변환하려는 값, 현재 값의 최소 범위, 현재 값의 최대 범위, 목표 값의 최소 범위, 목표 값의 최대 범위);

  • 위 코드에서 analogRead(potPin)은 가변 저항 모듈에서 읽은 값을 반환한다.
  • analogWrite(ledPin, map(potValue, 0, 4095, 0, 255))는 potValue 값을 0부터 4095까지의 범위에서 0부터 255까지의 범위로 변환하여 LED 밝기를 조절한다.

3.4-2. 가변저항 - 해상도의 이해

가변 저항기(가변 저항) 는 전기 회로에서 저항 값을 변경할 수 있는 기기이다. 일반적으로 가변 저항기는 회전 또는 슬라이딩하는 접점을 사용하여 전기 신호를 제어하거나 조절할 수 있다. 해상도(resolution) 는 가변 저항기가 값을 변경할 수 있는 미세한 단계나 간격을 나타낸다. 해상도가 높을수록 가변 저항기가 더 정밀한 값을 조절할 수 있다.

가변 저항기의 해상도는 일반적으로 다음 두 가지 요소에 의해 결정된다.

  • 저항 값의 변화 범위: 가변 저항기가 제공하는 전체 저항 값의 범위 가 해상도에 영향을 준다.

  • 물리적 디자인: 가변 저항기의 물리적 구조와 디자인도 해상도에 영향을 준다. 회전식 가변 저항기 의 경우, 회전하는 접점이 나누어진 단계별로 저항 값을 변경한다. 슬라이딩 가변 저항기 의 경우, 슬라이더의 위치에 따라 저항 값이 변화한다.

  • 예를 들어, 온도 조절 장치나 오디오 장비에서는 해상도가 높은 가변 저항기를 사용하여 정확한 조절이 가능하도록 한다. 따라서 가변 저항기의 해상도를 고려하여 적절한 디바이스를 선택하는 것이 중요하다.

3.4-3. 옴의 법칙

옴의 법칙은 전기 회로에서 전압, 전류 및 저항 간의 관계를 설명하는 기본 법칙 중 하나이다.

V = I * R

image

  • 전압(Voltage) 은 전기 회로에서 전력 을 나타낸다. 단위 - 볼트(V)
  • 전류(Current) 는 전기 회로를 통해 흐르는 전자의 흐름 을 나타낸다. 단위 - 암페어(Ampere, A)
  • 저항(Resistance) 은 전기 회로에서 전류의 흐름을 제한하는 속성 을 나타낸다. 단위 - 옴(Ohm, Ω)

image

  • 이 법칙은 전기 회로의 각 구성 요소의 상호 작용을 설명한다. 즉, 전압은 전류와 저항의 곱으로 정의된다. 따라서 전압은 전류와 저항에 의해 결정된다. 예를 들어, 저항이 크면 전류가 작아지고, 전압도 작아진다.

4. 후기

2주차까지는 ESP32의 입출력 핀과 GPIO 등에 대하여 잘 모르고 실습을 진행하였는데 반해, 작동 원리를 배우고 나니 더욱 효과적인 학습이 가능했던 것 같다. 또한, 여러 모듈을 사용하다 보니 코드를 작성하고 이해하는 데에 도움이 되고 흥미를 더했다. 모듈을 직접 조작하여 결과값을 확인할 수 있다는 것이 매력적이었고, 또 다른 모듈들을 활용하고 배우며 나만의 프로그램을 구현해보고 싶다.