코드 검색

레슨 14/31-4: 아두이노 코딩 map() 예제 1

레슨 14/31-4: 아두이노 코딩 map() 예제 1

이 튜토리얼은 Arduino 프로그래밍 시리즈의 일부로, map() 함수의 실제 사용에 초점을 맞춥니다. 이 강의에서는 백분율 값(0–100)을 PWM(펄스 폭 변조) 값(0–255)으로 변환하여 LED의 밝기를 제어하는 방법을 배우게 됩니다. 60%가 153과 같다는 것을 수동으로 계산하는 대신, map() 함수가 선형 변환을 처리해 주므로 코드가 더 깔끔하고 직관적입니다.

이 기술은 센서 판독값이나 사용자 입력을 다른 범위로 변환해야 하는 많은 실제 응용 분야에서 필수적입니다. 예를 들어, 다음과 같은 용도로 사용할 수 있습니다:

  • 가변 저항 판독값을 기반으로 DC 모터의 속도 제어.
  • 온도 센서의 원시 값을 0-100% 눈금으로 표시.
  • 조이스틱 좌표를 서보 모터 각도로 매핑.
  • 주변 광 센서를 기반으로 LED 밝기 조정.
  • 0-5V 아날로그 판독값을 0-1023 디지털 값으로 또는 그 반대로 변환.

하드웨어/부품

이 프로젝트를 따라 하려면 다음 부품이 필요합니다:

  • Arduino 보드(Uno, Nano 등)
  • LED
  • 220옴 저항
  • 점퍼 와이어
  • 브레드보드(선택 사항이지만 권장)

배선 가이드

비디오에서 강사는 LED 페이딩에 대한 이전 강의의 배선 설정을 사용하여 프로젝트를 시연합니다. 회로는 간단합니다: LED의 애노드(긴 다리)를 220옴 저항에 연결하고, 저항의 다른 쪽 끝을 Arduino의 디지털 핀 3에 연결합니다. LED의 캐소드(짧은 다리)를 Arduino의 접지(GND) 핀에 직접 연결합니다.

코드 설명

이 예제의 코드는 매우 간결하며, 핵심 로직은 setup() 함수에 있습니다. 사용자가 구성할 수 있는 부분을 살펴보겠습니다.

int LEDpin = 3; //LED용 핀 정의

이 줄은 LED가 연결된 Arduino 핀을 정의합니다. 이 예제에서는 아날로그 출력에 필요한 PWM 지원 핀인 핀 3으로 설정되어 있습니다. LED를 다른 PWM 핀에 연결하는 경우 이 숫자를 변경할 수 있습니다.

int b=8;//60% 밝기

이것은 다양한 밝기 수준을 테스트하기 위해 수정할 핵심 변수입니다. 원하는 밝기를 백분율로 나타냅니다. 코드의 주석은 "60%"라고 되어 있지만, 비디오에서는 시연 목적으로 값이 8로 설정되어 있습니다. 0에서 100 사이의 정수로 변경할 수 있습니다. 예를 들어, b = 60으로 설정하면 60% 밝기 수준을 나타냅니다.

int brightness = map(b, 0, 100, 0,255);

이것이 이 강의의 핵심입니다. map() 함수는 백분율 값(b)을 가져와 원래 범위(0~100)에서 새 대상 범위(0~255)로 변환합니다. 결과는 brightness 변수에 저장되며, 이 변수는 LED 핀에 아날로그 값을 쓰는 데 사용됩니다.

analogWrite(LEDpin, brightness);// 60% 밝기로 LED 켜기

마지막으로, 이 줄은 analogWrite()를 사용하여 매핑된 값을 LED 핀으로 보냅니다. 이는 LED의 듀티 사이클을 설정하여 밝기를 효과적으로 제어합니다. 이 접근 방식의 장점은 LED를 제어하기 위해 b 변수만 변경하면 되고, map() 함수가 필요한 모든 계산을 처리한다는 것입니다.

실시간 프로젝트/시연

비디오에서 강사는 코드를 업로드하고 b 변수 변경의 효과를 시연합니다. b가 8로 설정되면 시리얼 모니터에 매핑된 값 20이 출력되고 LED가 눈에 띄게 어둡습니다. b를 90으로 변경하면 매핑된 값이 229가 되어 LED가 훨씬 밝아집니다. b를 100으로 설정하면 255로 매핑되어 최대 밝기가 됩니다. 이 실용적인 시연은 map() 함수가 사용자 친화적인 백분율 값으로 아날로그 출력을 제어하는 과정을 어떻게 단순화하는지 명확히 보여줍니다.

이 비디오의 관련 프로젝트

챕터

  • [00:00] Robojax의 Arduino 과정 소개
  • [01:19] millis()란 무엇이며 왜 사용하는가
  • [05:46] 예제 1: 타이밍 이벤트에 millis() 사용
  • [08:29] 예제 2: 푸시 버튼과 함께 millis() 사용
  • [12:14] 예제 3: 지연 후 두 번째 버튼 누름 감지
  • [17:20] map() 함수 소개
  • [19:47] map() 예제의 코드 설명
  • [20:41] map() 함수의 실시간 시연

이미지

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
언어: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

자원 및 참고자료

파일📁

사용자 매뉴얼