Initialize piNail project with modern piNail2 web controller
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# Can enable debug output by uncommenting:
|
||||
#import logging
|
||||
#logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
import time
|
||||
|
||||
import Adafruit_GPIO.SPI as SPI
|
||||
import MAX6675.MAX6675 as MAX6675
|
||||
|
||||
from simple_pid import PID
|
||||
kP =100
|
||||
kI = 0
|
||||
kD = .0
|
||||
setpoint = 675
|
||||
temp = -1000
|
||||
output = -1
|
||||
current_milli_time = -1
|
||||
pid = PID(kP, kI, kD, setpoint)
|
||||
loop_size = int(1000)
|
||||
sleep_time = 0.3
|
||||
counter = 0
|
||||
##pid.sample_time = .3 # update every 0.5 seconds
|
||||
pid.proportional_on_measurement = True
|
||||
pid.output_limits = (0, loop_size) # output value will be between 0 and 5000
|
||||
log_directory = "./log_piNail.txt"
|
||||
f = open(log_directory, 'w+') #Create a new log file, overwritting the previous one
|
||||
f.close()
|
||||
|
||||
|
||||
# Raspberry Pi software SPI configuration.
|
||||
CLK = 3
|
||||
CS = 14
|
||||
DO = 4
|
||||
sensor = MAX6675.MAX6675(CLK, CS, DO)
|
||||
|
||||
relayPin = 2
|
||||
|
||||
import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
|
||||
GPIO.setwarnings(False) # Ignore warning for now
|
||||
GPIO.setmode(GPIO.BCM) # Use physical pin numbering
|
||||
GPIO.setup(relayPin, GPIO.OUT, initial=GPIO.LOW) # Set pin 8 to be an output pin and set initial value to low (off)
|
||||
|
||||
# Define a function to convert celsius to fahrenheit.
|
||||
def c_to_f(c):
|
||||
return c * 9.0 / 5.0 + 32.0
|
||||
|
||||
def logToFile(directory):
|
||||
f = open(directory, "a+")
|
||||
f.write("{0:.2f}, {1:.2f}, {2:.2f}, {3}, {4} \n".format(temp, setpoint, output/10, GPIO.input(relayPin) * 50+ 200, current_milli_time))
|
||||
f.close()
|
||||
|
||||
def loadPID_params(directory):
|
||||
PID_values = open(directory, 'r').read()
|
||||
values = PID_values.split("\n")
|
||||
return float(values[0]), float(values[1]), float(values[2]), float(values[3]), int(values[4]), int(values[5]), int(values[6])
|
||||
|
||||
|
||||
print('Press Ctrl-C to quit.')
|
||||
try:
|
||||
while True:
|
||||
kP, kI, kD, sleep_time, loop_size, setpoint, log_resolution = loadPID_params("./P_I_D_values.txt")
|
||||
pid.output_limits = (0, loop_size)
|
||||
pid.setpoint = setpoint
|
||||
pid.tunings = (kP, kI, kD)
|
||||
temp = c_to_f(sensor.readTempC())
|
||||
start_milli_time = int(round(time.time() * 1000))
|
||||
current_milli_time = int(round(time.time() * 1000))
|
||||
current_loop_end = start_milli_time + loop_size
|
||||
|
||||
while current_milli_time < current_loop_end:
|
||||
temp = c_to_f(sensor.readTempC())
|
||||
output = pid(temp)
|
||||
if current_milli_time < start_milli_time + output:
|
||||
GPIO.output(relayPin, GPIO.HIGH)
|
||||
else:
|
||||
GPIO.output(relayPin, GPIO.LOW)
|
||||
current_milli_time = int(round(time.time() * 1000))
|
||||
print("Temp: {0:06.2f}, PWR: {1:07.2f}/{2}, {3}, {4}, {5}, {6}".format(temp, output, loop_size, GPIO.input(relayPin), pid.Kp, pid.Ki, pid.Kd))
|
||||
if counter > log_resolution:
|
||||
logToFile(log_directory)
|
||||
counter = 0
|
||||
else:
|
||||
counter = counter + 1
|
||||
time.sleep(sleep_time)
|
||||
except:
|
||||
GPIO.output(relayPin, GPIO.LOW)
|
||||
print("Exiting properly")
|
||||
Reference in New Issue
Block a user