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 */
}