haechandev
만들기

아두이노 로봇 손으로 가위바위보를 만들었던 때

버튼을 누르면 손 모양을 내는 InMoov 로봇 손을 직접 제어하고, 100번의 가위바위보 실험으로 이론 확률과 통계적 확률을 확인했던 고등학교 동아리 기록.

2020년 7월 14일

고등학교 동아리에서 C 언어와 아두이노를 처음 만났습니다. 처음에는 화면에 문자를 출력하는 것만으로도 신기했는데, 어느 순간부터는 코드가 실제로 움직이면 좋겠다는 생각이 들었습니다.

그때 만든 것이 InMoov 로봇 손입니다. 서보모터와 회로를 직접 연결하고, 버튼을 누르면 손이 가위·바위·보 중 하나의 모양을 내도록 만들었습니다. 그리고 여기서 멈추지 않고, 확률과 통계 시간에 배운 내용을 실제 실험으로 확인해 보고 싶었습니다.

손이 움직이게 하려면

InMoov 로봇 손은 손가락마다 서보모터가 연결되어 있습니다. 각 모터의 각도를 다르게 주면 손가락이 접히고 펴지면서 원하는 손 모양을 만들 수 있습니다. 아두이노를 중심으로 모터와 버튼을 연결하고, 버튼 입력이 들어오면 잠깐의 대기 뒤에 손 모양을 바꾸도록 구성했습니다.

처음에는 회로와 코드가 따로 노는 느낌이었습니다. 코드가 맞는 것 같은데 손가락 하나가 원하는 대로 움직이지 않거나, 버튼을 눌렀을 때 타이밍이 어색한 경우가 있었습니다. 직접 연결한 선과 모터를 하나씩 확인하고, 각도를 바꾸며 손 모양을 맞췄습니다. 이때부터 코드는 화면 안에서만 끝나는 것이 아니라는 감각을 배웠습니다.

로봇 손과 가위바위보

로봇은 1, 2, 3 중 하나를 무작위로 고르게 했습니다. 각각 바위, 가위, 보에 대응하고, 버튼을 누르면 2초 뒤에 그 결과에 맞는 손 모양을 냅니다. 사람도 가위바위보를 내고 결과를 기록했습니다.

이 구조가 재미있었던 이유는 단순히 로봇이 손을 움직이는 데 있지 않았습니다. 사람과 로봇이 모두 가위·바위·보를 같은 확률로 낸다고 가정하면, 이길 확률·비길 확률·질 확률은 모두 1/3입니다. 가능한 경우를 펼쳐 보면 아홉 가지이고, 그중 각 결과가 세 가지씩이기 때문입니다.

결과이론상 확률100회 실험 결과
승리1/331회 · 0.31
무승부1/337회 · 0.37
패배1/332회 · 0.32

100번을 직접 해 보니 결과는 정확히 1/3으로 나뉘지 않았습니다. 무승부가 조금 더 많았고, 승리와 패배도 서로 달랐습니다. 그래도 세 값 모두 3분의 1 근처에 있었습니다. 횟수를 더 늘리면 이론에서 계산한 확률에 더 가까워질 것이라고 예상할 수 있었습니다.

수식으로 배운 확률이 눈앞의 실험이 되었을 때

교과서에서는 확률을 경우의 수와 식으로 먼저 배웁니다. 이 프로젝트에서는 그 식이 로봇의 움직임, 버튼 입력, 그리고 100개의 기록으로 이어졌습니다. 정확히 맞아떨어지지 않는 결과를 보면서 오히려 확률이 더 현실적으로 느껴졌습니다. 이론은 기준을 주고, 실험은 그 기준이 실제에서 어떻게 나타나는지 보여 줍니다.

지금 돌아보면 큰 프로젝트는 아니었습니다. 하지만 C 언어로 조건을 나누고, 아두이노에 신호를 보내고, 그 결과를 다시 표로 정리해 본 경험은 오래 남았습니다. 이후 알고리즘을 풀거나 제품을 만들 때도, 먼저 규칙을 정하고 실제로 확인해 보는 습관은 이때부터 시작됐던 것 같습니다.