- Vật liệu cần thiết:
- ADC0804 Mô-đun ADC 8 bit kênh đơn:
- Sơ đồ mạch và giải thích:
- Lập trình Raspberry Pi:
- Hiển thị giá trị Cảm biến Flex trên màn hình LCD bằng Raspberry Pi:
Raspberry Pi là một bo mạch dựa trên bộ xử lý kiến trúc ARM được thiết kế cho các kỹ sư điện tử và những người yêu thích. PI là một trong những nền tảng phát triển dự án đáng tin cậy nhất hiện nay. Với tốc độ xử lý cao hơn và RAM 1 GB, PI có thể được sử dụng cho nhiều dự án cấu hình cao như Xử lý hình ảnh và Internet of Things. Có rất nhiều điều thú vị có thể được thực hiện với PI, nhưng một đặc điểm đáng buồn là nó không có mô-đun ADC sẵn có.
Chỉ, nếu Raspberry Pi có thể được giao tiếp với các cảm biến thì nó mới có thể biết về các thông số trong thế giới thực và tương tác với nó. Hầu hết các cảm biến ngoài kia là cảm biến tương tự và do đó chúng ta nên học cách sử dụng IC mô-đun ADC bên ngoài với Raspberry Pi để giao tiếp các cảm biến này. Trong dự án này, chúng ta sẽ tìm hiểu cách có thể Giao diện Cảm biến Flex với Raspberry Pi và Hiển thị các Giá trị của nó trên Màn hình LCD.
Vật liệu cần thiết:
- Raspberry Pi (Mọi kiểu máy)
- IC ADC0804
- Màn hình LCD 16 * 2
- Cảm biến Flex
- Điện trở và tụ điện
- Breadboard hoặc perf board.
ADC0804 Mô-đun ADC 8 bit kênh đơn:
Trước khi tiếp tục, hãy cùng chúng tôi tìm hiểu về IC ADC0804 này và cách sử dụng IC này với raspberry pi. ADC0804 là một IC 8 bit kênh đơn, có nghĩa là nó có thể đọc một giá trị ADC duy nhất và ánh xạ nó thành dữ liệu số 8 bit. Dữ liệu kỹ thuật số 8 bit này có thể được đọc bởi Raspberry Pi, do đó giá trị sẽ là 0-255 vì 2 ^ 8 là 256. Như được hiển thị trong sơ đồ chân của vi mạch bên dưới, các chân DB0 đến DB7 được sử dụng để đọc các kỹ thuật số này. các giá trị.
Bây giờ một điều quan trọng khác ở đây là, ADC0804 hoạt động ở 5V và do đó nó cung cấp đầu ra ở tín hiệu logic 5V. Trong đầu ra 8 chân (đại diện cho 8bits), mỗi chân cung cấp đầu ra + 5V để biểu diễn logic '1'. Vì vậy, vấn đề là logic PI là + 3.3v, vì vậy bạn không thể cung cấp logic + 5V cho chân GPIO + 3.3V của PI. Nếu bạn cung cấp + 5V cho bất kỳ chân GPIO nào của PI, bo mạch sẽ bị hỏng.
Vì vậy, để mức logic bước xuống từ + 5V, chúng ta sẽ sử dụng mạch phân áp. Chúng tôi đã thảo luận về Mạch phân chia điện áp trước đây, hãy xem xét nó để làm rõ thêm. Những gì chúng ta sẽ làm là, chúng ta sử dụng hai điện trở để chia logic + 5V thành logic 2 * 2.5V. Vì vậy, sau khi phân chia chúng tôi sẽ cung cấp logic + 2,5v cho Raspberry Pi. Vì vậy, bất cứ khi nào logic '1' được trình bày bởi ADC0804, chúng ta sẽ thấy + 2,5V tại Chân GPIO PI, thay vì + 5V. Tìm hiểu thêm về ADC tại đây: Giới thiệu về ADC0804.
Dưới đây là hình ảnh Module ADC sử dụng ADC0804 mà chúng tôi đã xây dựng trên Perf Board:
Sơ đồ mạch và giải thích:
Sơ đồ mạch hoàn chỉnh để giao tiếp Cảm biến Flex với Raspberry Pi được hiển thị bên dưới. Giải thích tương tự như sau.
Đây cảm biến flex mâm xôi pi mạch có vẻ là một chút phức tạp với rất nhiều dây điện, nhưng nếu bạn có một cái nhìn gần gũi hơn hầu hết các dây được kết nối trực tiếp từ màn hình LCD và 8-bit pin dữ liệu đến pi mâm xôi. Bảng sau đây sẽ giúp bạn trong khi tạo và xác minh các kết nối.
Ghim tên |
Số Pin Raspberry |
Tên GPIO của Raspberry Pi |
LCD Vss |
Pin 4 |
Đất |
Vdd LCD |
Pin 6 |
Vcc (+ 5V) |
LCD Vee |
Pin 4 |
Đất |
LCD Rs |
Pin 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Đất |
LCD E |
Pin 40 |
GPIO 21 |
LCD D4 |
Pin 3 |
GPIO 2 |
LCD D5 |
Pin 5 |
GPIO 3 |
LCD D6 |
Pin 7 |
GPIO 4 |
LCD D7 |
Pin 11 |
GPIO 17 |
ADC0804 Vcc |
Pin 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pin 19 (đến 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (đến 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (đến 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (đến 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (đến 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (đến 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (đến 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (đến 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Bạn có thể sử dụng hình ảnh sau để xác định số pin trên Raspberry kể từ đó.
Giống như tất cả các module ADC khác, IC ADC0804 cũng yêu cầu tín hiệu xung nhịp để hoạt động, may mắn là IC này có nguồn xung nhịp bên trong nên ta chỉ cần thêm mạch RC vào chân CLK in và CLK R như hình vẽ trong mạch. Chúng tôi đã sử dụng giá trị 10K và 105pf, nhưng chúng tôi có thể sử dụng bất kỳ giá trị nào gần giống như 1uf, 0,1uf, 0,01uf cũng sẽ hoạt động.
Sau đó, để kết nối cảm biến Flex, chúng tôi đã sử dụng một mạch phân chia tiềm năng sử dụng điện trở 100K. Khi cảm biến Flex bị uốn cong, điện trở trên nó sẽ khác nhau và do đó, điện thế sẽ giảm trên điện trở. Sự sụt giảm này được đo bằng IC ADC0804 và dữ liệu 8 bit được tạo ra tương ứng.
Kiểm tra các dự án khác liên quan đến Cảm biến Flex:
- Giao diện cảm biến Flex với Vi điều khiển AVR
- Bộ điều khiển trò chơi Angry Bird dựa trên Arduino sử dụng Cảm biến linh hoạt
- Điều khiển động cơ servo bằng cảm biến linh hoạt
- Tạo âm bằng cách nhấn ngón tay bằng Arduino
Lập trình Raspberry Pi:
Sau khi hoàn tất các kết nối, chúng ta nên đọc trạng thái của các 8 bit này bằng Raspberry Pi và chuyển đổi chúng thành Hệ thập phân để có thể sử dụng chúng. Chương trình thực hiện tương tự và hiển thị các giá trị kết quả trên màn hình LCD được đưa ra ở cuối trang này. Hơn nữa, mã được giải thích thành các đoạn nhỏ bên dưới.
Chúng ta cần một thư viện LCD để giao tiếp LCD với Pi. Đối với điều này, chúng tôi sử dụng thư viện do shubham phát triển sẽ giúp chúng tôi giao tiếp màn hình LCD 16 * 2 với Pi ở chế độ bốn dây. Ngoài ra, chúng tôi cần các thư viện để sử dụng thời gian và các chân GPIO của Pi.
Lưu ý : Lcd.py phải được tải xuống từ đây và được đặt trong cùng thư mục nơi chương trình này được lưu. Chỉ sau đó mã sẽ được biên dịch.
nhập màn hình LCD # Nhập thư viện LCD theo thời gian nhập [email protected] # Thời gian nhập thời gian nhập RPi.GPIO dưới dạng GPIO #GPIO sẽ chỉ được gọi là GPIO
Các định nghĩa pin LCD được gán cho các biến như hình dưới đây. Lưu ý rằng những con số này là số pin GPIO chứ không phải số pin thực. Bạn có thể sử dụng bảng trên để so sánh số GPIO với số pin. Hệ nhị phân mảng sẽ bao gồm tất cả các số chân dữ liệu và các bit mảng sẽ lưu trữ giá trị kết quả của tất cả các chân GPIO.
# Định nghĩa chânLCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 nhị phân = (10,9,11,5,6,13,19,26) # Dải số chân kết nối với DB0- Các bit DB7 = # giá trị kết quả của dữ liệu 8 bit
Bây giờ, chúng ta phải xác định các chân đầu vào và đầu ra. Bảy chân dữ liệu sẽ là chân đầu vào và chân kích hoạt (RST và INTR) sẽ là chân đầu ra. Chúng tôi chỉ có thể đọc các giá trị dữ liệu 8 bit từ chân đầu vào nếu chúng tôi kích hoạt chân đầu ra cao trong một thời gian cụ thể theo biểu dữ liệu. Kể từ khi chúng tôi đã tuyên bố các chân nhị phân trong mảng binarys chúng ta có thể sử dụng một cho vòng lặp cho tuyên bố như hình dưới đây.
cho nhị phân trong nhị phân: GPIO.setup (binary, GPIO.IN) # Tất cả các chân nhị phân là chân đầu vào # Chân kích hoạt GPIO.setup (22, GPIO.OUT) #WR và chân INTR là đầu ra
Bây giờ bằng cách sử dụng các lệnh thư viện LCD, chúng ta có thể khởi tạo mô-đun LCD và hiển thị một thông báo giới thiệu nhỏ như hình dưới đây.
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 ()
Bên trong vòng lặp while vô hạn, chúng tôi bắt đầu đọc các giá trị nhị phân chuyển đổi chúng thành thập phân và cập nhật kết quả trên màn hình LCD. Như đã nói trước đó trước khi chúng ta đọc các giá trị ADC, chúng ta nên đặt chân kích hoạt ở mức cao trong một thời gian cụ thể để kích hoạt chuyển đổi ADC. Điều này được thực hiện bằng cách sử dụng các dòng sau.
GPIO.output (22, 1) # BẬT trình kích hoạt time.sleep (0,1) GPIO.output (22, 0) # Tắt trình kích hoạt
Bây giờ, chúng ta nên đọc các chân 8 dữ liệu và cập nhật kết quả trong mảng bit. Để làm điều này, chúng tôi sử dụng vòng lặp for để so sánh từng chân đầu vào với True và False. Nếu đúng, mảng bit tương ứng sẽ được tạo thành 1, còn lại nó sẽ được tạo thành 0. Đây là tất cả dữ liệu 8 bit sẽ được tạo thành 0 và 1 tương ứng với các giá trị được đọc.
# Đọc các chân đầu vào và cập nhật kết quả trong mảng bit cho i trong phạm vi (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Khi chúng ta đã cập nhật mảng bit, chúng ta nên chuyển mảng này thành giá trị thập phân. Đây không phải là gì ngoài chuyển đổi nhị phân sang thập phân. Đối với dữ liệu nhị phân 8 bit 2 ^ 8 là 256. Vì vậy, chúng ta sẽ nhận được dữ liệu thập phân từ 0 đến 255. Trong python, toán tử “**” được sử dụng để tìm lũy thừa của bất kỳ giá trị nào. Vì các bit bắt đầu bằng MSB nên chúng tôi nhân nó với 2 ^ (7-vị trí). Bằng cách này, chúng tôi có thể chuyển đổi tất cả các giá trị nhị phân thành dữ liệu thập phân và sau đó hiển thị nó trên màn hình LCD
# tính toán giá trị thập phân bằng cách sử dụng mảng bit cho i trong phạm vi (8): decimal = decimal + (bit * (2 ** (7-i)))
Một khi chúng ta biết giá trị thập phân, rất dễ dàng để tính giá trị điện áp. Chúng ta chỉ cần nhân nó với 19,63. Bởi vì đối với 5VADC 8 bit, mỗi bit tương đương với 19,3 mili volt. Giá trị điện áp kết quả là giá trị của điện áp đã xuất hiện trên các chân Vin + và Vin- của IC ADC0804.
# tính toán giá trị điện áp Điện áp = thập phân * 19,63 * 0,001 # đơn vị một là 19,3mV
Sử dụng giá trị của điện áp, chúng tôi có thể xác định cảm biến flex đã bị uốn cong như thế nào và nó đã bị uốn cong theo hướng nào. Trong các dòng dưới đây, tôi vừa so sánh các giá trị điện áp đọc được với các giá trị xác định trước của điện áp để chỉ ra vị trí của cảm biến Flex trên màn hình LCD.
# so sánh điện áp và trạng thái hiển thị của cảm biến mylcd.setCursor (1,1) if (Điện áp> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") khác: mylcd.Print ("Ổn định")
Tương tự, bạn có thể sử dụng giá trị điện áp để thực hiện bất kỳ tác vụ nào mà bạn muốn Raspberry Pi thực hiện.
Hiển thị giá trị Cảm biến Flex trên màn hình LCD bằng Raspberry Pi:
Công việc của dự án rất đơn giản. Nhưng hãy đảm bảo rằng bạn đã tải xuống tệp tiêu đề lcd.py và đã đặt nó trong cùng một thư mục nơi chương trình hiện tại của bạn hiện diện. Sau đó, tạo các kết nối được hiển thị trong sơ đồ mạch bằng cách sử dụng breadboard hoặc perf board và chạy chương trình bên dưới trên Pi của bạn và bạn sẽ bắt đầu hoạt động. Bạn thiết lập sẽ trông giống như thế này bên dưới.
Như hình minh họa, màn hình LCD sẽ hiển thị giá trị Thập phân, giá trị điện áp và vị trí cảm biến. Chỉ cần uốn cong cảm biến về phía trước hoặc phía sau và bạn sẽ có thể thấy điện áp và giá trị thập phân thay đổi, đồng thời một văn bản trạng thái sẽ được hiển thị. Bạn có thể kết nối bất kỳ cảm biến nào và nhận thấy Điện áp trên nó đang thay đổi.
Hoạt động hoàn chỉnh của hướng dẫn có thể được tìm thấy tại video dưới đây. Hy vọng bạn hiểu dự án và thích xây dựng một cái gì đó tương tự. Nếu bạn có bất kỳ nghi ngờ nào, hãy để lại chúng trong phần bình luận hoặc trên diễn đàn và tôi sẽ cố gắng hết sức để trả lời chúng.