STM32/프로젝트
[STM32] 3.적외선 센서와 모터로 라인 트레이싱
다락공방
2024. 5. 2. 20:39
STM 32 + 모터 드라이버 + 파워 연결 보드 + 배터리+ 모터 를 놓을 몸체가 필요했다...
20 * 20아크릴 보드를 쿠팡에서 사서 타공후, 모터와 모터드라이버만 일단 장착한채로 진행했다.
몸체는 나중에 더 만들듯...
적외선센서도 두개 필요했기에 ADC 핀하나를 더빼서 썻다.
ARD_A0 - PC0: 오른쪽 센서
ARD_A1 - PH2: 왼쪽 센서
아래는 핸드메이드 자동차 사진..
센서를 통한 모터제어는 지난번에 했기에... 이제 조합만 하면된다.
회전각크기, 속도 조절 등 난감한 상황이 많았다.
아래는 왼쪽, 오른쪽 센서값을 터미널을 통해 확인..
value_right = HAL_GPIO_ReadPin(GPIOC, ARD_A0_Pin);
value_left = HAL_GPIO_ReadPin(GPIOH, ARD_A1_Pin);
sprintf(uart_buf1,"value_right : %d\n\r", value_right);
HAL_UART_Transmit_IT(&huart3, uart_buf1, sizeof(uart_buf1));
HAL_Delay(100);
sprintf(uart_buf2,"value_left : %d\n\r", value_left);
HAL_UART_Transmit_IT(&huart3, uart_buf2, sizeof(uart_buf2));
위 코드를 통해 확인할 수 있었음.
최종결과
코드는 아래와 같음
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
value_right = HAL_GPIO_ReadPin(GPIOC, ARD_A0_Pin);
value_left = HAL_GPIO_ReadPin(GPIOH, ARD_A1_Pin);
if(value_left == 1 && value_right == 0){ //왼쪽 센서에 선이 감지된 경우, 좌회전
while(1){
value_right = HAL_GPIO_ReadPin(GPIOC, ARD_A0_Pin);
value_left = HAL_GPIO_ReadPin(GPIOH, ARD_A1_Pin);
if(value_left == 0 && value_right == 1){
turn_right(700,1000);
HAL_Delay(200);
stop();
HAL_Delay(100);
break;
}
turn_left(700,1000);
HAL_Delay(10);
}
}
else if(value_left == 0 && value_right == 1) //
{
while(1){
value_right = HAL_GPIO_ReadPin(GPIOC, ARD_A0_Pin);
value_left = HAL_GPIO_ReadPin(GPIOH, ARD_A1_Pin);
if(value_left == 1 && value_right == 0){
turn_left(700,1000);
HAL_Delay(200);
stop();
HAL_Delay(100);
break;
}
turn_right(700,1000);
HAL_Delay(10);
}
}
else if(value_right == 0 && value_left == 0){
forward(500,650);
HAL_Delay(10);
}
else {
stop();
HAL_Delay(1000);
}
}
/* USER CODE END 3 */
}