News Download Tutorial FAQ Reference Buy

스크래치 : 가속도 센서로 스프라이트 움직이기

개요
가속도 센서를 사용하여 스크래치의 스프라이트를 움직이는 예제입니다.
필터 만들기
기초 과정에서 가속도 센서를 사용하여 스프라이트를 움직일 때 스프라이트의 움직임이 흔들리는 것을 관찰할 수 있었는데 좀 더 부드럽게 움직이도록 만들어 봅시다.
원리는 간단한데 가속도 센서의 값이 민감하게 변하기 때문에 평균 값을 구하여 사용하는 것입니다. 하지만 가속도 센서 값을 어느 정도 모아서, 예를 들어 100개를 모아서 평균 값을 계산하면 100개가 모여졌을 때만 스프라이트를 움직일 수 있기 때문에 움직임이 뚝뚝 끊어져 보일 수가 있습니다.
따라서 예전의 값은 버리고 새로운 값을 넣어서 매번 평균 값을 구하는 방법을 사용합니다. 이를 이동 평균(Moving Average)이라고 합니다. 이동 평균을 구하는 방법은 여러 가지가 있는데 가장 간단한 방법으로 해보겠습니다.
우선 가속도 센서 값을 모을 수 있는 장소가 필요합니다. 스크래치의 리스트를 하나 만들어 봅시다. X축 가속도 센서의 값들을 가지고 있는 리스트의 이름은 x-values라고 하겠습니다.

x-sum은 X축 가속도 센서 값의 평균을 구하기 위해 합을 저장하는 변수입니다. 프로그램을 시작하면 x-sum 값은 0으로 하고, x-values 리스트의 내용을 모두 비웁니다. X축 가속도 센서 값 하나를 얻어서 리스트에 추가하고 x-sum에 더합니다. 센서 값 20개로 평균을 구할 것이어서 리스트의 항목 수가 20개보다 많으면 제일 먼저 리스트에 넣었던 값을 x-sum에서 빼고 리스트에서도 삭제합니다. 이렇게 하면 매번 가장 최근의 가속도 센서 값 20개가 리스트에 들어 있습니다. 평균을 구하기 위해 x-sum을 리스트의 항목 수로 나눕니다. 가속도 센서 값의 범위 16000 ~ -16000을 화면에서 세로 방향으로 스프라이트가 움직일 수 있는 범위 -180 ~ 180으로 변환하기 위해 -89로 나눕니다.
프로그램을 실행해 보면 스프라이트의 움직임에 약간 지연이 있습니다. 평균을 구하기 때문에 이전의 가속도 센서 값이 영향을 미치기 때문입니다. 리스트에 가지고 있는 항목 수를 줄이면 지연 시간은 줄어 들지만 적은 개수의 센서 값으로 평균을 구하기 때문에 민감한 센서 값의 변화를 덜 둔감하게 합니다. 반대로 리스트에 가지고 있는 항목 수를 많게 하면 센서 값의 변화는 둔감하게 만들지만 지연 시간이 증가합니다. 리스트의 항목 수를 적절하게 조정해야겠습니다.
센서 값 좀 더 보정하기
기초 과정에서 사용한 방법을 같이 사용해 보도록 합시다. 지연 시간을 줄이기 위해 리스트의 항목 수는 10개로 하겠습니다. 평균 값을 5로 나눈 후 반올림하여 소수점 아래를 없애고 5를 곱하도록 합시다.

가로 방향의 움직임에 대해서도 똑같이 적용해 봅시다.
목차
Hardware
  1. Hamster robot
  2. USB dongle
Preparation for Class
  1. Software installation   Windows · MacOS · Linux
  2. Robot to PC connection
  3. Software execution   Windows · MacOS · Linux
Basic
  1. Standing and singing
  2. My precious ass
  3. Moving an object with the accelerometer
Advanced
  1. Moving an object with the accelerometer
  2. Line follower with one sensor
Previous Lectures
  1. Ordering in sequence
  2. Repeat
  3. Debugging
  4. Repeat until hand found
  5. Move a robot
  6. Use sensors
  7. Use the default board
  8. Braitenberg's robot
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (akaii@kw.ac.kr) if you have any problem.