전자 회로 입문 거리 측정 센서
소개
책 에 따라 계속 진행해 갑니다.
거리 측정은 초음파 했습니다.
거리 측정 모듈
적외선을 삐져 나오면 물체에 맞았을 때 반사해 옵니다. 거리가 멀어지면 입사각이 커져 수신측의 빛이 맞는 위치가 변화하는 느낌으로 계측할 수 있습니다.
이번에도 I2C로 동작시키지만 아날로그 출력 단자도 있으므로 1개나 2개의 동작이면 아날로그값에서 구하는 방법을 추천합니다.
(배선이나 프로그램이 간단하고 좋다)
사용 부품
적외선을 삐져 나오면 물체에 맞았을 때 반사해 옵니다. 거리가 멀어지면 입사각이 커져 수신측의 빛이 맞는 위치가 변화하는 느낌으로 계측할 수 있습니다.
이번에도 I2C로 동작시키지만 아날로그 출력 단자도 있으므로 1개나 2개의 동작이면 아날로그값에서 구하는 방법을 추천합니다.
(배선이나 프로그램이 간단하고 좋다)
사용 부품
GP2Y0E03
사양서
회로도
전회와 같은 회로에서는 움직이지 않았기 때문에 변경.
이것이라면 안된다고 생각한다.
공급 전압은 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였다.
Reference
이 문제에 관하여(전자 회로 입문 거리 측정 센서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aikawa_YO/items/7a66a85695a688901c1e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
슬레이브 어드레스는 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였다.
Reference
이 문제에 관하여(전자 회로 입문 거리 측정 센서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aikawa_YO/items/7a66a85695a688901c1e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(전자 회로 입문 거리 측정 센서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aikawa_YO/items/7a66a85695a688901c1e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)