산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

디지털 인터페이스가 있는 간단한 아날로그 근접 센서(Raspberry Pi용) [최종 업데이트:2014년 2월 7일]

Raspberry Pi에는 26개의 GPIO(범용 입/출력) 핀을 제어하는 ​​Broadcom BCM2835 칩이 있습니다. 핀을 제어하는 ​​데 사용할 수 있는 C 라이브러리 또는 RPi.GPIO python 패키지가 온라인에서 제공됩니다. RPi.GPIO 패키지는 기본적으로 Debian Linux 시스템의 RPi 버전인 Raspbian과 같은 대부분의 Raspberry Pi 시스템에 포함되어 있습니다.

arduino에 비해 RPi의 한 가지 단점은 아날로그 핀이 없다는 것입니다. 모든 GPIO 핀은 순수 디지털입니다. 예를 들어 핀 A가 출력 핀이면 0 또는 1로 표시되는 LOW(0V) 또는 HIGH(3.3V)만 출력할 수 있습니다. 핀 A가 입력 핀이면 핀 A에 가해지는 0.8V 미만의 전압에 대해 , LOW 또는 0으로 취합니다. 1.3V 이상의 전압(실제로 놀랍도록 낮습니다!)에 대해 HIGH 또는 1[참조:RPi GPIO]로 간주합니다.
하지만 실제 세계에서는 순전히 0 또는 1이 거의 발생하지 않습니다. 우리는 항상 범위 내에서 지속적인 가치를 가질 수 있는 정보를 얻습니다. 예를 들어, 온도는 10C 또는 50F 또는 100C 또는 212F일 수 있습니다. 이 숫자에는 단순히 "콜드" 또는 "핫"보다 더 많은 정보가 포함되어 있습니다. 거리는 2cm 또는 10m일 수 있으며, '가까운' 또는 '멀리'만 아는 것으로는 충분하지 않습니다.

이 단점을 극복하기 위한 몇 가지 방법이 있습니다. RPi는 SPI 또는 I2C 인터페이스를 지원하므로 외부 아날로그-디지털 변환기(ADC)를 사용하고 SPI 또는 I2C 인터페이스를 사용하여 MCP3008, TLC549, MCP23017 등과 같은 ADC를 통해 준 아날로그 신호를 얻을 수 있습니다. 이 칩 일반적으로 몇 달러의 비용이 듭니다. 그러나 추가 상용 센서를 사용하면 전체 부품 비용이 20~30달러 이상일 수 있으며 시스템을 컴팩트하게 만들기가 어렵습니다. 로봇 프로젝트의 경우 일반적으로 하나 이상의 센서가 필요하며 비용이 쉽게 추가될 수 있습니다.

사실, 많은 상황에서 실제로 이러한 외부 장치를 사용하지 않고 아날로그 디지털 을 통한 신호 핀!

핵심은 아날로그 신호를 지속 시간으로 변환하는 것입니다. 시간은 항상 아날로그이기 때문에!

몇 개의 적외선 LED, 하나의 포토트랜지스터, 하나의 2N3904 NPN 트랜지스터, 100nF 세라믹 커패시터 및 여러 개의 저전력 저항을 사용하여 간단한 적외선 근접 센서를 구축합니다. 그리고 나는 약간의 아날로그 읽기를 얻을 수 있습니다.

모든 요소는 전자 시장에서 가장 저렴합니다.

어떤 LED, 포토트랜지스터 또는 NPN 트랜지스터가 사용되는지는 중요하지 않습니다. 그것들은 거의 동일합니다.

조금 중요할 수 있는 유일한 것은 100nF(0.1uF) 커패시터입니다. 나는 아마도 최선의 선택이 아닌 로우 프로파일 세라믹을 사용했습니다. 클래스 1 세라믹 또는 필름 커패시터가 여기에 더 적합합니다.

+5V 및 GND 와이어를 외부 5V 전원 공급 장치에 연결하고 GND 와이어도 Raspberry Pi GPIO 핀의 접지에 연결합니다. 하나의 GPIO 핀, 예를 들어 핀 A를 트리거로 선택하고 이를 트리거 와이어에 연결합니다. 신호 입력/출력으로 다른 GPIO 핀, 예를 들어 핀 B를 선택하고 OUT 와이어에 연결합니다.

