Chuyển đổi Analog thành Digital
Cũng giống như điều khiển đầu ra của một chân GPIO từ 0 đến 100, cũng có thể đọc các cảm biến có thể cung cấp cho Pi một loạt các giá trị. Nếu muốn biết nhiệt độ của căn phòng, mức độ ánh sáng, hoặc lượng áp suất trên một miếng đệm, có thể sử dụng các cảm biến khác nhau. Trên một vi điều khiển như Arduino, có phần cứng đặc biệt để chuyển đổi mức điện áp analog thành digital. Thật không may, Raspberry Pi không có phần cứng này được tích hợp sẵn.
Để chuyển đổi từ analog sang digital, phần này sẽ trình bày cách sử dụng một bộ ADC, hoặc bộ chuyển đổi analog sang digital. Có một vài mẫu ADC khác nhau, nhưng chương này sẽ sử dụng ADS1x15 của Texas Instruments. Kiểu đóng gói của chip ADS1x15 là quá nhỏ cho breadboard tiêu chuẩn, do đó, Adafruit Industries đã tạo ra một board breakout cho nó, như trong hình dưới. Khi đã hàn các chân cho board, có thể tạo thử nghiệm với chip này trong breadboard. Chip này sử dụng một giao thức có tên Inter-Integrated Circuit (thường được gọi là I2C) để truyền các đầu vào analog. May mắn thay, không cần phải hiểu giao thức để sử dụng nó. Adafruit cung cấp một thư viện Python nguồn mở tuyệt vời để đọc các giá trị từ ADS1115 hoặc phiên bản sau của nó, ADS1015, thông qua I2C.
Để kết nối ADS1115 hoặc ADS1015 với Raspberry Pi, bạn thực hiện:
Nối chân 3.3 volt từ Raspberry Pi với bus (+) của breadboard. Tham khảo Hình 6-2 để biết vị trí chân trên GPIO của Raspberry Pi.
Nối chân đất từ Raspberry Pi với bus (−) của breadboard.
Lắp ADS1x15 vào breadboard và sử dụng dây dẫn để nối chân VDD của nó với bus dương và chân GND của nó vào bus âm.
Nối chân SCL trên ADS1x15 với chân SCL trên Raspberry Pi. Chân SCL trên Pi là chân được nối với chân đất trên GPIO.
Nối chân SDA trên ADS1x15 với chân SDA trên Raspberry Pi. Chân SDA nằm giữa chân SCL và chân 3,3 volt.
Breakout board cho ADC
Board breakout cho bộ chuyển đổi analog – digital ADS1015 từ Adafruit
Bây giờ cần kết nối một cảm biến analog với ADS1x15. Có rất nhiều lựa chọn, nhưng đối với bước này sẽ sử dụng biến trở 2K để đầu vào thay đổi cường độ cho Raspberry Pi. Một biến trở về bản chất là một bộ chiết áp biến thiên, và có thể có dạng xoay hoặc thanh trượt.
Để kết nối một Potentiometer với ADS1x15:
Gắn biến trở vào breadboard.
Nó có ba chân, nối chân giữa đến chân A0 trên ADS1x15.
Một trong các chân bên ngoài phải nối với bus dương của breadboard.
Nối chân còn lại với bus âm của breadboard.
Cách nối dây sẽ giống như trong hình sau:
Sử dụng ADS1x15 để nối một biến trở với Raspberry Pi
Trước khi có thể đọc giá trị biến trở, cần bật I2C và cài đặt một vài thứ (xem hình sau):
Kích hoạt giao diện I2C
Mở công cụ Cấu hình Raspberry Pi bằng cách nhấp vào Menu → Preferences → Raspberry Pi Configuration.
Nhấp vào tab Interfaces.
Tiếp theo I2C, nhấp vào Enable.
Nhấp OK và khởi động lại Raspberry Pi.
Mở cửa sổ Terminal và cập nhật danh sách các gói:
$ sudo apt-get update
Cài đặt các công cụ i2c-tools:
$ sudo apt-get install i2c-tools
Khởi động lại Raspberry Pi.
Sau khi đã khởi động lại Raspberry Pi, hãy kiểm tra xem Raspberry Pi có thể phát hiện ADS1x15 bằng lệnh không:
$ sudo i2cdetect -y 1
Nếu board được nhận diện, sẽ thấy số trong bảng được hiển thị:
Thiết bị đã được kết nối và được nhận ra bởi Pi, đã đến lúc bắt đầu đọc biến trở. Để làm như vậy, tải thư viện Raspberry Pi Python từ kho lưu trữ code của Adafruit vào thư mục chính. Gõ lệnh sau tại dấu nhắc shell, tất cả trên một dòng không có dấu cách trong URL:
wget https://github.com/adafruit/Adafruit_Python_ADS1x15/archive/master.zip
Giải nén nó:
$ unzip master.zip
Chuyển đến thư mục ADS1x15 của thư viện:
$ cd Adafruit_Python_ADS1x15-master/
Cài đặt thư viện:
$ sudo python setup.py install/
Chạy một trong các file ví dụ:
$ python examples/simpletest.py
Xoay biến trở theo một hướng và ngược lại. Lưu ý các giá trị trong cột chân 0 thay đổi:
Nhấn Ctrl-C để chấm dứt file script.
Xoay số trên bộ xoay thay đổi điện áp vào chân 0 của ADS1x15. Code trong ví dụ này thực hiện một chút toán để xác định giá trị điện áp từ dữ liệu của ADC. Tất nhiên, giá trị tính toán sẽ khác nhau tùy thuộc vào loại cảm biến sử dụng.
Bạn có thể xem bên trong script mẫu đó để xem nó hoạt động như thế nào, hoặc thử ví dụ đơn giản hơn sau đây để tìm hiểu cách lấy các file đọc từ ADC. Tạo một file mới với code từ Ví dụ sau và thực thi nó.
Ví dụ: Viết code để đọc ADC
(1) Nhập thư viện ADS1x15 của Adafruit.
(2) Tạo một đối tượng ADS1x15 mới gọi là adc.
(3) Nhận được file đọc từ chân A0 trên ADS1x15 và lưu nó trong result.
Khi chạy code này, nó sẽ xuất ra các số nguyên cho mỗi lần đọc hai lần/giây. Xoay biến trở sẽ làm cho các giá trị tăng lên hoặc giảm xuống.
Khi đã thiết lập xong, thư viện Adafruit ADS1x15 thực hiện tất cả công việc khó khăn và giúp dễ dàng sử dụng cảm biến analog trong các dự án.