Hallo und erstmal Frohes Neues!
Ich habe für mein Projekt eine Akkuüberwachung programmiert und verdrahtet.
Ich benutze einen MCP 3008 und lese mithilfe eines Spannungsteilers von meinem Modellauto den Akkustand.
Der Akku hat 7,2V(8V) und durch meinen Spannungsteiler kommen max. 3V am Eingang vom A/D Wandler an.
Dies sind meine Scripte die ich geschrieben habe.
Python
#!/usr/bin/python
import spidev
import time
#Define Variables
delay = 1
ldr_channel = 0
#Create SPI
spi = spidev.SpiDev()
spi.open(0, 0)
def readadc(adcnum):
# read SPI data from the MCP3008, 8 channels in total
if adcnum < 0 or adcnum > 8.5:
return 0
r = spi.xfer2([1, 8 + adcnum << 4, 0])
data = ((r[1] & 3) << 8) + r[2]
return data
#while True:
# ldr_value = readadc(ldr_channel)
# print("LDR Value: %d" % ldr_value)
# time.sleep(delay)
Alles anzeigen
Dieses Script liest die Werte des A/D Wandler aus und rechnet sie mir um.
Das letzte erstellt mir eine grafische Oberfläche auf der ich es anzeigen kann.
Python
# Umesser.py
import time
from adccodeFertig import readadc
from tkinter import *
class Pointer:
def __init__(self, canvas):
self.c = canvas
#(Für Linie)self.id = self.c.create_line(x, 100, 250, 200,
#width=4, fill="red")
self.id = self.c.create_rectangle(50, 105, 450, 155, #Rechteck
fill="blue")
def read(self):
self.c.delete(self.id)
x = readadc(0)/1023 * 8,4 * 50 + 50 # Für Akku * 8.4 (V) rechnen. Anstatt 3.3(V)readadc(0)/1023 *
#(Für Linie) self.id = self.c.create_line(x, 100, 250, 200,width=4, fill="red")
self.id = self.c.create_rectangle(x, 105, 50, 155, # Rechteck
fill="blue")
class Device:
def __init__(self):
self.window = Tk()
self.window.title("Batterieüberwachung")
self.canvas = Canvas(master=self.window,
width=500, height=200,
bg = "white")
img = PhotoImage(file="pdtumess.gif")
self.canvas.create_image(0, 0, anchor=NW, image=img)
self.canvas.pack()
for i in range(9):
self.canvas.create_text(50*(i+1), 100,
text=str(i))
self.pointer = Pointer(self.canvas)
self.run()
self.window.mainloop()
def run(self):
self.pointer.read()
self.window.after(50, self.run)
Device()
Alles anzeigen
Das Problem, die grafische Oberfläche flackert permanent und ich finde keinen Fehler. Liegt es vielleicht am A/D Wandler?
MfG Tim