pid controller and temperature plot in python
parent
f6f1d09ab4
commit
3cb3e52790
@ -0,0 +1,61 @@
|
||||
# python_live_plot.py
|
||||
|
||||
import time
|
||||
from simple_pid import PID
|
||||
from itertools import count
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.animation import FuncAnimation
|
||||
|
||||
import minimalmodbus
|
||||
|
||||
tempSens = minimalmodbus.Instrument('/dev/ttyUSB1', 1)
|
||||
tempSens.serial.baudrate = 38400
|
||||
|
||||
OutputDriver = minimalmodbus.Instrument('/dev/ttyUSB1', 2)
|
||||
OutputDriver.serial.baudrate = 38400
|
||||
|
||||
pid = PID(1, 0.01, 0, setpoint=60)
|
||||
|
||||
plt.style.use('fivethirtyeight')
|
||||
|
||||
x_values = []
|
||||
y_values = []
|
||||
|
||||
index = count()
|
||||
|
||||
|
||||
def animate(i):
|
||||
try:
|
||||
temp = tempSens.read_float(1)
|
||||
y_values.append(temp)
|
||||
x_values.append(next(index))
|
||||
|
||||
print(temp, end='\t')
|
||||
control = pid(temp)
|
||||
if(control>100):
|
||||
control = 100;
|
||||
control = (control/1000.0)
|
||||
print(control, end='\t')
|
||||
print(0.1-control)
|
||||
|
||||
if(control > 0):
|
||||
OutputDriver.write_bit(0, 1, functioncode=15)
|
||||
|
||||
time.sleep(control)
|
||||
|
||||
if(control<0.1):
|
||||
OutputDriver.write_bit(0, 0, functioncode=15)
|
||||
|
||||
time.sleep(0.1-control)
|
||||
|
||||
plt.cla()
|
||||
plt.scatter(x_values, y_values)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
ani = FuncAnimation(plt.gcf(), animate, 2000)
|
||||
|
||||
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
Loading…
Reference in New Issue