청소년 IT 메이커 교육 특별편 (퀴즈 풀이) ※ 잠깐! 퀴즈 안 푼 사람 출입 금지!!!! ※

 

청소년 IT 메이커 교육 특별편

한성대

작성자: 이상훈


다들 퀴즈를 풀고 오셨나요? 
풀지 않았다면 이번 편은 의미가 없습니다.
꼭 퀴즈를 풀고 와주세요.


퀴즈 해설을 하기 전에...

일단 퀴즈 해설을 하기 전에 꼭 말씀드리고 싶은 점이 있습니다.
사실 많은 분들이 퀴즈를 푸는 것을 꺼려한다는 거 저도 잘 알고 있습니다.
자신의 실력이 들통나는게 무섭거나 아니면 
자기 스스로에게 자신의 실력을 검증하는 것이 부담일지도 모릅니다.
저도 너무나도 많이 겪어봐서 잘 알고 있습니다.
아마 저였어도 시험을 보지 않고 넘어갔을 겁니다.
저도 제 모자란 실력을 스스로에게 들통나는 것이 항상 무섭습니다.

그래서 시험을 보신 분들 중 저희반 학생들과 교사를 제외하고 
나머지 분들은 제가 일일이 답변을 드렸는데요. (우리반은 의무 ㅋㅋ)
정말 진심으로 박수쳐드리고 싶습니다.

아마 시험을 보지 않은 사람 중 
최저점을 받은 다른 학생보다 실력이 좋은 사람이 있을 수 있습니다.
하지만 앞으로의 성장 가능성에 있어서는 
최저점을 받았으나 시험을 치룬 학생이 훨씬 높게 측정될 것입니다.
왜냐하면 저는 그들이 자신의 실력을 측정하기 위해 시험을 봤다는거 자체가
문제를 회피하지 않고 도전해서 이겨내는 정신을 가졌다고 생각하기 때문입니다.

또 교사분들 중에도 보신 분이 있던데, 마찬가지로 배울점이 정말 많다고 생각합니다.
교사라면 더더욱 풀 필요가 없다고 생각하기 쉬우니까요...
진심으로 저보다 훨씬 나은 사람들이라고 생각합니다. 
저도 많이 배우도록 하겠습니다.
(생각보다 많은 사람이 시험을 봐서 저도 제 자신에게 창피해지더라구요...)



자 이젠 퀴즈 해설을 해보겠습니다!


1번


사실 오답률이 가장 낮은 문제입니다.
시리얼 통신을 할 때 setup() 함수에 "반드시" 들어가야 할 코드를 고르는 문제였죠?

정답이 Serial.begin(9600); 인 이유는 
이 코드가 시리얼 통신을 시작하게 해주는 코드이기 때문입니다.
 begin이 우리말로 "시작하다"라는 뜻을 가졌다는 것을 안다면 쉽게 이해할 수 있습니다.



2번


이번 문제도 오답률이 높지 않은 문제입니다.
Serail.print();와 Serail.println();의 차이를 물어보는 문제인데요.

정답은 "줄바꿈"입니다.
ln이라고 추가적으로 적힌 것이 보이죠? 이를 Line이라고 기억한다면
절대 까먹지 않을 것입니다.

시리얼 모니터에 print()를 하면 출력이 되고 
그 다음 출력이 바로 옆에서 또 이루어지지만
println()을 하면 "\n"없이도 자동으로 줄바꿈이 돼서 
다음 출력이 Enter를 누른 듯 아래에 출력되게 됩니다.


3번



이번 문제도 오답률이 높지 않은 문제입니다.
"delay(500);에서 500은 몇 초인가?" 라는 문제인데요.

delay는 우리말로 "지연시키다"로
아두이노 스케치에서는 "앞 코드를 괄호 안의 시간만큼 유지시켜주세요" 정도로 해석됩니다.
또 괄호 안의 시간은 밀리세크(ms)로 1000밀리세크(ms) = 1초(sec)가 됩니다.
따라서 여기서 500은 0.5초가 되는것이죠. 
추가적으로 1 sec = 1000 millisec = 1,000,000 microsec 라는 것을 기억합시다.



4번


이번 문제는 오답률이 제법 높은 문제입니다.
아무래도 서술형이기도 하고 이 코드를 본 적이 있어도 
변수 선언, 정수형, 초기화 등의 용어는 못 들어봤을 수 있습니다.

혹시 자료형에 대해 전혀 알지 못한다면 제 1,2 차시를 참고해주세요.
(아마 2차시 코드 분석에 있을 거임)

변수 선언은 자료형을 먼저 쓰고 뒤에 변수 이름을 쓰면 됩니다.
하지만 이때 초기화를 해달라고 했죠?
초기화를 하지 않으면 쓰레기값이 들어있어 쓰임에 따라 문제가 생길 수도 있습니다.

그렇기 때문에 자료형 변수이름 = 초기화값; 형태로 코드를 쓰게되고
답은 int age = 0;이 됩니다.


 

5번


이번 문제도 오답률이 은근히 있더라구요? 
물론 잘 푸신 분들도 꽤 있습니다.

이번 문제는 아날로그와 디지털, 데이터 입출력을 이해해야 풀 수 있는 문제입니다.
디지털은 이산적인 정보, 아날로그는 연속적인 정보를 의미하고
이를 쉽게 이해하면 핸드폰 시계와 벽걸이 시계를 생각하면 된다고 했죠?

데이터 입출력은 당연히 입력과 출력만 잘 구분하면 되는 것이고요.

터치센서는 디지털 입력 센서
LED는 디지털 혹은 아날로그 출력 센서
초음파 센서는 디지털 입력 센서입니다.
(물론 초음파는 디지털 출력이 이루어지나 입력이 메인임)
마지막으로 정답인 조도 센서는 아날로그 입력 센서입니다.

