STM32/프로젝트
[STM32] 4. 로봇 팔 / 배달
다락공방
2024. 6. 26. 09:45
배달로봇을 만드는 프로젝트를 진행하기에 물건을 전달할 로봇팔이 필요했다.
리니어 액추에이터나 다른 여러가지 방법을 생각했지만 하나의 모터로 두개의 팔을 만들 수 있다는 점에서 랙과 피니언을 사용하는 방법을 선택했다.
위와 같은 원리로 모터를 이용해 선형적인 운동을 하는 기구를 만드려고 하였다.
최종적으로 완성한 로봇팔은 아래와 같으며 PULL과 PUSH로 밀고 당기는 동작이 가능하도록 설계하였다.
아래 코드로 동작하게 하였으며, 여러번의 시도로 랙이 맨끝에서 맨끝으로 가는 PWM신호 + 타이밍을 얻어 사용했다.
void deliver_push() { //배달 : 팔 피기
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); //TIM1 CH4
HAL_GPIO_WritePin(GPIOF, ARD_D10_Pin, 1);
HAL_GPIO_WritePin(GPIOF, ARD_D11_Pin, 0);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 500);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOF, ARD_D10_Pin, 0);
HAL_GPIO_WritePin(GPIOF, ARD_D11_Pin, 0);
}
void deliver_pull() { //배달 : 팔 접기
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
HAL_GPIO_WritePin(GPIOF, ARD_D10_Pin, 0);
HAL_GPIO_WritePin(GPIOF, ARD_D11_Pin, 1);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 500);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOF, ARD_D10_Pin, 0);
HAL_GPIO_WritePin(GPIOF, ARD_D11_Pin, 0);
}
그리고 이전에 만든 라인트레이싱과 로봇 팔을 이용해 배달 알고리즘을 완성시켰다.
라인트레이싱 및 180도 회전, 물건 배달 후 다시 라인트레이싱으로 복귀하는 알고리즘을 사용했다.