Управляйте шаговым двигателем, одновременно считывая и записывая значение шкалы - PullRequest
0 голосов
/ 17 апреля 2020

Я абсолютный новичок в мире 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

...