물체의 거리를 측정하기 위해 트리거 신호를 보내 적외선 LED를 활성화합니다. 이 LED에서 방출된 빛은 센서 앞의 물체에 의해 반사됩니다. 중간에 있는 포토트랜지스터는 반사된 빛을 모아 비례하는 전류를 발생시킨다. 이 전류는 커패시터 양단의 전압을 통합하는 데 사용됩니다(I=CdV/dt). 커패시터 전압이 특정 임계값에 도달하는 데 걸리는 시간을 모니터링하여 광트랜지스터에서 생성된 전류의 양, 즉 반사된 빛의 양을 알 수 있습니다. 분명히 물체가 가까울수록 반사광이 더 많습니다. 센서의 타이밍을 조심스럽게 보정함으로써 거리를 꽤 정확하게 측정할 수 있을 것입니다.

자세한 작업 순서는 다음과 같습니다.1. 커패시터 제로

먼저 핀 B를 출력 핀으로 설정하고 0으로 설정합니다.

GPIO.setup(PIN_B,GPIO.OUT)
GPIO.output(PIN_B,0)
time.sleep(0.01)

그러면 커패시터의 잔류 전압이 방전됩니다. 커패시터 방전을 위한 RC 시간은 t=RC=500ohm * 100nF =50us =0.00005초입니다. 핀 B에서 200RC 시간 동안 0볼트를 유지함으로써 커패시터가 완전히 방전되었는지 확인합니다(잔류 전압은 원래 잔류 전압의 e−200=10−87배여야 함).2. 핀 B를 입력으로 설정

이제 핀 B를 입력 핀으로 사용하여 광 트랜지스터에서 데이터를 가져옵니다.
GPIO.setup(PIN,GPIO.IN)

3. LED 켜기

적외선 LED를 켤 시간입니다.

GPIO.setup(PIN_A,GPIO.OUT)
GPIO.출력(PIN_A,1)

이것은 트리거 핀의 전압을 3.3V로 설정합니다. 2N3904의 BE 노드가 0.7V로 떨어지기 때문에 R1 양단의 전압은 2.6V입니다. R1을 통한 전류는 I=2.6V/4.3kΩ=0.6mA입니다. 그런 다음 2N3904는 이 전류를 ~150배 증폭하여 컬렉터에서 이미 터까지 ~ 100mA의 전류를 생성합니다. 각 LED는 짧은 시간 동안 약 50mA를 전도합니다.4. LOW로 남아 있는 핀 B의 지속 시간 타이밍

커패시터가 RPi의 임계값에 도달하여 핀 B가 HIGH가 되는 데 걸리는 시간 측정을 시작합니다.

counter=0
t1=time.clock()*1000
while(GPIO.input(PIN_B)==0)&(counter<1e4):
counter =counter+1
deltat=time.clock()*1000-t1

deltat는 핀 B가 LOW로 유지되는 시간입니다. deltat는 포토트랜지스터 전류의 역수에 비례하기 때문에 (또는 반사된 빛의 양 ), 광트랜지스터 전류는 대략 거리의 역수에 비례합니다. , deltat는 거리에 대략 비례합니다. .
deltat∝1I∝1light∝distance

(counter<1e4) 용어는 극도로 낮은 광트랜지스터 전류, 즉 무한한 거리로 인해 커패시터를 통합하는 데 너무 오래 걸리는 상황을 방지하기 위한 것입니다.

자세한 내용:디지털 인터페이스가 있는 간단한 아날로그 근접 센서(Raspberry Pi용) 마지막 업데이트 2014년 2월 7일]


제조공정

  1. 1선 DS18B20 센서와 Raspberry Pi로 온도 측정
  2. Raspberry Pi의 1선식 온도 센서 DS1820(GPIO 직접)
  3. 센서 데이터와 Raspberry Pi 마이크로프로세서의 통합
  4. 초음파 센서(HC-SR04) + 라즈베리파이
  5. RPi가 있는 라인 추적 센서
  6. 하나의 GPIO 핀으로 아날로그 센서 읽기
  7. 라즈베리 파이용 DIY 적외선 모션 센서 시스템
  8. Raspberry Pi에서 아날로그 입력이 없는 아날로그 센서
  9. Raspberry Pi 1-와이어 디지털 온도계 센서(DS18B20)
  10. JAVA의 Raspberry Pi 디지털 홀 센서