- Làm thế nào nó hoạt động
- Các thành phần bắt buộc
- Sơ đồ
- Mã Osclloscope Arduino
- Tập lệnh Python (Plotter)
- Mã Arduino
- Máy hiện sóng Arduino đang hoạt động
Oscilloscope là một trong những công cụ quan trọng nhất mà bạn sẽ tìm thấy trên bàn làm việc của bất kỳ kỹ sư hoặc nhà sản xuất điện tử nào. Nó chủ yếu được sử dụng để xem dạng sóng và xác định mức điện áp, tần số, tiếng ồn và các thông số khác của tín hiệu được áp dụng tại đầu vào của nó có thể thay đổi theo thời gian. Nó cũng được sử dụng bởi các nhà phát triển phần mềm nhúng để gỡ lỗi mã và kỹ thuật viên để khắc phục sự cố các thiết bị điện tử trong quá trình sửa chữa. Những lý do này làm cho máy hiện sóng trở thành một công cụ phải có đối với bất kỳ kỹ sư nào. Vấn đề duy nhất là chúng có thể rất đắt tiền, Máy hiện sóng thực hiện các chức năng cơ bản nhất với độ chính xác thấp nhất có thể đắt từ 45 đến 100 đô la trong khi loại cao cấp hơn và hiệu quả hơn có giá trên 150 đô la. Hôm nay tôi sẽ trình bày cách sử dụng Arduinovà một phần mềm, sẽ được phát triển bằng ngôn ngữ lập trình yêu thích của tôi là Python, để xây dựng một máy hiện sóng Arduino 4 kênh chi phí thấp có khả năng thực hiện các tác vụ mà một số máy hiện sóng giá rẻ được triển khai như hiển thị dạng sóng và xác định mức điện áp cho các tín hiệu.
Làm thế nào nó hoạt động
Có hai phần cho dự án này;
- Công cụ chuyển đổi dữ liệu
- Người vẽ đồ thị
Máy hiện sóng thường liên quan đến việc biểu diễn trực quan tín hiệu tương tự được áp dụng cho kênh đầu vào của nó. Để đạt được điều này, trước tiên chúng ta cần chuyển đổi tín hiệu từ tín hiệu tương tự sang kỹ thuật số và sau đó vẽ biểu đồ dữ liệu. Để chuyển đổi, chúng tôi sẽ tận dụng ADC (Bộ chuyển đổi tương tự sang kỹ thuật số) trên vi điều khiển atmega328p được Arduino sử dụng để chuyển đổi dữ liệu Analog ở đầu vào tín hiệu thành tín hiệu kỹ thuật số. Sau khi chuyển đổi, giá trị mỗi lần được gửi qua UART từ Arduino đến PC, nơi phần mềm vẽ đồ thị sẽ được phát triển bằng python sẽ chuyển đổi luồng dữ liệu đến thành dạng sóng bằng cách vẽ từng dữ liệu theo thời gian.
Các thành phần bắt buộc
Các thành phần sau được yêu cầu để xây dựng dự án này;
- Arduino Uno (Có thể sử dụng bất kỳ bo mạch nào khác)
- Breadboard
- Điện trở 10k (1)
- LDR (1)
- Dây nhảy
Phần mềm bắt buộc
- Arduino IDE
- Python
- Thư viện Python: Pyserial, Matplotlib, Drawnow
Sơ đồ
Sơ đồ cho Máy hiện sóng Arduino rất đơn giản. Tất cả những gì chúng ta cần làm là kết nối tín hiệu cần kiểm tra với chân Analog được chỉ định của Arduino. Tuy nhiên, chúng tôi sẽ sử dụng LDR trong một thiết lập bộ chia điện áp đơn giản để tạo ra tín hiệu cần kiểm tra, sao cho dạng sóng được tạo ra sẽ mô tả mức điện áp, dựa trên cường độ ánh sáng xung quanh LDR.
Kết nối các thành phần như thể hiện trong sơ đồ dưới đây;
Sau khi kết nối, thiết lập sẽ giống như hình dưới đây.
Với tất cả các kết nối được thực hiện, chúng ta có thể tiến hành viết mã.
Mã Osclloscope Arduino
Chúng tôi sẽ viết mã cho mỗi phần trong số hai phần. Đối với Plotter như đã đề cập trước đó, chúng tôi sẽ viết một script python chấp nhận dữ liệu từ Arduino qua UART và Plots, trong khi đối với bộ chuyển đổi, chúng tôi sẽ viết một bản phác thảo Arduino lấy dữ liệu từ ADC và chuyển đổi nó thành mức điện áp được gửi đến máy vẽ.
Tập lệnh Python (Plotter)
Vì mã python phức tạp hơn, chúng tôi sẽ bắt đầu với nó.
Chúng tôi sẽ sử dụng một số thư viện bao gồm; drawnow, Matplotlib và Pyserial với tập lệnh python như đã đề cập trước đó. Pyserial cho phép chúng tôi tạo một tập lệnh python có thể giao tiếp qua cổng nối tiếp, Matplotlib cung cấp cho chúng tôi khả năng tạo các lô từ dữ liệu nhận được qua cổng nối tiếp và drawnow cung cấp một phương tiện để chúng tôi cập nhật cốt truyện trong thời gian thực.
Có một số cách để cài đặt các gói này trên PC của bạn, đơn giản nhất là thông qua pip . Pip có thể được cài đặt thông qua dòng lệnh trên máy tính windows hoặc linux. PIP được đóng gói với python3 vì vậy tôi sẽ khuyên bạn cài đặt python3 và chọn hộp về việc thêm python vào đường dẫn. Nếu bạn gặp sự cố với việc cài đặt pip, hãy xem trang web chính thức của python này để biết các mẹo.
Với việc cài đặt pip, bây giờ chúng ta có thể cài đặt các thư viện khác mà chúng ta cần.
Mở dấu nhắc lệnh cho người dùng windows, thiết bị đầu cuối cho người dùng linux và nhập như sau;
pip cài đặt pyserial
Với việc này được thực hiện, hãy cài đặt matplotlib bằng cách sử dụng;
pip cài đặt matplotlib
Drawnow đôi khi được cài đặt cùng với matplotlib nhưng để chắc chắn, hãy chạy;
pip cài đặt drawnow
Với quá trình cài đặt hoàn tất, bây giờ chúng ta đã sẵn sàng để viết tập lệnh python.
Tập lệnh python cho dự án này tương tự như tập lệnh tôi đã viết cho Máy hiện sóng dựa trên Raspberry Pi.
Chúng tôi bắt đầu bằng cách nhập tất cả các thư viện cần thiết cho mã;
import time import matplotlib.pyplot as plt from drawnow import * import pyserial
Tiếp theo, chúng tôi tạo và khởi tạo các biến sẽ được sử dụng trong quá trình mã. Mảng val sẽ được sử dụng để lưu trữ dữ liệu nhận được từ cổng nối tiếp và cnt sẽ được sử dụng để đếm. Dữ liệu tại vị trí 0 sẽ bị xóa sau mỗi 50 lần đếm dữ liệu. Điều này được thực hiện để giữ cho dữ liệu được hiển thị trên máy hiện sóng.
val = cnt = 0
Tiếp theo, chúng tôi tạo đối tượng cổng nối tiếp mà qua đó Arduino sẽ giao tiếp với tập lệnh python của chúng tôi. Đảm bảo cổng com được chỉ định bên dưới là cùng một cổng com mà qua đó bo mạch Arduino của bạn giao tiếp với IDE. Tốc độ truyền 115200 được sử dụng ở trên được sử dụng để đảm bảo giao tiếp tốc độ cao với Arduino. Để tránh lỗi, cổng nối tiếp Arduino cũng phải được kích hoạt để giao tiếp với tốc độ truyền này.
port = serial.Serial ('COM4', 115200, thời gian chờ = 0.5)
Tiếp theo, chúng tôi làm cho cốt truyện tương tác bằng cách sử dụng;
plt.ion ()
chúng ta cần tạo một hàm để tạo biểu đồ từ dữ liệu nhận được, tạo ra giới hạn trên và tối thiểu mà chúng ta đang mong đợi, trong trường hợp này là 1023 dựa trên độ phân giải ADC của Arduino. Chúng tôi cũng đặt tiêu đề, gắn nhãn cho từng trục và thêm chú giải để dễ dàng xác định cốt truyện.
#create hàm figure def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Kênh 0 ') plt.legend (loc =' phía dưới bên phải ')
Với việc này, chúng ta đã sẵn sàng để viết vòng lặp chính lấy dữ liệu từ cổng nối tiếp khi có sẵn và vẽ sơ đồ. Để đồng bộ hóa với Arduino, dữ liệu bắt tay được gửi đến Arduino bằng tập lệnh python để cho biết sự sẵn sàng đọc dữ liệu của nó. Khi Arduino nhận được dữ liệu bắt tay, nó sẽ trả lời bằng dữ liệu từ ADC. Nếu không có sự bắt tay này, chúng tôi sẽ không thể vẽ dữ liệu theo thời gian thực.
while (True): port.write (b's ') #handshake với Arduino if (port.inWaiting ()): # if arduino replies value = port.readline () # đọc trả lời print (value) #print để chúng ta có thể monitor it number = int (value) #convert dữ liệu đã nhận thành số nguyên in ('Kênh 0: {0}'. format (number)) # Ngủ trong nửa giây. time.sleep (0,01) val.append (int (number)) drawnow (makeFig) # cập nhật âm mưu phản ánh dữ liệu mới nhập plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # giữ cho âm mưu luôn mới bằng cách xóa dữ liệu ở vị trí 0
Các mã python hoàn chỉnh cho dao động Arduino được đưa ra ở cuối bài viết này trình bày dưới đây.
Mã Arduino
Đoạn mã thứ hai là bản phác thảo Arduino để lấy dữ liệu đại diện cho tín hiệu từ ADC, sau đó chờ nhận tín hiệu bắt tay từ phần mềm vẽ đồ thị. Ngay sau khi nhận được tín hiệu bắt tay, nó sẽ gửi dữ liệu thu được đến phần mềm máy vẽ thông qua UART.
Chúng ta bắt đầu bằng cách khai báo chân của chân Analog của Arduino mà tín hiệu sẽ được áp dụng.
int sensorpin = A0;
Tiếp theo, chúng tôi khởi tạo và bắt đầu giao tiếp nối tiếp với tốc độ truyền là 115200
void setup () { // khởi tạo giao tiếp nối tiếp với tốc độ 115200 bit mỗi giây để khớp với giao tiếp của tập lệnh python: Serial.begin (115200); }
Cuối cùng, hàm voidloop () xử lý việc đọc dữ liệu và gửi dữ liệu qua nối tiếp đến máy vẽ.
void loop () { // đọc đầu vào trên chân analog 0: float sensorValue = analogRead (sensorpin); dữ liệu byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); chậm trễ (10); // trì hoãn giữa các lần đọc để ổn định } }
Mã đầy đủ của Máy hiện sóng Arduino được cung cấp bên dưới cũng như ở cuối bài viết này được hiển thị bên dưới.
int sensorpin = A0; void setup () { // khởi tạo giao tiếp nối tiếp với tốc độ 115200 bit mỗi giây để khớp với giao tiếp của tập lệnh python: Serial.begin (115200); } void loop () { // đọc đầu vào trên chân tương tự 0: ################################### ####################### float sensorValue = analogRead (sensorpin); dữ liệu byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); chậm trễ (10); // trì hoãn giữa các lần đọc để ổn định } }
Máy hiện sóng Arduino đang hoạt động
Tải mã lên thiết lập Arduino và chạy tập lệnh python. Bạn sẽ thấy dữ liệu bắt đầu được truyền vào thông qua dòng lệnh python và biểu đồ thay đổi theo cường độ ánh sáng như trong hình bên dưới.
Vì vậy, đây là cách Arduino có thể được sử dụng làm Máy hiện sóng, nó cũng có thể được thực hiện bằng Raspberry pi, hãy xem hướng dẫn đầy đủ về Máy hiện sóng dựa trên Raspberry Pi.