PIC Vietnam

Go Back   PIC Vietnam > Các Đề Tài > PIC và Robot trên nền Ubuntu

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC và Robot trên nền Ubuntu Đây là một chủ trương mới mà chúng ta cần chú ý.

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 15-09-2015, 02:36 AM   #2
ttai
Đệ tử 1 túi
 
Tham gia ngày: Dec 2005
Bài gửi: 12
:
5. Để giao tiếp với cổng com, có thể dùng cutecom, hoặc chính bản thân terminal. Nếu dùng cutecom thì cũng tương tự với các chương trình khác. Ví dụ với terminal thôi:

Code:
#Thiết lập com /dev/ttyUSB0 với baudrate cần thiết, 
stty -F /dev/ttyUSB0 speed 115200 raw #raw tức là hiển thị tất cả, không dấu thứ gì

#Dùng lệnh cat để đưa chuỗi nhận được ra stdout (tức là màn hình terminal)
cat /dev/ttyUSB0

#Nếu muốn có thể cho chuỗi này vào một file định sẵn
cat /dev/ttyUSB0 > filename.txt
Với dữ liệu nhận được, để vẽ đồ thị theo thời gian thực thì cũng đơn giản với linux. Hãy dùng python. Trước đây mình dùng matplotlib nhưng cảm thấy matplotlib châm, không đáp ứng được yêu cầu thời gian thực, nên mình dùng thư viện pyqtgraph, download ở đây pyqtgraph.org

Code python:
Code:
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import serial
import numpy as np
ser=serial.Serial('/dev/ttyUSB1',115200)

win=pg.GraphicsWindow()
win.setWindowTitle('DC motor speed display using PyQtGraph')

p1=win.addPlot()
p2=win.addPlot()
data1=[]
curve1=p1.plot(data1,pen=(255,255,0),name='Speed (RPM)')
curve2=p2.plot(data1,pen=(0,255,255))
ptr1=0
def update():
	global data1, curve1, ptr1
	speed=float(ser.readline())
	data1.append(speed)
	ptr1+=1
	curve1.setData(data1)
	curve2.setData(data1)
	curve2.setPos(ptr1,0)
	if ptr1>50:
		del data1[0]

timer=pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
Trong code python này mình dùng 2 plot để thử vẽ 2 đồ thị cùng một lúc, tuy nhiên luồng data thì chỉ có 1, chưa có thời gian làm nữa. Các bạn thử xem. Do chỉ có một luồng data cần vẽ biểu đồ nên khi gửi lên python không cần xử lý chuỗi nữa. Nếu có cần xử lý chuỗi trên python cũng không có gì phức tạp.

Đây là đồ thị thời gian thực, đáp ứng rất nhanh theo thực tế ở mạch điều khiển. Code python trên nếu chiu khó tinh chỉnh sẽ cho ra đồ thị đẹp và chuyên nghiệp hơn. Nếu muốn đẹp hơn nữa thì matplotlib, nhưng matplotlib khá chậm, không đáp ứng được yêu cầu thời gian thực.

ttai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:39 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam