아두이노 나노로 만드는 DIY 미니 오실로스코프 – 단계별 튜토리얼
부품 및 소모품
| 부품 | 수량 |
| Arduino Nano R3 | 1 |
| 0.96" OLED 64×128 디스플레이 (SSD1306) | 1 |
| 택타일 스위치 (상단 작동) | 9 |
| 1N4148 고속 스위칭 다이오드 | 4 |
추가 필요 부품: 104 커패시터, 저항(100Ω, 12kΩ, 120kΩ, 510kΩ)
앱 및 온라인 서비스
프로젝트 개요
집에서 직접 미니 오실로스코프를 만드는 튜토리얼입니다. 제3자 소스 코드를 기반으로 제작했으며, 전체 튜토리얼과 소스 코드는 참고 링크에서 확인 가능합니다.
오실로스코프란?
전기 신호의 전압 변화를 시간 축에 따라 그래프로 표시하는 전자 계측기입니다. Y축은 전압, X축은 시간으로, 파형의 진폭, 주파수, 상승 시간, 왜곡 등을 분석할 수 있습니다. 최신 디지털 오실로스코프(DSO)는 이러한 값을 자동 계산해 표시합니다.
회로도
주의: 회로도와 정확히 동일하게 배선하세요.
참고: radiopench 블로그, 위키피디아
소스 코드
아두이노 IDE에 업로드할 C/C++ 코드입니다. 주요 기능:
- SSD1306 OLED 디스플레이 제어 (Adafruit 라이브러리 사용)
- 아날로그 입력(핀 A0) 파형 샘플링 (200개 버퍼)
- 수직/수평 스케일, 트리거, 홀드, 자동 범위 설정 등 오실로스코프 기능 구현
- 버튼 9개로 메뉴 조작 (인터럽트 핀 2번 사용)
- EEPROM에 설정 저장/불러오기
/* 주요 상수 */
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define REC_LENGTH 200
/* 전압 범위: Auto 50V, Auto 5V, 50V, 20V, 10V, 5V, 2V, 1V, 0.5V, 0.2V */
/* 시간 범위: 50ms, 20ms, 10ms, 5ms, 2ms, 1ms, 500µs, 200µs */
void setup() {
// 핀 모드, 디스플레이 초기화, EEPROM 로드, ADC 레퍼런스 설정, 인터럽트 연결
}
void loop() {
setConditions(); // 범위 설정
readWave(); // 파형 샘플링 (hRange에 따라 샘플링 주기 조절)
dataAnalize(); // 최소/최대/평균 계산, 트리거 포인트 탐색
writeCommonImage(); // 그리드, 눈금 표시
plotData(); // 파형 그리기
dispInf(); // 정보 표시 (전압, 시간, 트리거 상태 등)
display.display();
saveEEPROM(); // 설정 변경 시 저장
while (hold) { dispHold(); delay(10); } // 홀드 모드
}
코드는 ADCSRA 레지스터 조작으로 ADC 프리스케일러를 변경해 샘플링 속도를 제어하며, delayMicroseconds()와 asm("nop")로 정밀 타이밍을 맞춥니다. 트리거는 상승/하강 에지 선택 가능하며, 언싱크 시 중앙에 표시합니다.
회로도 파일