틀리신 분들 중 대부분이 이 초음파 센서를 선택하셨더라구요.
사실 아주 정확히 얘기하면 초음파 센서도 아날로그 입력 센서에 해당하기도 합니다.
우리가 쓰는 초음파 센서가 디지털 입출력 센서인 것이지 
초정밀 초음파 센서인 경우 아날로그 입출력을 하기 때문입니다.

따라서 자기가 수업 내용만 듣고 문제를 푼 학생은 틀린 것이 맞지만
수업 외 지식이 있는 상태에서 문제를 풀었고
그걸 고려해서 초음파 센서를 선택하였다면 맞았다고 봐도 무방합니다.
(물론 모든 초음파 센서가 아날로그 입출력을 하는 것은 아니기 때문에
진짜 진짜 정확히 얘기하면 틀린 것이 아닐까 싶습니다.
예를 들어 "흑인은 미국인이다"는 일부는 맞겠지만 전체는 아니기 때문에
틀린 명제이니까요.)

문제를 애매하게 내서 죄송합니다....


6번


이 문제는 많이들 맞히셨습니다.
사실 영어를 조금만 하면 쉽게 풀 수 있는 문제였습니다.

색 설정은 setPixelColor();
설정된 색 출력은 show();
그리고 밝기 설정은 정답과 같이 setBrightness();입니다.

만약 이 문제를 틀렸다면 코드 분석보다는 
파파고나 구글 번역기로 영어 뜻을 한번 찾아보길 추천합니다.



7번

이 블로그를 보는 많은 분들이 이 문제 때문에 이번 편에 들어오시지 않았나 싶습니다.
단 한 명도 맞히지 못한 진짜 "킬러 문제"입니다.
못 맞혔다고 좌절할 필요 없습니다. 1명도 맞히지 못했으니까요.

제가 이전에 map()함수에 대해 설명한 적이 있을 겁니다.
기존에 있던 값을 새로 매칭하는 함수입니다.
기존 범위의 하한값과 상한값을 목표 범위의 하한값과 상한값으로 바꾸는 함수죠.
그렇다면 이 map() 함수의 사용을 어떻게 해야할까요?

우선 기존 범위의 하한값과 상한값이 0,1023 일때 
왜 불이 최고밝기로 켜졌다 꺼졌다가 반복됐는지를 알아야 합니다.
제가 이전에 설명 드린적이 있습니다만 LED 빛의 밝기는 8비트 범위인
0~255 (256=2의 8제곱) 사이에서 이루어집니다.
하지만 현재 가변저항의 범위가 0~1023 (1024 = 2의 10제곱) 입니다.
(따라서 1024 / 256 = 4)
그래서 같은 시행이 4번 반복되는 것이죠.

(불 꺼짐) 0 ----> 255 (최고 밝기)
(불 꺼짐) 256 ----> 511 (최고 밝기)
(불 꺼짐) 512 ----> 767 (최고 밝기)
(불 꺼짐) 768 ----> 1023 (최고 밝기)

이런 식으로 말입니다.
그래서 우리가 0,255범위로 값을 맵핑해줘야 이 시행이 1회가 되는 것입니다.

기존에 예제코드에서 맵핑을 4로 해줘서 
많은 분들이 3혹은 4라고 쓰셨는데 이는 정답이 아닙니다.
그때 그 숫자로 맵핑을 한 이유는 그 이후 코드에서 조건문을 이용해 
0,1,2,3,4에 도달하면 특정코드가 실행되도록 하였기 때문입니다.

제가 프로젝트를 진행하기 전에 학교 수업에서 배웠던 내용을 
살짝 넣어봤는데 조금 무리였나 보네요.
하지만 저도 전날 수업 때 배운게 시험 때 나왔는데 그대로 틀려서
지금 기억하는 것이니 걱정할 필요 없습니다.



마지막 8번입니다.

이 문제도 오답률이 굉장히 낮습니다.
그만큼 많이 본 코드가 아닌가 싶습니다.
그럼 해설 들어갑니다.

우선 for()문이 반복문이라는 건 다들 아시죠?
여기서 for(int i=0; i<8; i++)의 의미를 자세히 살펴보면
i가 0부터 8미만(즉 7까지) 1씩 증가하며 반복하고 있습니다.
즉 0~7 총 8번 반복이 일어나고 있는 것이죠.

이때 RGB LED에서 i번째(이때 순서는 코딩할 때임) LED에 
(R 255, G 0, B 0) = 빨간색 불이 세팅되기 때문에
모든 LED에 빨간색 불이 들어오도록 세팅됨을 알 수 있습니다.

즉 위의 반복문 코드는 
RGB_LED.setPixelColor(0,255,0,0);
RGB_LED.setPixelColor(1,255,0,0);
RGB_LED.setPixelColor(2,255,0,0);
RGB_LED.setPixelColor(3,255,0,0);
RGB_LED.setPixelColor(4,255,0,0);
RGB_LED.setPixelColor(5,255,0,0);
RGB_LED.setPixelColor(6,255,0,0);
RGB_LED.setPixelColor(7,255,0,0);
과 같습니다.


퀴즈 해설을 마치며...

사실상 수업으로 배울 수 있는 내용은 마무리 되었습니다.
내일 최종 완성본 코드를 분석해서 올리긴 하겠지만
별로 관심없죠? ㅋㅋㅋㅋ

괜찮습니다. 
대신 무드등을 잘 완성시키고 
성취감을 느끼셨으면 좋겠습니다.

그럼 이만 안뇽
👋👋👋👋👋


댓글

이 블로그의 인기 게시물

청소년 IT 메이커 교육 2차

청소년 IT 메이커 교육 4차