티스토리 뷰

아두이노 신호등 만들기

지금까지 배운 내용을 잘 생각하며 교통 신호등을 만들어 봅시다. 신호등에는 초록불, 노란불, 빨간불 등이 있습니다. 그리고 횡단보도에는 사람이 지나가도 된다고 알려주는 보행자 신호가 있습니다.

 

초록불이 켜지는 시간과 빨간불이 켜지는 시간은 같지만, 노란불 신호는 짧습니다. 그리고 빨간불일 때 길을 건너려고 보행자 스위치를 누르면 보행자 신호가 켜지도록 코딩을 해보겠습니다.

 

실제에서는 신호등이 이렇게 작동하지 않지만, 코딩 연습을 위해서 이렇게 만들어 보겠습니다. 그림 4-27처럼 회로를 만듭니다.

 

우선 신호등의 초록색, 노란색, 빨간색 등을 만들어 봅시다. 디지털 2번 핀은 초록색 엘이디(LED), 디지털 3번 핀은 노란색 엘이디(LED), 디지털 4번 핀은 빨간색 엘이디(LED)와 연결했습니다. 그리고 디지털 5번과 6번 핀을 초록색 엘이디(LED)와 연결하여 보행자 신호등을 만듭니다.

회로도

Tinkercad 회로도

아래 그림은 Tinkercad로 그린 회로도입니다.

Tinkercad 회로도

 

다시 한 번 정리하면, 엘이디(LED)의 플러스 극은 디지털 핀과 연결합니다(플러스 극이므로). 엘이디(LED)의 마이너스 극은 그라운드 핀(GND)과 연결합니다(마이너스 극이므로). 그리고 220옴 저항을 연결해서 엘이디(LED)에 큰 전류가 흐르지 않도록 합니다.

 

그러면 신호등이 어떤 순서로 켜지는지 살펴봅시다. 초록불만 켜지기-노란불만 켜지기-빨간불만 켜지기-버튼을 누르면 보행자 신호등 켜지기(누르지 않으면 켜지지 않는다.) 이것이 계속 반복되도록 코딩을 해야 합니다. 이것을 간단한 표로 나타내 볼까요?

 

그리고 불이 켜지는 시간은 다음 표와 같습니다.

 

계속 강조하지만 한 번에 한 가지 문제만 집중해서 해결해야 합니다. 여러 가지를 동시에 생각하려고 하면 문제가 복잡해 보이고 머리가 아픕니다. 그럼 그림 4-28과 같이 디지털 2번 핀에 연결된 초록불만 켜지게 코딩을 해보겠습니다.

그림 4-28 초록불만 켜기

 

디지털 2번 핀만 켜고 나머지는 다 끄면 됩니다. 노란불, 빨간불, 보행자 신호등을 켜는 것도 마찬가지입니다. 초록색-노란색-빨간색-보행자 신호등이 순서대로 켜지도록 블록을 붙이면 되겠죠.

함수로 코딩하기

그런데 이렇게 되면 코딩이 너무 길어집니다. 혹시나 잘못 코딩하면 어디가 잘못되었는지 찾기도 너무 힘듭니다. 그럼 어떤 방법이 있을까요? 바로 함수를 이용하는 겁니다.

 

함수는 쉽게 말하면 블록을 여러 개 모아서 이름을 붙인 것이라고 생각하면 됩니다. 제가 퀴즈를 하나 내겠습니다. 다음 동작이 무엇을 나타내는지 맞춰보세요.

 

1. 치약 뚜껑을 연다.

2. 치약을 칫솔에 묻힌다.

3. 입을 벌린다.

4. 손을 위아래로 움직여서 칫솔로 이를 닦는다.

 

뭘까요? 바로 양치질입니다. 이것을 다음의 그림처럼 나타낼 수 있습니다.

 

그러면 어떻게 함수를 만드는지 알아보겠습니다. 우선 그림 4-29처럼 데이터&추가블록 모음에서 <블록 만들기>를 클릭합니다. 그러면 함수를 만들 수 있습니다.

그림 4-29 블록 만들기

 

그리고 그림 4-29와 같이 선택사항 위에 있는 칸에 ‘초록불’이라고 함수 이름을 쓰고 확인 버튼 누르면 됩니다.

그림 4-30 초록불 함수 만들기

 

그러면 그림 4-31과 같은 블록이 만들어집니다. 우리가 ‘초록불’이라는 함수를 쓰면 초록불 블록 아래에 있는 블록이 실행됩니다.

그림 4-31 초록불 함수

 

그러면 초록불 함수는 그림 4-32처럼 만들면 되겠죠?

그림 4-32 초록불 함수 완성

 

이렇게 노란불<그림 4-33>, 빨간불<그림 4-34>도 만듭니다. 노란불은 1초만 켜지니까 <1초 기다리기 블록>을 연결합니다.

그림 4-33 노란불 함수 완성

 

이제 보행자 신호등을 만들어 보겠습니다. 그림 4-35처럼 보행신호 버튼을 누르면 보행자 신호등이 켜지도록 코딩을 해보겠습니다.

그림 4-35 보행자 신호등 함수 완성

 

그림 4-36처럼 4가지 함수 블록을 만들고 이것을 순서대로 잘 연결하면 코딩이 됩니다. 만약 초록불을 3초 동안 켜지게 하고 싶으면 초록불 함수 블록에서 <2초 기다리기>를 <3초 기다리기>로 바꾸면 됩니다.

 

그리고 신호등이 켜지는 순서를 바꾸려면 그림 4-37처럼 무한 반복하기 블록 안에 만들었던 함수 블록의 순서를 바꿔 연결하면 됩니다.

그림 4-36 4가지 함수 블록

 

그림 4-37 신호등 켜지는 순서 바꾸기

 

어때요? 참 쉽죠? 이제 1편에서 배우는 내용은 모두 끝났습니다. 2편에서는 1편에서 배운 내용을 바탕으로 검은색 선을 따라가는 라인 트랙 자동차 만드는 법을 배웁니다.

 

코딩은 생각보다 그렇지 어렵지 않습니다. 큰 문제를 작은 문제로 나눠서 생각하고 어떤 조건이 있는지 차근차근 생각하다 보면 어려운 문제도 멋지게 해결할 수 있습니다.

 

우리 모두 2편에서 다시 만나요.

댓글
댓글쓰기 폼