https://bker001.tistory.com/403
저번 글에 이어서 진행해보겠습니다. 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와 다양한 장치들의 호환을 확인하여 다시 코딩을 수정해줬습니다.