티스토리 뷰

수업일지

3월 20일 수업(day 3)

오직 2017. 3. 22. 11:02

아두이노 는 간단히 마이크로 컨트롤러가 장착되어있는 보드이다.

마이크로 컨트롤러는 집적 회로위에 올려진 작은 컴퓨터/단일체 컴퓨터이다


마이크로 컨트롤러는 마이크로프로세서(CPU)와 약간의 차이가 있는데,

낮은 성능을 통해 낮은 가격

낮은 메모리

낮은 클럭스피트

인풋/아웃풋 포함

Timer, counter, interrupter, serial port

작은 사이즈 낮은 무게

OS에 의해 컨트롤 되지 않음

등이 있다고 한다.

이는 마이크로 컨트롤러의 특수한 목적을 위해 기기의 스펙을 다소 포기하고 목적에 맞는 기능들을 추가했다고 볼 수 있겠다.



오늘 비로소 아두이노의 코딩을 처음 배울 수 있었다.

현재 정보문화학과의 정보구조라는 과목에서 JAVA를 배우고 있는데,

많은 부분에서 아두이노는 JAVA와 유사한 면을 갖고있다.

아무래도 아두이노는 프로세싱을 모태로 하고 있고 프로세싱은 JAVA를 모태로 하고 있기 때문에 아두이노와 JAVA가 큰 맥락에서는 같은 뿌리를 갖고 있다.


하지만 아두이노만 갖고 있는 독특한 문법이 있는데,

JAVA에서는 기본적으로 main함수가 프로그램 실행의 중심이 되는데,

아두이노는 setup과 loop함수가 그 중심이 된다.


void setup() {}

는 프로그램이 시작할 때 1회만 실행되는 함수로 주로 아두이노의 초기 상태를 설정하는데 사용하는 듯하다.


void loop() {}

는 전원이 차단될 때 까지 반복해서 실행되는 함수로 아두이노의 작동을 구현하는데 사용하는 것 같다.



아두이노는 아두이노 기판을 움직이는 데 사용되는 언어이기 때문에

기판의 동작과 관련되어 있는 문법 요소역시 언어에 포함되어있다.


pinMode(pin, mode)

핀에 전류가 들어오는지 나가는지를 설정할 수 있는 함수이다.

pin은 기판의 숫자를,

mode에는 INPUT, OUTPUT, INPUT_PULLUP을 넣는다.

이유는 잘 모르겠지만 13번은 input 말고 output으로만 써야한다고 한다.


digitalRead(pin)

해당 pin에 들어오는 전류의 HIGH LOW 판단하는 함수이다.


digitalWrite(pin, value)

해당 pin이 output으로 설정되었을 때 value를 HIGH LOW로 설정하여 키고 끌 수 있다.



input 상태인 핀이 floating 상태라고 한다. 이 핀을 스위치랑 연결시킬 경우 스위치가 열려있는 동안 회로도 열려있기 때문에 핀에 의미 없는 값이 들어오게 된다.

이를 방지해주기 위해 저항을 통해 다른 회로와 연결시킴으로서 안정적인 값을 받게 된다.

Pull-up impedance

플로팅 상태의 핀을 안정적으로 HIGH상태로 유지시켜주기 위해 저항과 5v에 연결시켜줌

Pull-down impedance

플로팅 상태의 핀을 안정적으로 LOW상태로 유지시켜주기위해 저항과 GRD에 연결시켜줌



실습



저번 시간에 만들었던 회로의 스키매틱을 노트2의 펜으로 그려 보았다.

회로도를 그려보니 기판을 보는 것 보다 동작의 순서가 더 직관적으로 보인다.

노트2는 아직 현역이다. 노트 8이 팡팡 터졌기 때문이다. 언제쯤 다음 노트가 멀쩡히 나올지 모르겠다.

근데 5년 째 액정파손 외에 고장한번 안난거보면 불안하게 새 노트를 사는 것 보다 계속 쓰는게 좋을지도 모르겠다.



오늘 수업에 코딩을 처음으로 배웠기에 저번에 실습했었던 푸쉬버튼회로를 동작하게 하는 코드를 작성해 보았다.

#define으로 후술될 buttonPin을 숫자 3으로 교체할 수 있도록 전처리를 해주고

ledPin을 인티저 상수로 선언하여 13이라는 수치로 고정되게 해주었다.

이 경우 디파인과 인티저 상수 선언은 동일한 역할을 하고 있다고 한다.

buttonState는 뒤 loop에서 3번핀의 입력을 받는 변수로 사용할 수 있게 선언해주었다.


setup에서 ledPin(13)은 OUTPUT으로,

buttonPin(3)은 INPUT으로 설정해준다.


loop에서는 buttonPin의 상태가 HIGH면 ledPin에서 HIGH를 출력하도록 (불이 켜지도록),

buttonPin의 상태가 HIGH가 아니면(LOW이면) lepPin에서 LOW를 출력하도록 (불이 꺼지도록)

설정해주었다


위의 스키매틱과 작성한 코드를 비교해 보면 알 수 있듯

저번 예제와 다르게 buttonPin을 3으로 설정해주었기 때문에 기판에서 역시 핀을 수정해준다

buttonPin에 HIGH가 입력되도록 버튼을 눌러주니 마찬가지로 LED에 불이 들어온다.

코드가 성공적으로 작동함을 확인할 수 있었다.


오늘 새롭게 사용한 부품은 가변저항이다.

중앙의 원통형 나사를 돌려주면 돌리는 방향에 따라 저항의 균형이 바뀐다.



int sensorPin = A0;    // select the input pin for the potentiometer

int ledPin = 13;      // select the pin for the LED

int sensorValue = 0;  // variable to store the value coming from the sensor


void setup() {

  // declare the ledPin as an OUTPUT:

  pinMode(ledPin, OUTPUT);

}


void loop() {

  // read the value from the sensor:

  sensorValue = analogRead(sensorPin);

  // turn the ledPin on

  digitalWrite(ledPin, HIGH);

  // stop the program for <sensorValue> milliseconds:

  delay(sensorValue);

  // turn the ledPin off:

  digitalWrite(ledPin, LOW);

  // stop the program for for <sensorValue> milliseconds:

  delay(sensorValue);

}


만들어진 회로에 위의 코드를 얹어주었다.

해당 코드에서 새롭게 사용된 analogRead 함수는

전류의 신호를 HIGH LOW 두 가지로 읽는 digitalRead와 달리 2^10 단계로 신호를 받아들인다.

즉 가변저항으로 전류의 값이 바뀌면 analogRead이 판단하는 값이 달라지는 것이다.

이 값만큼 불의 꺼진 상태와 켜진 상태 사이에 delay를 걸어주면

불이 깜빡이는 속도를 조절할 수 있다.



가변저항을 돌림에 따라 LED의 점멸 속도가 바뀌는 것을 확인할 수 있었다.


오늘 수업은 여기까지

'수업일지' 카테고리의 다른 글

4월 17일 수업(day7)  (0) 2017.04.19
4월 3일 수업(day5)  (0) 2017.04.05
3월 27일 수업(day4)  (0) 2017.03.29
3월 13일 수업(day 2)  (0) 2017.03.13
3월 6일 수업(day 1)  (0) 2017.03.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함