Files
guadaloop_lev_control/sensor/sensorCollector.py

118 lines
3.5 KiB
Python
Raw Normal View History

2025-11-15 13:13:07 -06:00
import serial
import serial.tools.list_ports
import pandas as pd
import os
from pynput import keyboard
from datetime import datetime
from time import sleep
import sys
import numpy as np
#import termios
import tkinter as tk
# COMPORT = "/dev/cu.usbmodem11301"
COMPORT = "COM9"
SAMPLES = 100
SENSOR = 2 #0 is taped sensor, 1 is non-taped sensor. s
# print([port.device for port in serial.tools.list_ports.comports()])
arduino = serial.Serial()
class App:
def map(self, analog, sensor):
#0 is taped, 1 is nontaped
A = -8.976076325826309
K = 913.5463710698101
B = 0.29767471011439534
C = 5.6686184386250025
v = 0.3627635461289861
if (sensor == 1):
A = -4.831976283950702
K = 885.9877001844566
B = 0.2793284618109283
C = 3.8852507844119217
v = 0.2389935455347361
if (sensor == 2):
A = -9.824360913609562
K = 871.4744633266955
B = 0.2909366235093304
C = 4.3307594408159495
v = 0.2822807132259202
if (sensor == 3):
A = -13.891292062248292
K = 990.6819962477331
B = 0.16376045588859353
C = -0.074904004740735
v = 0.17727132893449118
#IMPORTANT: FOR SENSOR 3, INDUCTION SENSOR OUTPUTS VOLTAGE > 6 v
#SO WE USED NEW VOLTAGE DIVIDER: 220 OHMS, 550 OHMS
y = float(analog)
#print(y)
real = C - (1.0 / B) * np.log((( (K - A) / (y - A) ) ** v) - 1.0)
return real
def __init__(self):
self.running = True
self.paused = True
self.collecting = False
self.arduino = serial.Serial(port=COMPORT, baudrate=115200, timeout=5)
def run_machine(self):
with keyboard.Listener(on_press=self.on_press) as listener:
while self.arduino.is_open and self.running:
try:
data = self.arduino.readline().decode(errors='ignore')
except:
print("Triggered Termination")
break
if self.paused:
sleep(0.1)
msg = input("type 'c' to show data, type 'p' to pause, type 'esc' to pause: ").strip()
self.arduino.write(bytes(msg, 'utf-8'))
self.collecting = False
if (msg == 'c'):
self.collecting = True
self.paused = False
elif (msg == 'q'):
self.running = False
sleep(0.5)
elif self.collecting:
try:
data = self.arduino.readline().decode(errors='ignore')
data = data.strip()
print(data)
distance = self.map(data, SENSOR)
print(distance, "mm")
# distance holds sensor values
except KeyboardInterrupt:
print("Triggered Termination")
break
listener.stop()
arduino.close()
return
def on_press(self, key):
try:
if key.char == 'p':
self.paused = True
except:
if key == keyboard.Key.esc:
print("pausing program")
self.pause = True
app = App()
app.run_machine()