메이킹 일지 (진행 중)/하이퍼랩스 게임기

하이퍼랩스 게임기 제작 - 7. 전체 조립 및 가동 + 멀티 스레드 이야기

  • -

https://bker001.tistory.com/403

 

하이퍼랩스 게임기 제작 - 6. Nema17과 A4988, Accelstepper

https://bker001.tistory.com/395 하이퍼랩스 게임기 제작 - 5. 중간 점검 https://bker001.tistory.com/392 하이퍼랩스 게임기 제작 - 4. 모델링&프린팅 수정 (1) 구슬이 안쪽으로 빠져 버릴 수 있는 공간이 생겼습니

bker001.tistory.com

 

저번 글에 이어서 진행해보겠습니다. 6번 글에서 Nema17, A4988, Accelstepper를 연동하는 방법과 회로를 설명드렸다면 그 결과물이 어떻게 나오는지 작동해보겠습니다.

 

일단 초기 회로에 맞춰서 리미트 스위치를 연결해줬습니다. 

 

 

제가 이번에 연결한 리밋 스위치는 회로의 사진처럼 스위치만 있는것이 아니라 연결이 편하도록 애초에 기판의 형태로 되어 있는 것을 사용하였습니다.

 

 

 

양 쪽에 모델링으로 잘 위치시켜서 설치한 다음 아래와 같이 코딩한 다음 작동을 확인했습니다.

이때 특이사항으로 풀업 스위치라, LOW 상태를 인식으로 하여 코딩하였네요.

 

 

 

양 쪽 모두 인식이 잘되는 모습입니다. 또한 인식이 되면 모터가 그 방향으로는 더 이상 진행할 수 없도록 코딩하여 잘 작동되었습니다.

 


공을 발사하기 위해서 동일하게 setAcceleration 값을 3000으로 놓은 상태로 놓고 별도의 스위치가 아닌 조이스틱 내의 스위치를 인식하여 솔레노이드 밸브가 작동되게 해보았습니다.

 

 

잘 작동되는 모습이었는데 생각보다 움직이는 것이 느리기도 하고 특히 움직이는 도중에 스위치가 입력되면 멈추는 것이 문제였습니다.

 

 

이건 빨리 움직일 수 있게 값을 10000까지 올려도 동일하게 발생하는 문제였습니다.

이 문제가 생기는 이유는 '아두이노가 기본적으로 동시작업이 불가능한 MCU'이기 때문입니다.

 

 

이런 형식의 진행이 아두이노의 진행 방식이라면 이 새로 한 줄 어디든 "스위치 인식"이 들어가면 그것을 거쳐서 가야하기에 시간이 걸리게 됩니다.

 

 

이렇게 되면 확실히 스위치가 인식이 되는 순간 솔레노이드 작동이 되며 0.5초간 공백이 생기고, 잠깐 모터 작동이 멈출 수 밖에 없습니다.

그래서 저희가 필요한 것은 기존 줄에 추가가 되는 것이 아니라 한 줄이 옆에 더 생겨서 각자 어떤 일을 하던 동시에 진행이 될 수 있는 기능입니다. 이것을 '멀티 스레드'라고 부릅니다.

 

 

아두이노는 싱글스레드라 기본적으로 지원하지 않기 때문에 추가로 다른 기능을 추가해야한다고 들었고, 저는 그냥 Esp32에서 해결이 가능하다고 들어서 Esp32로 진행해보려고 합니다.

 

 

https://arsviator.blogspot.com/2019/04/esp32-use-multicore-on-esp32.html

 

ESP32에서 멀티코어 사용하기 (Use multicore on ESP32)

ESP32는 2개의 Xtensa 32-bit LX6 마이크로 프로세서 코어를 가지고 있다. 아두이노 IDE에서 코드를 실행하면 디폴토로 코어 1에서 실행된다. 여기서는 태스크를 만들어 두번째 코어에서 코드를 실행하

arsviator.blogspot.com

 

이렇게 멀티코어 사용 방법글과 Esp32와 다양한 장치들의 호환을 확인하여 다시 코딩을 수정해줬습니다.

반응형
Contents

포스팅 주소를 복사했습니다!

이 글이 도움이 되었다면 추천 부탁드립니다!