- 필요한 재료 :
- ADC0804 단일 채널 8 비트 ADC 모듈 :
- 회로도 및 설명 :
- Raspberry Pi 프로그래밍 :
- Raspberry Pi를 사용하여 LCD에 Flex 센서 값 표시 :
Raspberry Pi 는 전자 엔지니어 및 애호가를 위해 설계된 ARM 아키텍처 프로세서 기반 보드입니다. PI는 현재 가장 신뢰할 수있는 프로젝트 개발 플랫폼 중 하나입니다. 더 높은 프로세서 속도와 1GB RAM을 갖춘 PI는 이미지 처리 및 사물 인터넷과 같은 많은 주요 프로젝트에 사용할 수 있습니다. PI로 할 수있는 멋진 일들이 많이 있지만 한 가지 슬픈 기능은 내장 ADC 모듈이 없다는 것입니다.
Raspberry Pi가 센서와 인터페이스 될 수있는 경우에만 실제 매개 변수에 대해 알고 상호 작용할 수 있습니다. 대부분의 센서는 아날로그 센서이므로 Raspberry Pi와 함께 외부 ADC 모듈 IC를 사용하여 이러한 센서를 인터페이스하는 방법을 배워야합니다. 이 프로젝트에서는 Flex Sensor를 Raspberry Pi와 인터페이스하고 LCD 화면에 값을 표시 하는 방법을 알아 봅니다.
필요한 재료:
- Raspberry Pi (모든 모델)
- ADC0804 IC
- 16 * 2 LCD 디스플레이
- 플렉스 센서
- 저항기 및 커패시터
- 브레드 보드 또는 퍼프 보드.
ADC0804 단일 채널 8 비트 ADC 모듈:
더 진행하기 전에이 ADC0804 IC와이를 raspberry pi와 함께 사용하는 방법에 대해 알아 보겠습니다. ADC0804는 단일 채널 8 비트 IC로, 단일 ADC 값을 읽고 8 비트 디지털 데이터에 매핑 할 수 있습니다. 이러한 8 비트 디지털 데이터는 Raspberry Pi에서 읽을 수 있으므로 2 ^ 8이 256이므로 값은 0-255가됩니다. 아래 IC의 핀아웃에서 볼 수 있듯이 DB0 ~ DB7 핀은 이러한 디지털을 읽는 데 사용됩니다. 가치.
여기서 또 다른 중요한 점은 ADC0804가 5V에서 작동 하므로 5V 논리 신호로 출력을 제공한다는 것입니다. 8 핀 출력 (8 비트를 나타냄)에서 모든 핀은 로직 '1'을 나타내는 + 5V 출력을 제공합니다. 따라서 문제는 PI 로직이 + 3.3v 이므로 PI의 + 3.3V GPIO 핀에 + 5V 로직을 제공 할 수 없다는 것입니다. PI의 GPIO 핀에 + 5V를 주면 보드가 손상됩니다.
따라서 + 5V에서 로직 레벨을 강압하려면 전압 분배기 회로를 사용합니다. 우리는 전압 분배기 회로에 대해 이전에 더 자세한 설명을 위해 살펴 보았습니다. 우리가 할 일은 두 개의 저항을 사용하여 + 5V 로직을 2 * 2.5V 로직으로 나누는 것입니다. 따라서 분할 후 Raspberry Pi에 + 2.5v 논리를 제공합니다. 따라서 ADC0804에 의해 로직 '1'이 표시 될 때마다 PI GPIO 핀에서 + 5V 대신 + 2.5V가 표시됩니다. 여기에서 ADC에 대해 자세히 알아보십시오: ADC0804 소개.
아래는 성능 보드에 구축 한 ADC0804 를 사용 하는 ADC 모듈 의 사진입니다.
회로도 및 설명:
Flex Sensor와 Raspberry Pi 를 연결 하기위한 전체 회로도 가 아래에 나와 있습니다. 이에 대한 설명은 다음과 같습니다.
이 라즈베리 파이 플렉스 센서 회로는 많은 와이어로 약간 복잡해 보일 수 있지만 자세히 살펴보면 대부분의 와이어가 LCD 및 8 비트 데이터 핀에서 라즈베리 파이로 직접 연결됩니다. 다음 표는 연결을 만들고 확인하는 동안 도움이 될 것입니다.
핀 이름 |
라즈베리 핀 번호 |
Raspberry Pi GPIO 이름 |
LCD 대 |
핀 4 |
바닥 |
LCD Vdd |
핀 6 |
Vcc (+ 5V) |
LCD Vee |
핀 4 |
바닥 |
LCD Rs |
핀 38 |
GPIO 20 |
LCD RW |
핀 39 |
바닥 |
LCD E |
핀 40 |
GPIO 21 |
LCD D4 |
핀 3 |
GPIO 2 |
LCD D5 |
핀 5 |
GPIO 3 |
LCD D6 |
핀 7 |
GPIO 4 |
LCD D7 |
핀 11 |
GPIO 17 |
ADC0804 Vcc |
핀 2 |
Vcc (+ 5V) |
ADC0804 B0 |
핀 19 (5.1K 사용) |
GPIO 10 |
ADC0804 B1 |
핀 21 (5.1K 사용) |
GPIO 9 |
ADC0804 B2 |
핀 23 (5.1K 사용) |
GPIO 11 |
ADC0804 B3 |
핀 29 (5.1K 사용) |
GPIO 5 |
ADC0804 B4 |
핀 31 (5.1K 사용) |
GPIO 6 |
ADC0804 B5 |
핀 33 (5.1K 사용) |
GPIO 13 |
ADC0804 B6 |
핀 35 (5.1K 사용) |
GPIO 19 |
ADC0804 B7 |
핀 37 (5.1K 사용) |
GPIO 26 |
ADC0804 WR / INTR |
핀 15 |
GPIO 22 |
다음 그림을 사용하여 Raspberry의 핀 번호를 확인할 수 있습니다.
모든 ADC 모듈과 마찬가지로 ADC0804 IC도 작동하는 데 클록 신호가 필요 합니다. 다행히도이 IC 에는 내부 클록 소스가 있으므로 회로에 표시된대로 RC 회로를 CLK 입력 및 CLK R 핀에 추가하기 만하면됩니다. 우리는 10K 및 105pf 값을 사용했지만 1uf, 0.1uf, 0.01uf와 같은 가까운 값을 사용할 수도 있습니다.
그런 다음 Flex 센서를 연결하기 위해 100K 저항을 사용하는 전위 분배기 회로를 사용했습니다. Flex 센서가 구부러짐에 따라 저항이 변하고 저항의 전위 강하도 변합니다. 이 강하는 ADC0804 IC에 의해 측정되며 이에 따라 8 비트 데이터가 생성됩니다.
Flex Sensor와 관련된 다른 프로젝트 확인:
- AVR 마이크로 컨트롤러와 인터페이스하는 Flex 센서
- Flex Sensor를 사용하는 Arduino 기반 Angry Bird 게임 컨트롤러
- Flex 센서에 의한 서보 모터 제어
- Arduino를 사용하여 손가락을 두드려 톤 생성
Raspberry Pi 프로그래밍:
연결이 끝나면 Raspberry Pi를 사용하여 이러한 8 비트의 상태를 읽고이를 사용할 수 있도록 Decimal로 변환해야합니다. 동일한 작업을 수행하고 결과 값을 LCD 화면에 표시하는 프로그램은이 페이지의 끝에 제공됩니다. 또한 코드는 아래의 작은 쓰레기로 설명됩니다.
LCD와 Pi를 연결 하려면 LCD 라이브러리가 필요합니다. 이를 위해 shubham이 개발 한 라이브러리를 사용하여 16 * 2 LCD 디스플레이를 4 선 모드에서 Pi와 인터페이스 할 수 있습니다. 또한 시간 및 Pi GPIO 핀을 사용하려면 라이브러리가 필요합니다.
참고 : 여기에서 lcd.py를 다운로드하여이 프로그램이 저장된 디렉토리에 저장해야합니다. 그래야만 코드가 컴파일됩니다.
import lcd #shubham@electro-passion.com으로 LCD 라이브러리 가져 오기 import time #Import time RPi.GPIO를 GPIO로 가져 오기 #GPIO는 GPIO로만 참조됩니다.
LCD 핀 정의는 다음과 같이 변수들에 할당된다. 이 번호는 실제 핀 번호가 아니라 GPIO 핀 번호입니다. 위의 표를 사용하여 GPIO 번호와 핀 번호를 비교할 수 있습니다. 어레이 바이너리는 모든 데이터 핀 번호를 포함하고 어레이 비트는 모든 GPIO 핀의 결과 값을 저장합니다.
#LCD 핀 정의 D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 바이너리 = (10,9,11,5,6,13,19,26) # 핀 번호 배열은 DB0에 연결됩니다. DB7 비트 = # 8 비트 데이터의 결과 값
이제 입력 및 출력 핀 을 정의 해야합니다. 7 개의 데이터 핀이 입력 핀이되고 트리거 핀 (RST 및 INTR)이 출력 핀이됩니다. 데이터 시트에 따라 특정 시간 동안 출력 핀을 하이로 트리거하는 경우에만 입력 핀에서 8 비트 데이터 값을 읽을 수 있습니다. 바이너리 핀을 바이너리 배열로 선언 했으므로 아래와 같이 선언을 위해 for 루프를 사용할 수 있습니다.
바이너리의 경우: GPIO.setup (binary, GPIO.IN) # 모든 바이너리 핀은 입력 핀입니다. # 트리거 핀 GPIO.setup (22, GPIO.OUT) #WR 및 INTR 핀이 출력됩니다.
이제 LCD 라이브러리 명령을 사용하여 LCD 모듈을 초기화하고 아래와 같이 작은 소개 메시지를 표시 할 수 있습니다.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
무한 while 루프 내에서 바이너리 값을 읽기 시작하여 10 진수로 변환하고 결과를 LCD에 업데이트합니다. ADC 값을 읽기 전에 앞서 말했듯 이 ADC 변환을 활성화하려면 트리거 핀을 특정 시간 동안 높게 만들어야합니다. 이것은 다음 줄을 사용하여 수행됩니다.
GPIO.output (22, 1) #Turn ON 트리거 시간.sleep (0.1) GPIO.output (22, 0) #Turn OFF 트리거
이제 8 개 데이터 핀을 읽고 bits 배열의 결과를 업데이트해야합니다. 이를 위해 for 루프를 사용하여 각 입력 핀을 True 및 False와 비교합니다. 참이면 각 비트 배열은 1로 만들어지고 그렇지 않으면 0으로 만들어집니다. 이것은 모든 8 비트 데이터가 읽은 값의 각각 0과 1이됩니다.
# 입력 핀을 읽고 범위 (8)에서 i에 대한 비트 배열의 결과 업데이트: if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
bits 배열을 업데이트 한 후에는 이 배열을 10 진수 값으로 변환 해야 합니다. 이것은 이진에서 십진수로의 변환에 불과합니다. 8 비트 바이너리 데이터의 경우 2 ^ 8은 256입니다. 따라서 0에서 255까지의 10 진수 데이터를 얻을 수 있습니다. 파이썬에서 연산자 "**"는 모든 값의 거듭 제곱을 찾는 데 사용됩니다. 비트 는 MSB로 시작 하므로 2 ^ (7-position)으로 곱합니다. 이렇게하면 모든 이진 값을 10 진수 데이터로 변환 한 다음 LCD에 표시 할 수 있습니다.
# 범위 (8)에서 i에 대한 비트 배열을 사용하여 10 진수 값 계산: decimal = decimal + (bits * (2 ** (7-i)))
소수점 값을 알면 전압 값을 쉽게 계산할 수 있습니다. 19.63을 곱하면됩니다. 8 비트 5VADC의 경우 각 비트는 19.3 밀리 볼트와 유사합니다. 결과 전압 값은 ADC0804 IC의 Vin + 및 Vin- 핀에 나타난 전압 값입니다.
# 전압 값 계산 Voltage = decimal * 19.63 * 0.001 # 1 단위는 19.3mV
전압 값을 사용하여 플렉스 센서가 구부러진 방식과 구부러진 방향을 확인할 수 있습니다. 아래 줄에서 방금 읽은 전압 값을 미리 결정된 전압 값과 비교 하여 LCD 화면에 Flex 센서의 위치를 표시했습니다.
# 센서의 전압 및 디스플레이 상태 비교 mylcd.setCursor (1,1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("안정")
마찬가지로 전압 값을 사용하여 Raspberry Pi가 수행 할 작업을 수행 할 수 있습니다.
Raspberry Pi를 사용하여 LCD에 Flex 센서 값 표시:
프로젝트 작업은 매우 간단합니다. 그러나 lcd.py 헤더 파일 을 다운로드하고 현재 프로그램이있는 동일한 디렉토리에 저장 했는지 확인하십시오. 그런 다음 브레드 보드 또는 성능 보드를 사용하여 회로 다이어그램에 연결이 표시되도록하고 Pi에서 아래 프로그램을 실행하면 작동합니다. 설정은 아래와 같이 보일 것입니다.
그림과 같이 LCD는 Decimal 값, 전압 값 및 센서 위치를 표시 합니다. 센서를 앞뒤로 구부리면 전압과 소수점 값이 변하는 것을 볼 수 있으며 상태 텍스트도 표시됩니다. 모든 센서를 연결하고 전압이 변화하는 것을 확인할 수 있습니다.
튜토리얼의 전체 작업은 아래 비디오 에서 찾을 수 있습니다. 프로젝트를 이해하고 비슷한 것을 만드는 것을 즐겼기를 바랍니다. 궁금한 점이 있으시면 댓글란이나 포럼에 남겨 주시면 최선을 다해 답변 드리겠습니다.