Я абсолютный новичок в мире Raspberry Pi и python, и в настоящее время я застрял, когда хочу в течение определенного времени управлять шаговым двигателем, одновременно считывая значение масштаба и сохраняя значение в .csv.
Справочная информация: Таким образом, шаговый двигатель в основном управляется малиновым пи и соединен с мини-конвейером, который транспортирует песок / почву в масштабе. Весы также интегрированы в малину. Я хотел бы откалибровать конвейер, подавая почву в течение определенного периода времени при различных скоростях подачи (например, при 0,2 г / мин в течение 24 часов). Следовательно, было бы удивительно, если бы я мог позволить фидеру работать, например, в течение 24 часов, и каждые 10 минут записывать значение шкалы в CSV.
Состояние сейчас :
- Я могу управлять шаговым двигателем в течение периода времени x (один сценарий)
- Я могу считать весы и сохранить их в CSV. (один сценарий)
Однако, когда я пытаюсь объединить эти два сценария, я терплю неудачу, и это разочаровывает.
Сбой: Любой шаговый двигатель работает вечно, и никакие данные не регистрируются. GUI просто не запускается, потому что регистрация данных мешает
Я использую GUI от Tk, и в будущем я планирую интегрировать «поле», где я могу ввести количество точек данных / интервал, которые я хотел бы иметь. Я думаю, что проблема заключается в интеграции l oop регистрации данных в l oop шагового двигателя, но, если честно, я очень застрял.
Вот код, с которым я работаю далеко, извините, если это грязно, но, как я уже сказал, я новичок в этом мире:
import RPi.GPIO as GPIO
import time
import serial
import csv
Motorpin = 12
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(Motorpin, GPIO.OUT)
from time import sleep
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 19200,
parity = serial.PARITY_EVEN,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.SEVENBITS,
timeout = None
)
try:
# This is for python 2 users
from Tkinter import *
except ImportError:
# This is for python 3 users
from tkinter import *
# generate a window from Tk
window = Tk()
# set the window title and size
window.title("mini Soil proj")
# window.geometry('350x200')
# generate a number of windows
RowofValues = ["CurrentFeed", "SetFeed", "Frequency", "Time", "Intervall"]
RowofUnits = ["rpm", "rpm", "Hertz", "sec", "unit"]
# generate labels for rpm denotation
for index in range(0, len(RowofValues)):
Label(text=RowofValues[index], relief=RIDGE, width=15).grid(row=index, column=0)
Label(text=RowofUnits[index], relief=RIDGE, width=5, anchor="w").grid(row=index, column=2)
# Generate the entries <-- ENTER MANUAL DATA
CurrentFeed = Label(relief=SUNKEN, width=10, anchor="e")
CurrentFeed.grid(row=0, column=1)
SetFeed = Entry(relief=SUNKEN, width=10, justify="right")
SetFeed.grid(row=1, column=1)
PulsesPerSecond = Label(relief=SUNKEN, width=10, anchor="e")
PulsesPerSecond.grid(row=2, column=1)
SetTime = Entry(relief=SUNKEN, width=10, justify="right")
SetTime.grid(row=3, column=1)
###actual feeder function
def SettingFeed():
FeedSpeed = float(SetFeed.get())
CurrentFeed.config(text=FeedSpeed)
# calculate the pulses per second necessary
PulsesPerMinute = FeedSpeed * 200 * 8
ppsValue = int(PulsesPerMinute / 60)
PulsesPerSecond.config(text=ppsValue)
#
PinOutPut = GPIO.PWM(Motorpin, ppsValue)
PinOutPut.start(50)
for x in range(int(SetTime.get())/10): #i tried that with just values but then the stepper is running in infinite mode
weight = ser.readline()
with open("scale_data_mod.csv","a") as f:
writer = csv.writer(f,delimiter=",")
writer.writerow([time.time(),weight])
sleep(int(SetTime.get()))
# generate button for setting the speed, # I have also no idea why this Button has to be below the function, its working but i dunno why
Button(text="SetFeed", width=15, command=SettingFeed).grid(row=1, column=3)
#window.mainloop()
# this calls the window in a loop
window.mainloop()```
Если бы кто-то мог взглянуть и дать мне совет, я был бы очень благодарен!
Спасибо !!!!
Best, Wecanczki