2021년도 한양대학교 학술소모임 바라미에서 진행한 아두이노 세미나의 세부 내용과 강의 자료
강의 계획
- 모든 아두이노 API와 가능한 많은 칩셋 주변 장치 사용해보기
- 라이브러리는 아두이노 표준 API를 제외하고는 최대한 지양하고 직접 구현 (예: 특정 센서 통신 시 라이브러리를 가져다 쓰기보다는 직접 통신 로직 구현)
- C++은 최대한 배제하고 C 위주 코드로 진행 (학습 난이도 최대한 낮추기)
- 바라미 작품과 연계되기 쉽게 아두이노와 PC와 통신(python 프로그램과 시리얼 통신) 또는 인터넷 경유 통신(REST API 또는 MQTT)까지 포함
- 더욱 깊은 임베디드 응용과 운영체제, 컴퓨터구조 연계를 위한 FreeRTOS 포함
- 가능한 경우 스터디에서 팀 구성하여 작품 제작
- ARM 아키텍처 기반 보드 (Arduino Due) 사용 (RTOS 사용 및 추세 고려)
- 필요한 센서와 모듈, 보드등은 BOM을 공유하여 각자 구매 또는 공동 구매 병행 (3 ~ 5만원대 목표)
- 1차시에 90~120분, 주로 저녁 시간대에 진행
- 방역지침 준수하여 가능한 현장에서 진행하고, 동시에서 녹화해서 영상으로도 제공
강의자
- 김정현(kimdictor@gmail.com) : 한양대학교 전기공학전공 17학번, 바라미 25기, 18년도 회장
- 박제윤(jeyunp@hanyang.ac.kr) : 한양대학교 융합전자공학부 19학번, 바라미 27기, 20년도 회장
강의 자료
- 0차시. 세미나 소개
- 1차시. 스터디 오리엔테이션과 아두이노 소개
- 2차시. 디지털 IO와 시간 제어 함수
- 2차시. (보충 자료) tone함수와 시간 제어 함수
- 3차시. 시리얼 통신
- 4차시. 아날로그 IO
- 5차시. C언어 문법과 편의함수, 키보드와 마우스 라이브러리
- 6차시. 인터럽트와 타이머
- 7차시. SPI와 I2C 통신
- 8차시. RTOS
- 실습 1차시. 이론 2~3차시
- 실습 2차시. 이론 4차시
강의 동영상
강의 내용
각각의 차시가 다루고 있는 내용들을 질문으로 표현해보았습니다. 질문에 답할 수 있다면 해당 차시는 듣지 않으셔도 됩니다.
1차시
- 우리가 아두이노를 위해 작성한 코드는 어떤 과정을 거쳐 컴파일, 빌드, 링크되어 최종적으로 아두이노에서 실행될까요?
- 아두이노 API의 구조?
- 하드웨어와 HAL, OS, 애플리케이션의 계층 구조?
- Due 보드의 상세 스펙?
- SAM3X8E 칩셋의 주변장치와 구조?
- Cortex-M3 코어와 ARM 명령어의 간단한 구조?
- CPU 구조? (레지스터와 ALU, 메모리, PC는 무엇인가요?)
2차시
- 아두이노 API에서 디지털 IO를 담당하는 6가지 함수들은 무엇인가요?
- 시프트 레지스터는 무엇인가요?
- delay 함수는 어떤 방식으로 구현되나요?
- millis 함수로 delay 함수를 대체할 수 있나요? 가능하다면 어떤 방식으로 구현할까요? (시스템 틱은 무엇인가요?)
- 지연을 구현하는 또 다른 방법이 있을까요?
3차시
- 병렬 통신과 직렬 통신의 차이는 무엇인가요?
- UART는 무엇인가요?
- SAM3X8E의 UART 장치 규격은 어떻게 되나요?
- 아두이노 Serial API에 대해 설명할 수 있나요? 다음을 설명해보세요 : Serial 객체의 참 여부 / available, availableForWrite, begin, print, println, write, serialEvent, read, flush, find, findUntile, peek, readBytes, readBytesUntil, readString, readStringUntil, parseInt, parseFloat, setTimeout 함수
- 아스키 코드는 무엇인가요?
4차시
- 아날로그 신호와 디지털 신호의 차이는 무엇인가요?
- 펄스 변조는 무엇인가요? PWM은 무엇인가요?
- ADC와 DAC에 대해 설명해보세요. 각각의 장치는 어떤 원리로 구현되나요?
- 아날로그 신호가 디지털 신호로 변환되는 과정은 무엇인가요?
- 아두이노의 아날로그 IO API를 설명해보세요 : analogWrite, analogRead, analogWrite 함수
5차시
- C언어의 변수형은 어떤것이 있나요?
- C언어의 const, extern, static, volatile 한정자는 무엇인가요?
- C언어의 문자열 조작 함수는 어떤 것이 있나요?
- C언어의 수학/난수 함수는 어떤 것이 있나요?
- 아두이노의 키보드, 마우스 API는 어떤 일들을 수행하나요? API를 구성하는 함수는 어떤 것이 있나요?
6차시
- 인터럽트는 무엇인가요? 폴링과 차이는 무엇인가요?
- ARM에서, 예외와 벡터 테이블은 무엇인가요?
- SAM3X8E의 인터럽트 원천에는 무엇이 있나요?
- NVIC는 무엇인가요?
- 인터럽트를 처리하는 API에는 무엇이 있나요?
- 아두이노 인터럽트 API에 대해 설명해보세요.
- 인터럽트 서비스 루틴 (ISR)은 무엇인가요?
- ISR을 구현할 때 어떤 점을 주의해야 할까요?
- 타이머는 무엇인가요?
- SAM3X8E의 타이머 카운터(TC)에 대해 설명해보세요.
- 아두이노에서 Timer를 처리하기 위한 API는 무엇이 있나요? DueTimer 라이브러리는 무엇인가요?
7차시
- I2C와 SPI 통신은 무엇인가요? 서로의 차이점은 무엇인가요?
- 각각의 통신은 어떤 방식으로 장치를 제어할까요?
- SAM3X8E의 I2C, SPI 장치의 규격은 어떻게 되나요?
- 아두이노의 I2C, SPI API를 설명해보세요.
8차시
- 임베디드 소프트웨어 구조에 대해 설명해보세요 : 라운드-로빈, 인터럽트 라운드-로빈, 함수 큐 스케줄링, RTOS
- RTOS는 무엇인가요? GPOS와의 차이점은 무엇인가요?
- POSIX는 무엇인가요? 윈도우OS는 실시간성을 얻을 수 있나요?
- 스케줄링은 무엇인가요? 스케줄링 방식에는 어떤 종류가 있나요?
- FreeRTOS와 구성요소에 대해 설명해보세요.
- 틱(Tick), 태스크(Task), 세마포어, 큐는 무엇이고 왜 사용할까요?
- 프로그램의 메모리 세그먼트 구조는 무엇인가요?
- 동적, 정적 할당은 무엇이고 어떤 차이가 있나요? 임베디드에서 동적 할당을 사용해도 되나요?
- 커널 패닉은 무엇이고 왜 발생할까요?
- 경쟁 상태와 교착 상태는 무엇인가요?