아두이노
아두이노 메가 2560 프로그래밍
모빌리티키즈
2025. 5. 24. 11:38
728x90
반응형
이 프로젝트는 아두이노 메가 2560, I2C LCD, CDS 센서, LM35 온도 센서, 스위치 3개, 주파수 발생기(SY-LD213), 그리고 초음파 센서를 활용하여 다양한 기능을 구현하는 시스템입니다. (전자산업기사 대비)
1️⃣ 회로 연결 방법
회로를 구성하기 위해 각 센서와 모듈을 아두이노 메가 2560과 연결합니다.
🔗 LCD I2C 연결
LCD 핀아두이노 메가 2560 핀설명
VCC | 5V | LCD 전원 공급 |
GND | GND | 그라운드 연결 |
SDA | 20 (SDA) | I2C 데이터 핀 |
SCL | 21 (SCL) | I2C 클록 핀 |
🎛️ CDS 센서 연결
CDS 핀아두이노 핀설명
VCC | 5V | 전원 공급 |
GND | GND | 그라운드 연결 |
SIGNAL | A0 | 아날로그 입력 |
PULL-UP | 10KΩ | 풀업 저항 연결 |
🌡️ LM35 온도 센서 연결
LM35 핀아두이노 핀설명
VCC | 5V | 전원 공급 |
GND | GND | 그라운드 연결 |
SIGNAL | A1 | 아날로그 입력 |
PULL-DOWN | 10KΩ | 풀다운 저항 연결 |
🔘 푸쉬버튼 스위치 연결
스위치 핀아두이노 핀설명
SW1 | 2 | Mode 변경 버튼 |
SW2 | 3 | Mode 선택 버튼 |
SW3 | 4 | EEPROM 저장 버튼 |
PULL-UP | 10KΩ | 풀업 저항 연결 |
🔊 초음파 센서 연결
초음파 핀아두이노 핀설명
VCC | 5V | 전원 공급 |
GND | GND | 그라운드 연결 |
TRIG | 7 | 신호 발생 |
ECHO | 6 | 반사 신호 받기 |
⚡ 주파수 발생기(SY-LD213)
모듈 핀아두이노 핀설명
VCC | 5V | 전원 공급 |
GND | GND | 그라운드 연결 |
PWM_OUT | 9 | PWM 입력 |
2️⃣ 전체 소스 코드
아두이노 메가 2560을 기반으로 코드 작성해 보겠습니다.
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
// LCD 설정
#define LCD_I2C_ADDR 0x27
LiquidCrystal_I2C lcd(LCD_I2C_ADDR, 16, 2);
// 센서 및 버튼 핀 설정
#define CDS_PIN A0
#define TEMP_PIN A1
#define SW1 2
#define SW2 3
#define SW3 4
#define TRIG_PIN 7
#define ECHO_PIN 6
#define PWM_PIN 9
int mode = 1;
int cdsValue;
float tempValue;
int hours = 11, minutes = 59, seconds = 50;
int count = 0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(CDS_PIN, INPUT);
pinMode(TEMP_PIN, INPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PWM_PIN, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Digital Sensor");
lcd.setCursor(0, 1);
lcd.print("Number:");
delay(2500);
for (int i = 0; i < 5; i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mode Button");
lcd.setCursor(0, 1);
lcd.print("A001 - Push SW1!");
delay(500);
lcd.clear();
delay(500);
}
}
void loop() {
if (digitalRead(SW1) == LOW) {
delay(50);
if (digitalRead(SW1) == LOW) {
mode = (mode == 1) ? 2 : 1;
delay(500);
}
}
if (mode == 1) {
clockMode();
} else {
sensorMode();
}
}
// ** CLOCK MODE **
void clockMode() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Clock Mode");
lcd.setCursor(0, 1);
lcd.print("Push Select!");
delay(1000);
while (mode == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("[Digital Clock]");
lcd.setCursor(0, 1);
lcd.print((hours < 12 ? "AM " : "PM "));
lcd.print(hours);
lcd.print(":");
lcd.print(minutes);
lcd.print(":");
lcd.print(seconds);
delay(10);
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
}
if (minutes >= 60) {
minutes = 0;
hours++;
}
if (hours >= 24) {
hours = 0;
}
if (digitalRead(SW1) == LOW) {
delay(50);
if (digitalRead(SW1) == LOW) {
mode = 2;
delay(500);
return;
}
}
}
}
// ** SENSOR MODE **
void sensorMode() {
while (mode == 2) {
cdsValue = analogRead(CDS_PIN);
tempValue = (analogRead(TEMP_PIN) * 5.0 / 1024.0) * 100;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("[Sensor Mode]");
lcd.setCursor(0, 1);
lcd.print("CDS:");
lcd.print(cdsValue);
lcd.print(" T:");
lcd.print(tempValue);
delay(1000);
if (digitalRead(SW3) == LOW) {
EEPROM.put(0, cdsValue);
EEPROM.put(4, tempValue);
EEPROM.put(8, hours);
EEPROM.put(12, minutes);
EEPROM.put(16, seconds);
}
if (distance() < 15) {
mode = 1;
return;
}
}
}
// 초음파 센서 거리 측정
float distance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
return pulseIn(ECHO_PIN, HIGH) * 0.034 / 2;
}
🎯 결론
이제 LCD 화면 구성, Mode 변경, 센서 데이터 표시, EEPROM 저장 및 초음파 초기화 기능을 모두 포함한 코드가 완성되었습니다! ✔ 시계 모드와 센서 모드 전환 기능 ✔ 센서 데이터 (CDS, 온도) 표시 및 EEPROM 저장 ✔ 초음파 센서를 활용한 초기화
이 코드를 실행해보고 추가 기능을 원하면 언제든지 알려주세요! 🚀😊 즐거운 코딩 되세요! 🎮✨
728x90
반응형