전자 회로 입문 거리 측정 센서

소개



에 따라 계속 진행해 갑니다.

거리 측정은 초음파 했습니다.

거리 측정 모듈



적외선을 삐져 나오면 물체에 맞았을 때 반사해 옵니다. 거리가 멀어지면 입사각이 커져 수신측의 빛이 맞는 위치가 변화하는 느낌으로 계측할 수 있습니다.

이번에도 I2C로 동작시키지만 아날로그 출력 단자도 있으므로 1개나 2개의 동작이면 아날로그값에서 구하는 방법을 추천합니다.
(배선이나 프로그램이 간단하고 좋다)


사용 부품


  • PSoC 5LP

  • GP2Y0E03
    사양서
  • PCA9306
  • 3.3V를 일으키는 무언가. ( DCDC 컨버터 , 3단자 레귤레이터 )

  • 회로도



    전회와 같은 회로에서는 움직이지 않았기 때문에 변경.

    이것이라면 안된다고 생각한다.
    공급 전압은 5V까지 OK이지만, 그 외는 5V까지 허용되지 않는다. (사양서 참조)
    좋은 아이는 흉내내지 않도록.

    이것으로 움직였지만… 분명 이 PSoC는 3.3V로 동작하고 있는 것임에 틀림없다. (5V로 움직이고 있다고 알면서 확신범)


    아, 전류가 부족한가? 평균 소비 전류가 26~36mA이다. (사양서 참조)
    환경 센서 이나 가속도 센서 는 1mA정도였습니다만… 적외선 내기 때문에 상당히 전류가 필요한 것인가. (지금까지의 방법에서는 1mA 정도였습니다)
    이것은 안 된다(´・ω・`)전류 잡히지 않는다. ↓분압의 경우.


    3단자 레귤레이터 을 사용해야한다고 생각합니다.



    프로그램



    슬레이브 어드레스는 0x80,0x81인 것 같지만, 지난번 마찬가지로 오른쪽으로 시프트시켜 0x40
    #include "project.h"
    #include <stdio.h>
    #include <stdlib.h>
    
    
    char imp[255];
    
     uint8 I2C_Read(uint8 SlaveAddress, uint8 *DataAddress, uint8 Byte_Count, uint8 I2C_Mode){
        uint8 temp;
        temp = I2C_1_MasterWriteBuf(SlaveAddress,DataAddress,1,I2C_Mode);
        while (temp != I2C_1_MSTR_NO_ERROR);
        while(I2C_1_MasterStatus() & I2C_1_MSTAT_XFER_INP);
        temp = I2C_1_MasterClearStatus();
    
        temp = I2C_1_MasterReadBuf(SlaveAddress,DataAddress,Byte_Count, I2C_Mode);
        while (temp != I2C_1_MSTR_NO_ERROR);
        while(I2C_1_MasterStatus() & I2C_1_MSTAT_XFER_INP);
        temp = I2C_1_MasterClearStatus();
        return (temp);
    }
    
    int main(void)
    {
        CyGlobalIntEnable;
    
        UART_1_Start();
        I2C_1_Start();
        CyDelay(2000);
        uint8 wr_buff[2]={0,0};
        for(;;)
        {
            wr_buff[0] = 0x5E;
            I2C_Read(0x40,wr_buff,2,I2C_1_MODE_COMPLETE_XFER);
            int ans;
            ans = ((wr_buff[0]*16+wr_buff[1]) / 16) / 4 ;
            sprintf(imp,"%d\n",ans);
            UART_1_PutString(imp);
            CyDelay(1000);
        }
    }
    

    결과



    센티미터입니다. 최대로 계측할 수 있는 것은 63cm인가? 라고 생각했지만, 사용서 보면 50cm였다.

    좋은 웹페이지 즐겨찾기