
<aside>
<aside>
정보를 파헤치다
호기심이 생기는 대상에 대해 집요하게 파고듭니다.
</aside>
<aside>
사용자 우선주의
항상 사용자의 입장에서 필요한 서비스를 고민하고 제시합니다
</aside>
</aside>
<aside>
Careers
2025 교내 전공동아리 [Haro] CTO
</aside>
<aside>
Informations
📱010-9897-6040
Gmail [email protected]
https://www.linkedin.com/in/juyoung-lee-232a4a367/
</aside>
<aside>
Index
Haro
</aside>
<aside>
Stacks
C++, C#, Python
Arduino, ESP32, STM32
Fusion360, EasyEDA, OrCAD
XG5000, Linux, Docker
</aside>
<aside>
Activities
2025 U-BDIA AI-SW 페스티벌 부스 운영 (Haro)
2025 가상융합서비스 개발자 경진대회 학생부문 최우수상 (Haro)
제 46회 전국학생발명품경진대회 장려상 (센서링 텀블러)
제 46회 부산학생과학발명품경진대회 금상 (센서링 텀블러)
</aside>
“건설 현장 안전 강화 및 펌프카 사고 예방 솔루션”
<aside>
<aside>
EPIC은 디지털 트윈 기반의 펌프카 가상 훈련 및 AR/VR 연동 제어 시스템으로, AI 기반 위험 감지와 자체 제작 컨트롤러를 통해 실제 장비의 안전한 원격 제어와 현장 사고 예방을 목표로 합니다. 저는 이 프로젝트에서 가상 환경과 물리 환경 간의 MQTT 통신을 구축하고, 하드웨어 시스템 전반의 설계를 진행하였습니다.
</aside>
<aside>
기술 스택: PCB 디자인 (EasyEDA), MCU (ESP32), 펌웨어 (C++, MQTT), 모델링 (Fusion360)
담당 역할: 기술 팀장 / 하드웨어 시스템 개발 총괄
</aside>
<aside>
펌프카 컨트롤러 개발을 통해 해당 파트의 핵심 로직을 구현하였습니다.
int btn1 = digitalRead(BTN1) == LOW ? 1 : 0; //일반 버튼
int controlx = analogRead(JOY1X); //조이스틱
조이스틱은 내부 가변저항값을 ADC로 읽는 구조라 물리적 진동이나 접촉 불량으로 인한 노이즈가 필연적으로 발생합니다. 특히, 제가 개발에 활용한 모듈은 그 정도가 심하였습니다. 따라서, 오작동 시 안전 사고를 유발할 수 있는 장비의 특성을 고려해 범위를 1000~3000으로 설정하여 오입력 가능성을 낮추었습니다.
if(controlx > 3000){
a=1; //정방향
}else if(controlx < 1000){
a=2; //역방향
}else{
a=0; //정지
}
데드존 설정을 통해, 입력을 세 가지 상태(정지/정방향/역방향)로 분류했습니다.
int btn1 = digitalRead(BTN1) == LOW ? 1 : 0; //토글 버튼
int btn2 = digitalRead(BTN2) == LOW ? 1 : 0;
int btn3 = digitalRead(BTN3) == LOW ? 1 : 0;
int btn5 = digitalRead(BTN5) == LOW ? 0 : 1;
int btn6 = digitalRead(BTN6) == LOW ? 0 : 1;
int controlx = analogRead(JOY1X); //조이스틱 X축
int controly = analogRead(JOY1Y); //조이스틱 Y축
int controlx2 = analogRead(JOY2X);
int controly2 = analogRead(JOY2Y);
int controlx3 = analogRead(JOY3X);
int controly3 = analogRead(JOY3Y);
String data = String(b) + String(a) + String(b2) + String(a2) + String(b3) + String(a3) + String(btn1) + String(btn2) + String(btn3) + String(btn5) + String(btn6);
//String != char*
Serial.print("Publish message: ");
Serial.println(data);
각 축의 데이터를 개별 토픽으로 전송할 때 발생하는 시간차를 막기 위해, 6축 조이스틱과 5개 버튼의 상태를 11자리 문자열로 직렬화해 하나의 패킷으로 동기화하여 전송하였습니다.
</aside>
<aside>
AR/VR 파트 조작을 위한 컨트롤러 PCB, 3축 펌프카 구동을 위한 펌프카 PCB를 제작하였습니다.

컨트롤러 PCB

펌프카 PCB
</aside>
<aside>
<aside>
</aside>
<aside>
</aside>
<aside>
</aside>
<aside>
</aside>
</aside>
<aside>
</aside>
<aside>
</aside>
<aside>
</aside>
<aside>
</aside>
</aside>
<aside>
</aside>