+ 한국항공대학교 최차봉 교수님의 임베디드 SW 과목 내용을 정리한 글입니다.
Embedded System 개발 프로세스
1. 시스템 요구 정의
- 사용자 관점에서 생각하며 시스템 개발에서 요구되는 것들을 정의한다.
ex) User Interface, Scenario, QCD(Quality, Cost, Delivery) 등
2. 시스템 아키텍처 설계 - 구조 설계
- HW와 SW의 역할과 기능을 분담하고, 구성과 동작을 구체화하며 기능간 연동과 제한사항을 기술한다.
3. 소프트웨어 개발 - 상세 설계
- HLD(High Level Description, 크게 설계) => LLD(Low Level Description, 보고 바로 구현할 수 있을 정도의 설계) => 구현
ex) Unit Test(단위 테스트), Integration Test(결합 테스트), Debugging
4. 품질 검사, 출시
Embedded System 종류
1. OS가 있는 시스템
ex) Raspberry Pi: Linux OS
2. OS가 없는 시스템
ex) Arduino: Libraries instead of OS
Arduino Simulator 예제 1번: LED 회로
LED + 저항 (220옴) + 3V 배터리 + 스위치 + 멀티 미터
+ 스위치의 튀어나온 부분이 가까우면 떨어져 있고, 멀면 붙어있다.
+ 멀티 미터는 연결된 지점의 특정 값을 화면에 나타낸다.
Arduino Simulator 예제 2번: LED Blinking
아두이노 + 저항(220옴) + LED + 프로그램
전원: 양극을 나타내는 +, 일반적으로 전기는 양극에서 출발한다.
접지(GND, Ground): 음극을 나타내는 -, 회로의 모든 경로가 전원에서 시작하는 것처럼, 모든 경로의 끝은 접지이다.
int n;
void setup()
{
pinMode(12, OUTPUT); // 12번 포트를 OUTPUT으로 사용
Serial.begin(9600);// 시리얼 모니터에 9600 속도로 통신
}
void loop()
{
digitalWrite(12, HIGH); // HIGH: 1, LOW: 0
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(12, LOW);
delay(1000); // Wait for 1000 millisecond(s)
n++;
Serial.println(n); // n을 시리얼 모니터에 출력
}
setup : 전원을 켤 때 한 번만 실행되는 함수
loop : setup 함수가 종료되면 무한 반복 실행되는 함수
pinMode(a, OUTPUT / INPUT) : a번 포트를 OUTPUT 또는 INPUT으로 사용
Serial.begin(a) : 시리얼 모니터에 a 속도로 통신
digitalWrite(a, HIGH / LOW) : a번 포트에 HIGH(전류가 흐르는 상태. 1) 또는 LOW(전류가 흐르지 않는 상태. 0) 입력
delay(a) : a 밀리 초동안 정지
Serial.println(a) : 시리얼 모니터에 a 출력 (줄바꿈)
- Serial Monitor: 코드 실행 진행 상황을 관찰하는 모니터 (터미널)
Arduino Simulator 예제 3번: LED (+ 스위치)
아두이노 + 스위치 + 저항 2개 + LED
=> 스위치를 한 번 누르면 켜지고, 다시 한 번 누르면 꺼진다. (togle)
but, 스위치를 한 번 누른다고 해서 한 번만 접촉하는 것이 아니라 여러번 접촉하는 현상(글리치)이 있어 마음처럼 되지 않는다. (시리얼 모니터을 확인하면 알 수 있다.)
+ 스위치를 누르지 않으면 GND에서 LOW(0)가 저항을 거쳐서 들어온다.
int sw; // 스위치를 누르면 1, 누르지않으면 0
int flag = 0; // LED의 상태 (켜져 있으면 1, 꺼져 있으면 0)
void setup()
{
pinMode(8, OUTPUT);
pinMode(7, INPUT);
Serial.begin(9600);
}
void loop()
{
sw = digitalRead(7); // 7번 포트의 전압 저장 (스위치의 전압)
if (sw == HIGH) { // 7번 포트에 전압이 들어왔다면
flag = flag ? 0 : 1; // flag가 1이라면 0, 0이라면 1 반환
Serial.print("flag = ");
Serial.println(flag);
}
digitalWrite(8, flag); // 8번 포트에 1 or 0 을 전달
}
Arduino Simulator 예제 4번: 조도 센서 회로
아두이노 + 저항 (10KΩ, 700Ω, 1KΩ) + Cds(포토 레지스터)
+ Cds (포토 레지스터): 빛이 세게 들어오면 저항이 약해지고 약하게 들어오면 저항이 약해진다.
+ 아날로그를 디지털로 바꾸기 위해 A0포트를 이용한다.
int val;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(A0); // A0포트에 들어오는 전압 세기
Serial.println(map(val, 4, 448, 1, 10));
// 4부터 448 사이의 val값을 1 ~10 값으로 변환해서 출력 (1KΩ)
/*
Serial.println(map(val, 3, 392, 1, 10));
// 3~ 392 사이의 val값을 1 ~10 값으로 변환해서 출력 (700Ω)
Serial.println(map(val, 36, 643, 1, 10));
// 36~ 643 사이의 val값을 1 ~10 값으로 변환해서 출력 (10KΩ)
*/
}
Arduino Simulator 예제 5번: Tone 발생기
피에조(소리를 생성하는 전자 부품) + 아두이노
+ '~'가 앞에 붙은 포트: 아날로그 출력이 가능한 포트
int note[] = {262, 294, 330, 349, 392, 440, 494, 523};
// {도, 레, 미, 파, 솔, 라, 시, 도}
void setup()
{
tone(9, note[2], 750);
// note[2] 주파수를 9번 포트에 750 millisecond 동안 울려라
delay(750);
// delay가 없으면 다같이 울려버림
tone(9, note[1], 250);
delay(250);
tone(9, note[0], 750);
delay(750);
tone(9, note[1], 250);
delay(250);
tone(9, note[2], 1000);
delay(1000);
tone(9, note[7], 2000);
delay(1000);
tone(9, note[2], 2000);
delay(2000);
tone(9, note[2], 250);
delay(250);
tone(9, note[0], 750);
delay(750);
}
void loop()
{
}
'Computer Science > Embedded Software' 카테고리의 다른 글
[Embedded Software] Interrupt (0) | 2023.09.26 |
---|---|
[Embedded Software] Embedded System 개발 실습 (0) | 2023.09.21 |
[Embedded Software] Shell Script 실습 (0) | 2023.09.15 |
[Embedded Software] Shell Script (0) | 2023.09.13 |
[Embedded Software] Linux Commands 실습 (3) | 2023.09.08 |