코드 검색

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

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

이 튜토리얼은 Arduino map() 함수를 사용하여 analogWrite()에 필요한 원시 0–255 범위 대신 백분율 값(0–100%)으로 LED의 밝기를 제어하는 방법을 보여줍니다. 이는 코드를 단순화하고 임의의 바이트 값보다 백분율로 생각할 수 있으므로 훨씬 직관적으로 만드는 기본적인 기술입니다.

조립된 Sunfounder 자동차

이 기술은 센서 판독값을 확장하거나 제어 신호를 조정해야 하는 모든 프로젝트에 필수적입니다. 예를 들어, 다음과 같은 용도로 사용할 수 있습니다:

  • 가변 저항(포텐셔미터)의 판독값을 기반으로 LED의 밝기 또는 모터의 속도를 제어합니다.
  • 온도 센서의 출력(예: 0–1023)을 섭씨 또는 화씨 범위로 변환합니다.
  • 조이스틱의 아날로그 입력을 매핑하여 서보 모터의 위치를 제어합니다.
  • 백분율 값을 사용하여 장치의 전원 수준을 설정하는 간단한 사용자 인터페이스를 만듭니다.

이 강의가 끝나면 더 깨끗하고 유지 관리가 쉬우며 읽고 조정하기 쉬운 코드를 작성할 수 있게 됩니다.

하드웨어/부품

이 프로젝트는 최소한의 부품 세트를 사용하므로 초보자에게 완벽합니다. 다음이 필요합니다:

  • Arduino 보드(예: Uno).
  • LED.
  • 220옴 저항.
  • 점퍼 와이어.
  • 브레드보드(선택 사항이지만 권장됨).

배선 가이드

이 프로젝트의 배선은 비디오(비디오 20:47)에서 보여주는 것처럼 매우 간단합니다. LED는 220옴 전류 제한 저항을 통해 Arduino의 핀 3에 연결됩니다.

LED의 양극(긴 다리)을 저항을 통해 핀 3에 연결합니다. LED의 음극(짧은 다리)을 Arduino의 접지(GND) 핀에 연결합니다.

코드 설명

이 예제는 LED의 밝기 제어를 단순화하는 사용자 정의 함수에 중점을 둡니다. 코드는 코드를 직관적으로 만드는 핵심인 pwmValue()라는 사용자 정의 함수를 중심으로 구성됩니다.

코드의 구성 가능한 부분을 살펴보겠습니다:

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

이 줄은 LED가 연결된 Arduino 핀을 정의합니다. 숫자 3을 Arduino 보드의 다른 PWM 지원 핀으로 변경할 수 있습니다.

프로젝트의 핵심은 사용자 정의 함수 pwmValue()입니다. 이 함수는 백분율 값을 입력으로 받아 analogWrite()에서 사용하는 0–255 범위로 변환합니다. 여기서 map() 함수가 그 역할을 수행합니다.

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

이 함수를 사용하려면 원하는 밝기 백분율로 호출하기만 하면 됩니다. 함수는 analogWrite()에 대한 올바른 값을 반환합니다. 예를 들어, pwmValue(60)은 255의 60%에 해당하는 153을 반환합니다. 함수에는 입력 백분율이 0에서 100 사이인지 확인하는 안전 검사도 포함되어 있으며, 이 범위를 벗어나면 0을 반환합니다.

setup() 함수에서 이것이 어떻게 사용되는지 확인할 수 있습니다:

int b=5;//60% 밝기
Serial.println( pwmValue(b)   );//시리얼 모니터에 출력
analogWrite(LEDpin, pwmValue(b));// 60% 밝기로 LED 켜기

여기서 변수 b는 원하는 밝기 백분율로 설정됩니다. 그런 다음 pwmValue(b) 함수를 사용하여 매핑된 값을 시리얼 모니터에 출력하고 LED의 밝기를 설정합니다. LED의 밝기를 변경하려면 b의 값만 수정하면 됩니다. map() 함수가 필요한 모든 계산을 처리합니다.

실시간 프로젝트/데모

비디오에서 발표자는 b 변수의 값을 변경하고 코드를 Arduino에 업로드하여 프로젝트를 시연합니다. b60으로 설정되면 코드가 이를 153으로 매핑하고 LED가 60% 밝기로 켜집니다. b90으로 변경하면 229로 매핑되어 LED가 눈에 띄게 밝아집니다. 100으로 설정하면 255로 매핑되어 최대 밝기가 됩니다. 데모는 map() 함수가 직관적인 백분율 값을 사용하여 LED를 제어할 수 있게 해주는 방법을 명확히 보여주며, 시리얼 모니터는 핀으로 전송되는 정확한 0–255 값을 확인합니다(비디오 21:29).

이 비디오의 관련 프로젝트

챕터

  • [00:00] Millis 및 map 함수 소개
  • [01:19] Millis란 무엇이며 왜 사용하는가
  • [05:46] 이벤트와 함께 Millis를 사용하여 조치 취하기
  • [08:35] 푸시 버튼이 있는 Millis 예제 2
  • [12:14] 두 번의 버튼 누름을 확인하는 Millis 예제 3
  • [17:20] map() 함수 소개
  • [19:47] 백분율을 LED 밝기로 매핑하는 코드 예제
  • [20:47] map() 함수 실시간 데모
  • [22:41] 매핑을 처리하는 사용자 정의 함수 만들기

이미지

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
언어: C++
/*
Lesson 14/31-5: Arduino coding map( ) example-2
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);//initialzie serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=5;//60% brightness

    Serial.println( pwmValue(b)   );//print it on serial monitor
    analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }

/*
 * pwmValue(int percent)
 * @param precent is value between 0 to 100
 * @return it returns the mapped value from 0 to 255
 * written by Ahmad Shamshiri on Dec 9, 2022
 * 
 */
 int pwmValue(int percent)
 {
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
 } //pwmValue end
 

자원 및 참고자료

파일📁

사용자 매뉴얼