코인 자동매매 일지
[2021-11-14] 업비트 코인 자동매매 #11
코코코인
2021. 11. 14. 20:09
728x90
[총 보유자산]
110만~114만
[기타]
15일 03시~06시 사이에 업비트 서버 점검이 있다고 합니다.
(https://upbit.com/service_center/notice?id=2261)
제가 내일 일찍나가야되서 새벽3시까지는 못버틸거같네요,,
코인은 그대로 냅두고 잠시 프로그램을 종료하겠습니다, 내일 아침에 다시 키도록 하겠습니다.
[변경사항]
라즈베리파이에 쿨러로 온도조절 기능을 추가함.
선이 부족해서 3개의 라즈베리파이 중 1개에만 추가하였고, 선은 디바이스마트에서 주문시켰음.
목표 온도를 40도로 맞춰놓고 테스트해보았음.
import time
import threading
import statistics
import RPi.GPIO as GPIO
# 코드 참고는 https://blog.naver.com/chandong83/221084688966 여기서 했습니다. #
tempPATH = "/sys/class/thermal/thermal_zone0/temp"
tempList = list()
targetTemp = 40
timerSec = 0.5
threadStopFlag = False
### pin info ###
STOP = 0
FORWARD = 1
BACKWORD = 2
# motor channel
CH1 = 0
# PIN INPUT OUTPUT
OUTPUT = 1
INPUT = 0
# PIN HIGH LOW
HIGH = 1
LOW = 0
#PWM PIN
ENA = 26
#GPIO PIN
IN1 = 19
IN2 = 13
# Contral Value ##
PID_P = 50
PID_D= 35
dt = 0.5 # 0.5 sec
prev_error = 0
#PWM PIN
pwmA = None
def setPinConfig(EN, INA, INB):
GPIO.setup(EN, GPIO.OUT)
GPIO.setup(INA, GPIO.OUT)
GPIO.setup(INB, GPIO.OUT)
pwm = GPIO.PWM(EN, 1)
pwm.start(0)
return pwm
def setMotorControl(pwm, INA, INB, speed, stat):
if stat == FORWARD :
GPIO.output(INA, HIGH)
GPIO.output(INB, LOW )
elif stat == BACKWORD:
GPIO.output(INA, LOW)
GPIO.output(INB, HIGH)
elif stat == STOP :
GPIO.output(INA, LOW)
GPIO.output(INB, LOW)
pwm.ChangeDutyCycle(speed)
def SetPrevErr(err):
prev_error = err
def GetPrevErr():
return prev_error
def GetTemperature():
f = open(tempPATH);
line = f.readline()
f.close()
return float(line) * 0.001
def thread_run():
threading.Timer(timerSec, Run).start()
def Run():
if not threadStopFlag :
temp = GetTemperature()
#print(f"{temp} {type(temp)}")
if len(tempList) < 5:
tempList.append(temp)
else :
avgTemp = statistics.mean(tempList)
Control(round( avgTemp , 2 ))
#print(f"{avgTemp} {len(tempList)}")
tempList.pop(0)
thread_run()
def Control(temp):
#print(temp)
error = targetTemp - temp
D_error = (error - GetPrevErr() )/dt
SetPrevErr(error)
control = (PID_P*error) + (PID_D*D_error)
control = abs(control)
if temp < targetTemp :
control = 0
if control > 100 :
control = 100
setMotorControl(pwmA, IN1, IN2, control, FORWARD)
#print(f"Temperature:{temp:.2f}")
if __name__ == '__main__':
try:
GPIO.setmode(GPIO.BCM)
pwmA = setPinConfig(ENA, IN1, IN2)
thread_run()
while True:
time.sleep(10000)
except KeyboardInterrupt:
setMotorControl(pwmA, IN1, IN2, 0 , STOP )
GPIO.cleanup()
threadStopFlag = True
print("STOP PWM")