- Luồng dự án:
- Yêu cầu dự án
- Sơ đồ mạch:
- Cài đặt Phụ thuộc cho Máy hiện sóng Raspberry Pi:
- Mã Python cho Máy hiện sóng Raspberry Pi:
- Máy hiện sóng Raspberry Pi đang hoạt động:
Xin chào các bạn, chào mừng bạn đến với bài viết hôm nay. Một trong những điều hấp dẫn nhất của việc trở thành một nhà sản xuất là biết cách phát triển các công cụ tạm thời, bạn sẽ không bao giờ gặp khó khăn khi làm việc với bất kỳ dự án nào khi bạn có tính linh hoạt đó. Vì vậy, Hôm nay, tôi sẽ chia sẻ cách xây dựng phiên bản tạm thời dựa trên Raspberry Pi của một trong những công cụ quan trọng nhất trong kỹ thuật Điện / Điện tử; Máy hiện sóng.
Máy hiện sóng là một dụng cụ kiểm tra điện tử cho phép hình dung và quan sát các điện áp tín hiệu khác nhau, thường là biểu đồ hai chiều với một hoặc nhiều tín hiệu được vẽ theo thời gian. Dự án hôm nay sẽ tìm cách tái tạo khả năng hiển thị tín hiệu của máy hiện sóng bằng Raspberry Pi và một mô-đun chuyển đổi tương tự sang kỹ thuật số.
Luồng dự án:
Việc tái tạo hình ảnh tín hiệu của máy hiện sóng bằng Raspberry Pi sẽ yêu cầu các bước sau;
1. Thực hiện chuyển đổi Digital sang analog của tín hiệu đầu vào
2. Chuẩn bị dữ liệu kết quả để biểu diễn
3. Vẽ dữ liệu trên biểu đồ thời gian trực tiếp
Một sơ đồ khối đơn giản cho dự án này sẽ giống như sơ đồ bên dưới.
Yêu cầu dự án
Yêu cầu đối với dự án này có thể được phân loại thành hai:
- yêu cầu phần cứng
- Yêu cầu phần mềm
Yêu cầu phần cứng
Để xây dựng dự án này, cần có các thành phần / phần sau;
- Raspberry pi 2 (hoặc bất kỳ kiểu máy nào khác)
- Thẻ SD 8 hoặc 16GB
- Cáp LAN / Ethernet
- Nguồn điện hoặc cáp USB
- ADS1115 ADC
- LDR (Tùy chọn vì nó có nghĩa là để thử nghiệm)
- Điện trở 10k hoặc 1k
- Dây nhảy
- Breadboard
- Theo dõi hoặc bất kỳ cách nào khác để xem Màn hình của pi (bao gồm VNC)
Yêu cầu phần mềm
Yêu cầu phần mềm cho dự án này về cơ bản là các mô-đun python ( matplotlib và drawnow ) sẽ được sử dụng để hiển thị dữ liệu và mô-đun Adafruit để giao tiếp với chip ADS1115 ADC. Tôi sẽ hướng dẫn cách cài đặt các mô-đun này trên Raspberry Pi khi chúng tôi tiếp tục.
Mặc dù hướng dẫn này sẽ hoạt động bất kể hệ điều hành Raspberry pi được sử dụng, tôi sẽ sử dụng Hệ điều hành mở rộng Raspberry Pi và tôi sẽ cho rằng bạn đã quen với việc thiết lập Raspberry Pi với Hệ điều hành mở rộng Raspbian và bạn biết cách SSH vào mâm xôi pi bằng cách sử dụng một phần mềm đầu cuối như putty. Nếu bạn gặp vấn đề với bất kỳ điều nào trong số này, có rất nhiều Hướng dẫn về Raspberry Pi trên trang web này có thể giúp bạn.
Với tất cả các thành phần phần cứng đã có sẵn, hãy tạo sơ đồ và kết nối các thành phần với nhau.
Sơ đồ mạch:
Để chuyển đổi tín hiệu đầu vào tương tự thành tín hiệu kỹ thuật số có thể được hiển thị trực quan bằng Raspberry Pi, chúng tôi sẽ sử dụng chip ADC ADS1115. Con chip này trở nên quan trọng vì Raspberry Pi, không giống như Arduino và hầu hết các bộ điều khiển vi mô, không có bộ chuyển đổi tương tự sang kỹ thuật số (ADC) trên bo mạch. Mặc dù chúng tôi có thể đã sử dụng bất kỳ chip ADC nào tương thích với mâm xôi pi, nhưng tôi thích chip này do độ phân giải cao (16bits) và biểu dữ liệu được ghi chép đầy đủ và hướng dẫn sử dụng của Adafruit. Bạn cũng có thể xem hướng dẫn Raspberry Pi ADC của chúng tôi để tìm hiểu thêm về nó.
ADC là một thiết bị dựa trên I2C và phải được kết nối với Raspberry Pi như thể hiện trong sơ đồ bên dưới.
Để rõ ràng, kết nối chân giữa hai thành phần cũng được mô tả dưới đây.
Kết nối ADS1115 và Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Khi các kết nối đã hoàn tất, hãy tăng sức mạnh cho pi của bạn và tiến hành cài đặt các phần phụ thuộc được đề cập bên dưới.
Cài đặt Phụ thuộc cho Máy hiện sóng Raspberry Pi:
Trước khi bắt đầu viết tập lệnh python để lấy dữ liệu từ ADC và vẽ nó trên biểu đồ trực tiếp, chúng ta cần bật giao diện truyền thông I2C của raspberry pi và cài đặt các yêu cầu phần mềm đã được đề cập trước đó. Điều này sẽ được thực hiện theo các bước dưới đây để dễ dàng làm theo:
Bước 1: Kích hoạt giao diện Raspberry Pi I2C
Để kích hoạt I2C, từ thiết bị đầu cuối, hãy chạy;
sudo raspi-config
Khi bảng cấu hình mở ra, hãy chọn các tùy chọn giao diện, chọn I2C và nhấp vào bật.
Bước 2: Cập nhật Raspberry pi
Điều đầu tiên tôi làm trước khi bắt đầu bất kỳ dự án nào là cập nhật số Pi. Thông qua điều này, tôi chắc chắn rằng mọi thứ trên HĐH đều được cập nhật và tôi sẽ không gặp vấn đề tương thích với bất kỳ phần mềm mới nhất nào mà tôi chọn cài đặt trên Pi. Để thực hiện việc này, hãy chạy hai lệnh dưới đây:
sudo apt-get cập nhật sudo apt-get nâng cấp
Bước 3: Cài đặt thư viện Adafruit ADS1115 cho ADC
Sau khi cập nhật xong, chúng tôi đã sẵn sàng cài đặt các phần phụ thuộc bắt đầu bằng mô-đun python Adafruit cho chip ADS115. Đảm bảo bạn đang ở trong thư mục chính của Raspberry Pi bằng cách chạy;
cd ~
sau đó cài đặt các bản build-cần thiết bằng cách chạy;
sudo apt-get install build-essential python-dev python-smbus git
Tiếp theo, sao chép thư mục Adafruit git cho thư viện bằng cách chạy;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Thay đổi vào thư mục của tệp sao chép và chạy tệp thiết lập;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Sau khi cài đặt, màn hình của bạn sẽ giống như hình dưới đây.
Bước 4: Kiểm tra thư viện và giao tiếp 12C.
Trước khi chúng tôi tiến hành phần còn lại của dự án, điều quan trọng là phải kiểm tra thư viện và đảm bảo ADC có thể giao tiếp với raspberry pi qua I2C. Để làm điều này, chúng tôi sẽ sử dụng một tập lệnh ví dụ đi kèm với thư viện.
Khi vẫn ở trong thư mục Adafruit_Python_ADS1x15, hãy thay đổi thư mục thành thư mục ví dụ bằng cách chạy;
ví dụ cd
Tiếp theo, chạy ví dụ sampletest.py hiển thị giá trị của bốn kênh trên ADC dưới dạng bảng.
Chạy ví dụ bằng cách sử dụng:
python simpletest.py
Nếu mô-đun I2C được kích hoạt và kết nối tốt, bạn sẽ thấy dữ liệu như trong hình dưới đây.
Nếu xảy ra lỗi, hãy kiểm tra để đảm bảo ADC được kết nối tốt với PI và giao tiếp I2C được bật trên Pi.
Bước 5: Cài đặt Matplotlib
Để trực quan hóa dữ liệu, chúng ta cần cài đặt mô-đun matplotlib được sử dụng để vẽ tất cả các loại đồ thị trong python. Điều này có thể được thực hiện bằng cách chạy;
sudo apt-get install python-matplotlib
Bạn sẽ thấy một kết quả như hình dưới đây.
Bước 6: Cài đặt mô-đun python Drawnow
Cuối cùng, chúng ta cần cài đặt mô-đun python drawnow . Mô-đun này giúp chúng tôi cung cấp các bản cập nhật trực tiếp cho biểu đồ dữ liệu.
Chúng tôi sẽ cài đặt drawnow thông qua trình cài đặt gói python; pip , vì vậy chúng ta cần đảm bảo rằng nó đã được cài đặt. Điều này có thể được thực hiện bằng cách chạy;
sudo apt-get install python-pip
Sau đó, chúng ta có thể sử dụng pip để cài đặt gói drawnow bằng cách chạy:
sudo pip cài đặt drawnow
Bạn sẽ nhận được một kết quả như hình dưới đây sau khi chạy nó.
Với tất cả các phụ thuộc đã được cài đặt, bây giờ chúng tôi đã sẵn sàng để viết mã.
Mã Python cho Máy hiện sóng Raspberry Pi:
Mã python cho Pi Oscilloscope này khá đơn giản, đặc biệt nếu bạn đã quen thuộc với mô-đun python matplotlib . Trước khi cho chúng ta xem toàn bộ mã, tôi sẽ cố gắng chia nó thành từng phần và giải thích từng phần của mã đang làm gì để bạn có đủ kiến thức mở rộng mã để thực hiện nhiều thứ hơn.
Ở giai đoạn này, điều quan trọng là phải chuyển sang màn hình hoặc sử dụng trình xem VNC, bất kỳ thứ gì qua đó bạn có thể nhìn thấy màn hình Raspberry Pi của mình, vì biểu đồ được vẽ sẽ không hiển thị trên thiết bị đầu cuối.
Với màn hình làm giao diện mở một tệp python mới. Bạn có thể gọi nó bằng bất kỳ tên nào bạn muốn, nhưng tôi sẽ gọi nó là scope.py.
sudo nano scope.py
Với tệp đã tạo, điều đầu tiên chúng tôi làm là nhập các mô-đun mà chúng tôi sẽ sử dụng;
import time import matplotlib.pyplot as plt from drawnow import * import Adafruit_ADS1x15
Tiếp theo, chúng tôi tạo một phiên bản của thư viện ADS1x15 chỉ định ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Tiếp theo, chúng tôi thiết lập độ lợi của ADC. Có nhiều phạm vi khuếch đại khác nhau và nên được chọn dựa trên điện áp bạn mong đợi ở đầu vào của ADC. Đối với hướng dẫn này, chúng tôi đang ước tính một 0 - 4.09v vì vậy chúng tôi sẽ sử dụng mức tăng 1. Để biết thêm thông tin về mức tăng, bạn có thể kiểm tra biểu dữ liệu ADS1015 / ADS1115.
GAIN = 1
Tiếp theo, chúng ta cần tạo các biến mảng sẽ được sử dụng để lưu trữ dữ liệu được vẽ và một biến khác dùng để đếm.
Val = cnt = 0
Tiếp theo, chúng tôi biết ý định của chúng tôi về việc làm cho cốt truyện được biết đến tương tác để cho phép chúng tôi vẽ dữ liệu trực tiếp.
plt.ion ()
Tiếp theo, chúng tôi bắt đầu chuyển đổi ADC liên tục chỉ định kênh ADC, trong trường hợp này là kênh 0 và chúng tôi cũng chỉ định độ lợi.
Cần lưu ý rằng tất cả bốn kênh ADC trên ADS1115 có thể được đọc cùng một lúc, nhưng 1 kênh là đủ cho phần trình diễn này.
adc.start_adc (0, gain = GAIN)
Tiếp theo, chúng ta tạo một hàm def makeFig , để tạo và thiết lập các thuộc tính của biểu đồ sẽ chứa cốt truyện trực tiếp của chúng ta. Trước hết, chúng tôi đặt giới hạn của trục y bằng cách sử dụng ylim , sau đó chúng tôi nhập tiêu đề của ô và tên nhãn trước khi chúng tôi chỉ định dữ liệu sẽ được vẽ và kiểu và màu của ô bằng cách sử dụng plt.plot (). Chúng tôi cũng có thể xác định kênh (như kênh 0 đã được nêu) để chúng tôi có thể xác định từng tín hiệu khi bốn kênh của ADC đang được sử dụng. plt.legend được sử dụng để chỉ định nơi chúng ta muốn thông tin về tín hiệu đó (ví dụ: Kênh 0) được hiển thị trên hình.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (Đúng) plt.ylabel ('Đầu ra ADC') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'phía dưới bên phải')
Tiếp theo chúng ta viết trong khi vòng lặp sẽ được sử dụng dữ liệu liên tục đọc từ ADC và cập nhật cốt truyện cho phù hợp.
Điều đầu tiên chúng tôi làm là đọc giá trị chuyển đổi ADC
value = adc.get_last_result ()
Tiếp theo, chúng tôi in giá trị trên thiết bị đầu cuối chỉ để cung cấp cho chúng tôi một cách khác để xác nhận dữ liệu được vẽ. Chúng tôi đợi một vài giây sau khi in sau đó chúng tôi nối dữ liệu vào danh sách (val) đã tạo để lưu trữ dữ liệu cho kênh đó.
print ('Kênh 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
Sau đó chúng tôi gọi drawnow để cập nhật cốt truyện.
drawnow (makeFig)
Để đảm bảo dữ liệu mới nhất là dữ liệu có sẵn trên lô đất, chúng tôi xóa dữ liệu ở chỉ mục 0 sau mỗi 50 lần đếm dữ liệu.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Đó là tất cả!
Các mã Python hoàn chỉnh được đưa ra vào cuối của hướng dẫn này.
Máy hiện sóng Raspberry Pi đang hoạt động:
Sao chép mã python hoàn chỉnh và dán vào tệp python mà chúng tôi đã tạo trước đó, hãy nhớ rằng chúng tôi sẽ cần một màn hình để xem cốt truyện vì vậy tất cả điều này phải được thực hiện bởi VNC hoặc với một màn hình hoặc màn hình được kết nối.
Lưu mã và chạy bằng cách sử dụng;
sudo python scope.py
Nếu bạn đã sử dụng một tên khác ngoài scope.py, đừng quên thay đổi tên này để phù hợp.
Sau một vài phút, bạn sẽ thấy dữ liệu ADC được in trên thiết bị đầu cuối. Đôi khi, bạn có thể nhận được cảnh báo từ matplotlib (như thể hiện trong hình ảnh bên dưới), cảnh báo này sẽ bị loại bỏ nhưng nó không ảnh hưởng đến dữ liệu đang được hiển thị hoặc cốt truyện. Tuy nhiên, để loại bỏ cảnh báo, các dòng mã sau có thể được thêm vào sau các dòng nhập trong mã của chúng tôi.
Cảnh báo nhập khẩu nhập cảnh báo matplotlib.cbook.filterwarnings (“bỏ qua”, danh mục = matplotlib.cbook.mplDeprecation)
Đó là nó cho các bạn hướng dẫn này, để kiểm tra đầy đủ máy hiện sóng của bạn, bạn có thể kết nối một thiết bị tương tự như một chiết áp với một kênh trên ADC và bạn sẽ thấy dữ liệu thay đổi theo từng lượt của chiết áp. Hoặc bạn có thể nhập sóng Sine hoặc sóng vuông để kiểm tra đầu ra.
Cảm ơn bạn đã đọc, nếu bạn có bất kỳ câu hỏi hoặc điều gì bạn muốn tôi bổ sung, chỉ cần để lại cho tôi một bình luận.
Cho đến lần sau, hãy tiếp tục làm!