소프트웨어와 생활웹 교과서
이 페이지의 목차
2단원 · 4차시

피지컬 컴퓨팅 시스템 구성하기

회로 연결조건문반복

학습 목표

  • 선택한 부품으로 피지컬 컴퓨팅 시스템을 구성하고 프로그램을 작성할 수 있다.

관련 성취기준

  • [12소생02-02]

    소프트웨어를 통해 아이디어를 표현하는 데 필요한 센서와 액추에이터를 선택하여 피지컬 컴퓨팅 시스템을 구성한다.

생각 열기 — 「어두우면」은 몇부터일까

스마트 가로등은 「어두우면 켠다」. 그런데 소프트웨어는 「어둡다」는 말을 모른다. 숫자만 안다.

규칙의 세 부품 — 조건, 기준, 되풀이

문턱값(threshold) — 센서 값이 그보다 크냐 작으냐로 판단을 가르는 기준값. 「빛이 300보다 작으면 어둡다」의 300은 센서 값으로 판단을 가르는 기준이다. 사람의 말(「어두우면」)을 소프트웨어의 말(「빛 < 300」)로 옮기는 자리가 바로 여기다.

  • 조건

    만약 ~이면, 아니면

    센서 값을 문턱값과 견주어 둘 가운데 하나를 한다. 「아니면」 쪽을 꼭 적어야 출력이 제자리로 돌아온다.

  • 기준

    문턱값

    실제 장소에서 센서 값을 재어 보고 정한다. 책상 위와 창가의 빛 값은 다르다.

  • 되풀이

    쉬지 않고 다시

    보드는 규칙을 한 번 실행하고 끝나지 않는다. 1초에 몇 번씩 처음부터 다시 실행하며 세상의 변화를 따라간다.

가상 보드의 진짜 보드에 올릴 코드 보기를 열면 이 세 부품이 코드에서 어디에 있는지 보인다. 마이크로비트로 만든 스마트 가로등의 코드는 이런 모양이다.

while True:                                   # 되풀이 — 끝없이 다시
    if display.read_light_level() < 60:       # 조건 + 문턱값(60)
        for i in range(8):
            np[i] = (255, 255, 255)           # 그러면 — 흰색으로 켜기
        np.show()
    else:                                     # 아니면 — 끄기
        for i in range(8):
            np[i] = (0, 0, 0)
        np.show()
    sleep(100)                                # 0.1초 쉬고 다시

아두이노에서는 while True: 대신 void loop() { … } 가 되풀이를 맡는다. 말은 달라도 뼈대는 같다.

미션 1 — 스마트 가로등

이 미션은 두 보드 모두로 풀 수 있다. 하나로 성공했다면 보드를 바꿔 다시 해 보자. 같은 규칙이 그대로 통과할까?

가상 보드

미션 — 스마트 가로등

어두워지면 네오픽셀이 흰색으로 켜지고, 밝아지면 꺼지게 하자. 마이크로비트와 아두이노 어느 쪽으로도 풀 수 있다.

    보드와 출력
    센서 — 값을 바꿔 보자
    규칙 — 위에서부터 차례로, 쉬지 않고 되풀이한다
      진짜 보드에 올릴 코드 보기 —

      미션 2 — 주차 차단기

      가상 보드

      미션 — 주차 차단기

      차가 20cm 보다 가까이 오면 차단기(서보)가 90도로 열리고, 멀어지면 0도로 닫히게 하자.

        보드와 출력
        센서 — 값을 바꿔 보자
        규칙 — 위에서부터 차례로, 쉬지 않고 되풀이한다
          진짜 보드에 올릴 코드 보기 —

          미션 3 — 더위 경보

          조건 하나로 출력 두 가지(소리와 색)를 바꿔야 한다. 규칙 하나에는 동작을 하나만 넣을 수 있으니, 같은 조건의 규칙을 두 개 만들어 보자.

          가상 보드

          미션 — 더위 경보

          온도가 30℃ 를 넘으면 「라」 소리로 경보를 울리고 네오픽셀을 빨강으로, 그렇지 않으면 소리를 끄고 초록으로 두자.

            보드와 출력
            센서 — 값을 바꿔 보자
            규칙 — 위에서부터 차례로, 쉬지 않고 되풀이한다
              진짜 보드에 올릴 코드 보기 —

              생각대로 안 움직일 때

              자주 만나는 증상과 원인
              증상흔한 원인고치는 법
              한 번 켜지면 꺼지지 않는다「아니면」을 비워 두었다아니면 쪽에 끄는 동작을 넣는다
              밝을 때 켜지고 어두울 때 꺼진다부등호가 거꾸로다「보다 작으면」과 「보다 크면」을 바꾼다
              아무리 어두워도 켜지지 않는다문턱값이 센서 범위에 맞지 않는다센서 값을 직접 재어 보고 문턱값을 다시 정한다
              두 규칙이 서로 싸운다같은 출력을 두 규칙이 서로 다르게 바꾼다아래 규칙이 이긴다 — 차례를 바꾸거나 조건을 겹치지 않게 한다
              문턱값 근처에서 깜빡거린다센서 값이 문턱값 근처에서 오르내린다켜는 기준과 끄는 기준을 조금 다르게 둔다(예: 250보다 작으면 켜고 350보다 크면 끈다)

              마지막 줄은 실제 가로등과 에어컨이 모두 쓰는 방법이다. 켜는 기준과 끄는 기준 사이에 «틈»을 두면 문턱값 근처에서 불이 깜빡거리지 않는다.

              시뮬레이터

              깜빡임을 만들고 고쳐 보기

              약 10분

              미션 1의 가상 보드에서 빛 슬라이더를 문턱값 바로 근처에서 천천히 앞뒤로 움직여 보자. 불이 켜졌다 꺼졌다 하는가? 그다음 규칙 두 개로 바꿔 보자 — 「빛이 낮은 값보다 작으면 켜기」, 「빛이 높은 값보다 크면 끄기」(둘 다 「아니면」은 비운다). 이제 그 틈 안에서는 무엇이 일어나는가?

              확인 문제

              개념 확인 문제

              보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.

              스마트 가로등에서 「빛 < 300」의 300과 같은 기준값을 무엇이라 하는가?12소생02-02

              마이크로비트에서 「빛 < 60」으로 잘 되던 규칙을 아두이노로 그대로 옮겼더니 웬만큼 어두워서는 켜지지 않는다. 까닭은?12소생02-02

              아두이노 코드에서 「끝없이 되풀이」를 맡는 부분은?12소생02-02

              문턱값 근처에서 불이 계속 깜빡거리는 것을 막는 방법으로 가장 알맞은 것은?12소생02-02

              교과서에서 찾기

              교과서해당 위치쪽수
              교학사Ⅱ-1 피지컬 컴퓨팅 › 피지컬 컴퓨팅 시스템의 구현40쪽
              길벗Ⅱ-02 나의 아이디어가 작품이 된다 › 피지컬 컴퓨팅 시스템 구성50쪽
              삼양미디어Ⅱ-02 피지컬 컴퓨팅 시스템 구성45쪽
              씨마스Ⅱ-1 개념 학습 › 미디어 아트와 피지컬 컴퓨팅48쪽
              천재교과서Ⅱ-1 피지컬 컴퓨팅 시스템 › 피지컬 컴퓨팅 시스템의 구성57쪽