MEC2036
Week 12. Arduino Sensors and Actuators w/ Libraries (25/05/26 &28)
Adventure Design
(어드벤처 디자인)
담당 교수: 조수호 (Prof. Soo-Ho Jo)
동국대학교 기계로봇에너지공학과 원흥관 E643호
(02-2260-3702 / soohojo@dgu.ac.kr)
JOLAB: http://jolab.dgu.ac.kr
(04620) 30, Pildong-ro 1-gil, Jung-gu, Seoul, Republic of Korea
Tel : +82-2-2260-3702
1
Arduino Sensors and Actuators w/ Libraries (1/19)
LCD Display – Library : LiquidCrystal.h (1/10)
LCD 기능 익히기
▪ LCD는 액정 디스플레이 또는 액정 표시장치를 의미함.
▪ 뒷면에 빛을 내는 Backlight를 배치, 앞면에 액정을 두었음.
▪ 전기신호에 따라 빛을 차단하거나 통과시키는 방식으로 문자나 숫자 등을 표시하는 장치임.
▪ Thinkercad와 Arduino Kit에서 제공하는 LCD를 1602 LCD라고도 함 (가로로 16개의 문자를, 세로로 2줄을 표현할 수 있는 LCD).
16개의 단자
▪ GND : GNV
▪ VCC : 5 V
▪ V0 : 가변저항의 출력 값을 통해 문자의 밝기를 제어하는데 사용
▪ RS : 데이터 또는 명령어를 선택할 수 있는 스위치
▪ RW : LCD 값을 읽을지 쓸지 결정 (보통 읽기만 하므로, GND에 꽂으면 됨)
▪ E : 명령어를 실행하기 위한 시점을 결정
▪ DB0 ~ DB7 : 데이터 또는 명령어를 전송하는 8개의 단자
(Pin 수가 부족해질 경우, DB4 ~ DB7까지 4개 사용)
LCD와 OLED의 차이 검색해보자!
(요즘 기본 지식)
▪ BLA / BLK (LED) : backlight를 사용하기 위한 단자
2
Arduino Sensors and Actuators w/ Libraries (2/19)
LCD Display – Library : LiquidCrystal.h (2/10)
LCD 기능 익히기
▪ GND : GNV
▪ VCC : 5 V
▪ V0 : 가변 저항 가운데 다리
▪ RS : 8번
▪ RW : GND
▪ E : 10번
▪ D04 : 2번
▪ D05 : 3번
▪ D06 : 4번
▪ D07 : 5번
▪ LED(1) : 저항 100Ω + 5 V
▪ LED(2) : GND
3
Arduino Sensors and Actuators w/ Libraries (3/19)
LCD Display – Library : LiquidCrystal.h (3/10)
LCD 기능 익히기
4
Arduino Sensors and Actuators w/ Libraries (4/19)
LCD Display – Library : LiquidCrystal.h (4/10)
LCD 기능 익히기
▪ Arduino에서 Sensor 및
Actuator 별로 자주 쓰이는 기
능들이 있음.
▪ 매번 복잡한 Code를 처음부터
작성할 필요 없이, #include <라
이브러리명.h> 한 줄로 물러와
서 바로 관련 함수(Code)들을
쓸 수 있음.
5
Arduino Sensors and Actuators w/ Libraries (5/19)
LCD Display – Library : LiquidCrystal.h (5/10)
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 10, 2, 3, 4, 5);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Hello, Arduino!!");
lcd.setCursor(0, 1);
lcd.print("1234567890”);
}
LCD 기능 익히기
▪ LiquidCrystal lcd(8, 10, 2, 3, 4, 5);
LiquidCrystal lcd(RS, E, D04, D05, D06, D07);
Code 설명 : Arduino 연결된 Pin 번호로 LCD 모듈 초기화
▪ lcd.begin(16, 2);
lcd.being(col, row);
Code 설명 : LCD 크기를 설정
▪ lcd.setCursor(0, 0);
lcd.setCursor(col, row);
Code 설명 : 커서를 (col, row) 위치로 이동
▪ lcd.print("Hello, Arduino!!");
lcd.print("1234567890”);
lcd.print(Data);
Code 설명 : 숫자·문자열·변수 등 여러 타입을 자동 변환하여 출력
ChatGPT에 lcd 관련 함수가 무엇이 있는지 물어보세요!
6
Arduino Sensors and Actuators w/ Libraries (6/19)
LCD Display – Library : LiquidCrystal.h (6/10)
LCD 기능 익히기
가변 저항을 바꾸면?
7
Arduino Sensors and Actuators w/ Libraries (7/19)
LCD Display – Library : LiquidCrystal.h (7/10)
LCD 기능 익히기
다음으로, 저항을 바꾸면?
한번 시도해보세요
8
Arduino Sensors and Actuators w/ Libraries (8/19)
LCD Display – Library : LiquidCrystal.h (8/10)
LCD 기능 익히기
9
Arduino Sensors and Actuators w/ Libraries (9/19)
LCD Display – Library : LiquidCrystal.h (9/10)
LCD 기능 익히기
Install 누른 후, Code 상단에 #include <LiquidCrystal.h> 라고 적읍시다.
10
Arduino Sensors and Actuators w/ Libraries (10/19)
LCD Display – Library : LiquidCrystal.h (10/10)
LCD 기능 익히기
정상적으로 Library가 다운 받아졌다면, 해당 Library가 있음.
11
Arduino Sensors and Actuators w/ Libraries (11/19)
Servomotor – Library : Servo.h (1/6)
Servo 기능 익히기
▪ Servomotor란 특정한 각도(위치) 또는 속도로 회전하도록 설계된 모터 시스템을 뜻함.
▪ 구성 요소 : DC Motor(실제 회전 동력 제공), 감속 Gearbox(Torque를 높이고 회전 속도를 낮춤), Driver(목표 각도와 실제 각도의 차이를 비교)
▪ 0o ~ 180o의 각도를 정밀하게 제어할 수 있으며, 로봇 분야 관절/손과 같은 정밀함이 요구되는 곳에서 사용.
▪ 제어 원리 : Arduino에서 Pulse Width Modulation 신호로 목표 위치를 전달 (어느 Pin에 연결해야 될지 알겠죠?)
12
Arduino Sensors and Actuators w/ Libraries (12/19)
Servomotor – Library : Servo.h (2/6)
Servo 기능 익히기
13
Arduino Sensors and Actuators w/ Libraries (13/19)
Servomotor – Library : Servo.h (3/6)
#include <Servo.h>
Servo myServo;
int pin_number = 5;
void setup() {
Serial.begin(9600);
myServo.attach(pin_number);
}
Servo 기능 익히기
▪ Servo myServo;
Code 설명 : Servomotor를 제어하기 위한 객체를 선언함.
▪ myServo.attach(pin_number);
Code 설명 : 지정한 Digital Pin에 Servomotor 연결 및 사용 준비.
▪ myServo.write(angle);
Code 설명 : Servomotor을 해당 위치(angle)로 이동시킴.
void loop() {
for (int angle = 0; angle < 180; angle++) {
myServo.write(angle);
delay(100);
Serial.println(angle);
}
}
14
Arduino Sensors and Actuators w/ Libraries (14/19)
Servomotor – Library : Servo.h (4/6)
Servo 기능 익히기
빙빙 돌아가는 회전목마처럼
영원히 계속될 것처럼
15
Arduino Sensors and Actuators w/ Libraries (15/19)
Servomotor – Library : Servo.h (5/6)
Servo 기능 익히기
어떤 결과가 나올까요?
16
Arduino Sensors and Actuators w/ Libraries (16/19)
Servomotor – Library : Servo.h (6/6)
Servo 기능 익히기
17
Arduino Sensors and Actuators w/ Libraries (17/19)
DHT11 Humidity and Temperature Sensor – Library : dht11.h (Thinkercad 내에 없는 센서) (1/3)
5V
Pin Number
GND
18
Arduino Sensors and Actuators w/ Libraries (18/19)
DHT11 Humidity and Temperature Sensor – Library : dht11.h (Thinkercad 내에 없는 센서) (2/3)
#include <DHT11.h>
int pin = 2;
DHT11 dht11(pin);
void setup() {
Serial.begin(9600);
}
void loop() {
int temperature
int humidity;
int result = dht11.readTemperatureHumidity(temperature, humidity);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C\tHumidity: ");
Serial.print(humidity);
Serial.println(" %");
delay(1000);
}
▪ DHT dht11(pin_number);
Code 설명 : pin_number에 dht11 Sesnor가 연결되어 있음
▪ int temperature;
int humidity;
Code 설명 : 정수형 변수 정의(변수 명: temperature, humidity)
▪ int result = dht11.readTemperatureHumidity(temperature,
humidity);
Code 설명 : 정수형 변수 temperature에 온도를, 정수형 변수
humidity에 습도를 저장함
▪ 추가 함수 기능 :
readTemperature(temperature) : 온도만 저장
readHumidity(humidity) : 습도만 저장
19
Arduino Sensors and Actuators w/ Libraries (19/19)
DHT11 Humidity and Temperature Sensor – Library : dht11.h (Thinkercad 내에 없는 센서) (3/3)
20
Arduino Sensors and Actuators w/ Libraries – Deadline : 6/2(Mon) 12:00 am
Team Task 1 – Digital I/O, Analog I/O (Thinkercad 불가능)
▪ 사용 물품 : 1602 LCD 1개, DHT11 온습도 센서 1개, Push Botton 1개
▪ 목표 1. Push Botton을 누르고 손을 때면, 온습도 센서 및 1602 LCD 작동
▪ 목표 2. 1초 단위로 계측한 온도 및 습도 정보를 1602 LCD에 시각화
▪ 목표 3. 특정 온도 혹은 특정 습도 이상(혹은 이하)가 되었을 때, LCD에 경고 메시지 출력
▪ 제출물 : 실제 Arduino 구동 영상 (휴대폰 촬영)
Team Task 2 – Digital I/O, Analog I/O (Thinkercad 가능)
▪ 사용 물품 : Servomotor 1개, 가변 저항 1개, 조도 센서 1개, Push Botton 2개
▪ 목표 1. Push Botton ①을 누르면, 시스템 전원 켜기 및 Servomotor와 조도 센서 작동 대기
▪ 목표 2. Push Botton ②를 한 번 누르면, 수동 모드 진입
목표 2. 가변 저항 값(0~1023)을 읽어, Servomotor 위치(각도) 제어(map 기능 활용)
▪ 목표 3. Push Botton ②를 한 번 더 누르면, 자동 모드 진입
목표 3.1초 간격으로 조도 측정, 어두움이 감지되면 Servomotor 90o, 밝아지면 초기 각도로 복귀
▪ 제출물 : 실제 Arduino 구동 영상 (휴대폰 촬영)
21
Arduino Sensors and Actuators w/ Libraries – Deadline : 6/2(Mon) 12:00 am
Team Task 3 – Digital I/O, Analog I/O (Thinkercad 가능)
▪ 사용 물품 : 1602 LCD 1개, 4x4 Keypad Module 1개(별도 공부 필요), Servomotor 1개
Analog Input Pin도 Digital I/O로 활용이 가능함
Arduino Kit용
▪ 목표 1. 전원을 공급하면, Servomotor 0o, LCD “Enter PIN:”
▪ 목표 2. PIN 입력, 기존에 정해 좋은 Password와 일치 시,
목표 2. LCD “PIN Correct”, Servomotor 0o → 90o / 5초 후,. LCD “Enter PIN:”, Servomotor 90o → 0
▪ 목표 3. PIN 입력, 기존에 정해 좋은 Password와 불일치 시,
목표 2. LCD “PIN Incorrect”, Servomotor 0o 유지 / 5초 후,. LCD “Enter PIN:”
▪ 제출물 : 실제 Arduino 구동 영상 (휴대폰 촬영)
Thinkercad용
Team Task 4 – Digital I/O, Analog I/O (Thinkercad 불가능)
▪ 사용 물품 : 1602 LCD 1개, 13.56 RFID 모듈 1개(별도 공부 필요), Servomotor 1개, 수동 부저 1개, RGB LED 1개, 저항 220 Ω 3개
▪ 목표 1. 전원을 공급하면, 1602 LCD에 “Ready” 표시
▪ 목표 2. 카드 태깅, 카드 정보가 일치하면
목표 2. Servomotor 0o → 90o, LCD “Welcome”, RGB LED 녹색 점멸
▪ 목표 3. 카드 태깅, 카드 정보가 불일치하면
목표 2. Servomotor 0o 유지, LCD “Access Denied”, RGB LED 적색 점멸 및 경고음
▪ 제출물 : 실제 Arduino 구동 영상 (휴대폰 촬영)
22