ㅇ 일 자 : 2026년 5월 20일(수)
ㅇ 아두이노 환경에서 조건문과 함수 활용한 제어 실습
1. 반복문으로 디지털 반딧불이 만들기 (교재 222P)
// [반복문으로 디지털 반딧불이 만들기]교재224p
void setup()
{
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
}
void loop()
{
int i = random(3); // 임의의 수 반환 (0~(N-1)
int pinNumber = i+9; // PWM을 지원하는 핀 번호 가져오기
int intensity = 0;
while (intensity <= 255) { // 서서히 밝아지게 만들기
analogWrite(pinNumber, intensity++);
delay(10);
}
while (intensity >=0) { // 서서히 어두워지게 만들기
analogWrite(pinNumber, intensity--);
delay(10);
}
}

2. DC 모터의 방향 제어하기 (237P)
// [DC 모터의 방향 제어하기] 교재237P
// DC모터는 기본 시계방향으로 회전하는데 단자에 연결된 선의 위치를 바꿔서,
// ,모터의 회전을 반시계 방향으로 바꾸어서 제어하기
void setup()
{
// PWM을 지원하는 디지털 9번, 10번 핀을 출력 모드로 설정
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// 스위치의 입력을 받기 위해 디지털 8번 핀을 입력 모드로 설정
pinMode(8, INPUT);
}
void loop()
{
// 가변저항의 입력값 범위를 map() 함수로 변환
int inputValue = analogRead(A0);
int convertedValue = map(inputValue, 0, 1023, 0, 255);
//스위치의 입력값에 따라 DC 모터의 방향을 제어
int inputSwitch = digitalRead(8);
if (inputSwitch == LOW) {
analogWrite(9, convertedValue); // LOW값을 읽으면 9번 핀에 전원을 공급
analogWrite(10, 0);
}
else {
analogWrite(9, 0);
analogWrite(10, convertedValue); // LOW 값을 읽지 않으면 10번 핀에 전원 공급
}
}

3. 초음파 센서로 거리 측정하기 (249P)
// [물체 사이의 거리에 반응하는 LED 만들기] 249p
void setup()
{
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
// 초음파 신호 송신
pinMode(9, OUTPUT);
digitalWrite(9, LOW);
delayMicroseconds(2);
digitalWrite(9, HIGH);
delayMicroseconds(5);
digitalWrite(9, LOW);
// 초음파 신호 수신
pinMode(9, INPUT);
double duration= pulseIn(9, HIGH);
double cm = duration * 340 / 10000 / 2;
// 물체의 측정 거리에 따라 LED 제어
if (cm < 20) {
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
}
else if (cm < 60) {
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
}
else {
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
}
delay(100);
}

4. 네오픽셀 다루기 (교재397p)
// [네오픽셀 다루기 1] 교재397
// 가. 네오픽셀 라이브러리 설치하기 (툴,라이브러리관리자 - 검색어 NeoPixel - Adafruit NeoPixel 선택후 설치)
// 나. 회로 구성하기 (구성요소 기본 - 검색어 neo - 구성요소에서 활용)
// 다. 스케치 코드 작성 라. 스케치 코드읽기
# include <Adafruit_NeoPixel.h>
#define PIN 2 // 제어를 위한 디지털 핀 번호
#define NUMPIXELS 1 // 네오픽셀의 LED 수
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// 네오픽셀 라이브러리 초기화
pixels.begin();
}
void loop() {
setColor();
delay(100);
}
// 임의의 RGB 색상을 변경하는 함수
void setColor() {
int redColor = random(0, 256);
int greenColor = random(0, 256);
int blueColor = random(0, 256);
pixels.setPixelColor(0, pixels.Color(redColor,greenColor,blueColor));
pixels.show();
}

5. 네오픽셀 다루기 2 (교재 400p)
// [스틱형 네오픽셀 다루기 2] 교재400
// 가. 네오픽셀 라이브러리 설치하기 (툴,라이브러리관리자 - 검색어 NeoPixel - Adafruit NeoPixel 선택후 설치)
// 나. 회로 구성하기 (구성요소 기본 - 검색어 neo - 구성요소에서 활용)
// 다. 스케치 코드 작성 라. 스케치 코드읽기
# include <Adafruit_NeoPixel.h>
#define PIN 2 // 제어를 위한 디지털 핀 번호
#define NUMPIXELS 4 // 네오픽셀의 LED 수
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// 네오픽셀 라이브러리 초기화
pixels.begin();
}
void loop() {
setColor();
delay(100);
}
// 임의의 RGB 색상을 변경하는 함수
void setColor() {
for (int i=0; i<4; i++) {
int redColor = random(0, 256);
int greenColor = random(0, 256);
int blueColor = random(0, 256);
pixels.setPixelColor(0, pixels.Color(redColor,greenColor,blueColor));
pixels.show();
}
}

6. 실습 후기
아두이노 환경에서 실습간 포트설정이 잘못되어 애러가 잠시 있었고, 보드를 연결하여 실습하였다. 물론 보드 구성품이 교재와 다르거나 완전하지 않아서 시뮬레이션으로 몇가지는 진행했다. 잘되는 부분도 있었지만 '모터방향 제어하기' 부분은 시뮬레이션만으로는 확인이 제한되었다. 각각의 제품 라이브러리 마다 상이한 경우 해당 버젼 파일을 모두 설치해 주어야 하는 번거로움도 있었다.
조건문과 함수, C언어를 사용하여 구현하는 부분에서는 다소 애로사항이 있어서 교재와 웹브라우저를 활용, 찾아보면서 이해하려고 하였다.
그러나 여러가지 실습을 통해 작동원리 및 산업현장에서 기계와 프로그램이 연동되어 어떻게 작동하는지 원리를 조금은 이해할 수 있게 되었다. " 도전은 계속된다"
'학습 로그 > Aduino' 카테고리의 다른 글
| D+34 [아두이노] Aduino '전자키보드 만들기' 실습 (0) | 2026.05.26 |
|---|---|
| D+30 [아두이노] 시뮬레이터+키트 를 활용한 "실습" (0) | 2026.05.19 |
| D+29 [아두이노] PIR 센서로 현관등 만들기 (0) | 2026.05.18 |
| D+25 [아두이노] Arduino 입문 및 실습 (0) | 2026.05.12 |