- ADC0804 và Raspberry Pi:
- Cảm biến nhiệt độ LM35:
- Các thành phần bắt buộc:
- Giải thích mạch và làm việc:
- Giải thích lập trình:
Chúng tôi hầu như đã đề cập đến tất cả các Thành phần cơ bản giao tiếp với Raspberry Pi trong Series Hướng dẫn về Raspberry Pi của chúng tôi. Chúng tôi đã trình bày tất cả các Hướng dẫn một cách đơn giản và chi tiết, để bất kỳ ai, dù đã làm việc với Raspberry Pi hay chưa, đều có thể học hỏi từ Series này một cách dễ dàng. Và sau khi xem qua tất cả các hướng dẫn, bạn sẽ có thể xây dựng một số dự án Cấp cao bằng Raspberry Pi.
Vì vậy, ở đây chúng tôi đang thiết kế ứng dụng đầu tiên dựa trên các hướng dẫn trước. Ứng dụng cơ bản đầu tiên là Nhiệt độ phòng đọc của Raspberry Pi. Và bạn có thể theo dõi các Bài đọc trên máy tính.
Như đã thảo luận trong các hướng dẫn trước, không có kênh ADC nào được cung cấp nội bộ trong Raspberry Pi. Vì vậy, nếu chúng ta muốn giao tiếp bất kỳ cảm biến tương tự nào, chúng ta cần một bộ chuyển đổi ADC. Và trong một trong các hướng dẫn của chúng tôi, chúng tôi đã kết nối chip ADC0804 với Raspberry Pi để đọc một giá trị tương tự. Vì vậy, hãy xem qua nó trước khi xây dựng Nhiệt kế Nhiệt độ Phòng này.
ADC0804 và Raspberry Pi:
ADC0804 là chip được thiết kế để chuyển đổi tín hiệu tương tự sang dữ liệu số 8 bit. Chip này là một trong những dòng ADC phổ biến. Đó là một đơn vị chuyển đổi 8 bit, vì vậy chúng tôi có các giá trị hoặc từ 0 đến 255 giá trị. Độ phân giải của chip này thay đổi dựa trên điện áp tham chiếu mà chúng tôi chọn, chúng tôi sẽ nói thêm về nó sau. Dưới đây là sơ đồ của ADC0804:
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 cho + 2,5v logic cho 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.
Cảm biến nhiệt độ LM35:
Bây giờ để đọc Nhiệt độ trong phòng, chúng ta cần một cảm biến. Ở đây chúng ta sẽ sử dụng Cảm biến nhiệt độ LM35. Nhiệt độ thường được đo bằng "Centigrade" hoặc "Fahrenheit". Cảm biến “LM35” cung cấp đầu ra theo độ Centigrade.
Như trong hình, LM35 là một thiết bị giống như bóng bán dẫn ba chân. Các chân được đánh số là, PIN1 = Vcc - Nguồn (Kết nối với + 5V)
PIN2 = Tín hiệu hoặc Đầu ra (kết nối với chip ADC)
PIN3 = Ground (Kết nối với đất)
Cảm biến này cung cấp điện áp thay đổi ở đầu ra, dựa trên nhiệt độ. Đối với mỗi độ tăng nhiệt độ +1 độ C sẽ có điện áp cao hơn + 10mV ở chân đầu ra. Vì vậy, nếu nhiệt độ là 0 độ C đầu ra của cảm biến sẽ là 0V, nếu nhiệt độ là 10 độ C đầu ra của cảm biến sẽ là + 100mV, nếu nhiệt độ là 25 độ C thì đầu ra của cảm biến sẽ là + 250mV.
Các thành phần bắt buộc:
Ở đây chúng tôi đang sử dụng Raspberry Pi 2 Model B với Hệ điều hành Raspbian Jessie. Tất cả các yêu cầu cơ bản về Phần cứng và Phần mềm đã được thảo luận trước đó, bạn có thể tra cứu trong phần Giới thiệu Raspberry Pi, ngoài những yêu cầu mà chúng tôi cần:
- Kết nối chân
- Điện trở 1KΩ (17 miếng)
- 10K nồi
- Tụ điện 0,1µF
- Tụ điện 100µF
- Tụ điện 1000µF
- IC ADC0804
- Cảm biến nhiệt độ LM35
- Bảng bánh mì
Giải thích mạch và làm việc:
Các kết nối được thực hiện để Kết nối Raspberry với ADC0804 và LM35, được hiển thị trong sơ đồ mạch bên dưới.
Đầu ra LM35 có nhiều dao động điện áp; vì vậy tụ điện 100uF được sử dụng để làm trơn đầu ra, như thể hiện trong hình.
Bộ ADC luôn có nhiều nhiễu, nhiễu này có thể ảnh hưởng lớn đến hiệu suất, vì vậy chúng tôi sử dụng tụ 0,1uF để lọc nhiễu. Nếu không có điều này sẽ có rất nhiều biến động ở sản lượng.
Chip hoạt động trên xung nhịp dao động RC (Resistor-Capacitor). Như được hiển thị trong sơ đồ mạch , C2 và R20 tạo thành Đồng hồ. Điều quan trọng cần nhớ ở đây là tụ điện C2 có thể được thay đổi thành giá trị thấp hơn để tỷ lệ chuyển đổi ADC cao hơn. Tuy nhiên với tốc độ cao hơn sẽ giảm độ chính xác. Vì vậy, nếu ứng dụng yêu cầu độ chính xác cao hơn, hãy chọn tụ điện có giá trị cao hơn và để tốc độ cao hơn hãy chọn tụ điện có giá trị thấp hơn.
Như đã nói trước đó, LM35 cung cấp + 10mV cho mọi độ phân giải. Nhiệt độ tối đa có thể đo được bằng LM35 là 150 ° C. Vì vậy, chúng tôi sẽ có tối đa 1,5V tại thiết bị đầu cuối đầu ra LM35. Nhưng điện áp tham chiếu mặc định của ADC0804 là + 5V. Vì vậy, nếu chúng tôi sử dụng giá trị tham chiếu đó, độ phân giải của đầu ra sẽ thấp vì chúng tôi sẽ sử dụng tối đa (5 / 1,5) 34% phạm vi đầu ra kỹ thuật số.
May mắn thay, ADC0804 có một chân Vref có thể điều chỉnh được (PIN9) như đã trình bày Sơ đồ chân của nó ở trên. Vì vậy, chúng tôi sẽ đặt Vref của chip là + 2V. Để đặt Vref + 2V, chúng ta cần cung cấp điện áp + 1V (VREF / 2) tại PIN9. Ở đây chúng ta đang sử dụng nồi 10K để điều chỉnh điện áp ở PIN9 thành + 1V. Dùng vôn kế để có hiệu điện thế chính xác.
Trước đây chúng tôi đã sử dụng Cảm biến nhiệt độ LM35 để đọc nhiệt độ phòng với Arduino và với Vi điều khiển AVR. Đồng thời kiểm tra Đo độ ẩm và Nhiệt độ bằng Arduino
Giải thích lập trình:
Sau khi mọi thứ được kết nối theo sơ đồ mạch, chúng ta có thể BẬT PI để viết chương trình trong PYHTON.
Chúng ta sẽ nói về một số lệnh mà chúng ta sẽ sử dụng trong chương trình PYHTON, Chúng tôi sẽ nhập tệp GPIO từ thư viện, chức năng bên dưới cho phép chúng tôi lập trình các chân GPIO của PI. Chúng tôi cũng đang đổi tên “GPIO” thành “IO”, vì vậy trong chương trình bất cứ khi nào chúng tôi muốn đề cập đến các chân GPIO, chúng tôi sẽ sử dụng từ 'IO'.
nhập RPi.GPIO dưới dạng IO
Đôi khi, khi các chân GPIO, mà chúng tôi đang cố gắng sử dụng, có thể đang thực hiện một số chức năng khác. Trong trường hợp đó, chúng tôi sẽ nhận được cảnh báo trong khi thực hiện chương trình. Lệnh dưới đây yêu cầu PI bỏ qua các cảnh báo và tiếp tục với chương trình.
IO.setwarnings (Sai)
Chúng ta có thể tham khảo các chân GPIO của PI, theo số chân trên bo mạch hoặc theo số chức năng của chúng. Giống như 'PIN 29' trên bảng là 'GPIO5'. Vì vậy, chúng tôi nói ở đây hoặc chúng tôi sẽ đại diện cho chốt ở đây bằng '29' hoặc '5'.
IO.setmode (IO.BCM)
Chúng tôi đang đặt 8 chân làm chân đầu vào. Chúng tôi sẽ phát hiện 8 bit dữ liệu ADC bằng các chân này.
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
Trong trường hợp điều kiện trong dấu ngoặc nhọn là true, các câu lệnh bên trong vòng lặp sẽ được thực hiện một lần. Vì vậy, nếu chân GPIO 19 tăng cao, thì các câu lệnh bên trong vòng lặp IF sẽ được thực hiện một lần. Nếu chân GPIO 19 không tăng cao, thì các câu lệnh bên trong vòng lặp IF sẽ không được thực thi.
if (IO.input (19) == True):
Lệnh dưới đây được dùng làm vòng lặp vĩnh viễn, với lệnh này các câu lệnh bên trong vòng lặp này sẽ được thực hiện liên tục.
Trong khi 1:
Giải thích thêm về mã được đưa ra trong Phần mã bên dưới.
Sau khi viết chương trình, đã đến lúc thực thi nó. Trước khi thực thi chương trình, hãy nói những gì đang xảy ra trong mạch dưới dạng Tóm tắt. Cảm biến LM35 đầu tiên phát hiện nhiệt độ phòng và cung cấp điện áp tương tự ở đầu ra của nó. Điện áp biến đổi này đại diện tuyến tính cho nhiệt độ với + 10mV trên ºC. Tín hiệu này được đưa tới chip ADC0804, chip này chuyển giá trị Analog sang giá trị số với 255/200 = 1.275 số đếm trên mỗi10mv hoặc 1.275count cho 1độ. Số lượng này được tính bởi PI GPIO. Chương trình chuyển đổi giá trị đếm thành nhiệt độ và hiển thị trên màn hình. Nhiệt độ điển hình được đọc bởi PI được hiển thị bên dưới, Do đó chúng tôi điều này theo dõi nhiệt độ Raspberry Pi.