• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
disturbi su gpio input

[Problema] Disturbi su input gpio
#1
Buonasera
Ho collegato un ingresso di un rpi3 ad un contatto pulito di un relè alimentato a 24vdc.
Tutto ciò per creare un semplice logger marcia e arresto su un file.
Ho riscontrato delle false letture sia quando il contatto è aperto sia quando è chiuso.
Ritrovando con un pulsante invece sembra che tutto funzioni a dovere.
Devo usare qualche accorgimento in merito?
A breve posterò il file di lettura dell'ingresso.
Grazie

Inviato dal mio SM-J320FN utilizzando Tapatalk
Risposta
#2
Il motivo è ben spiegato qui
Hai implementato resistenze di pull-up o pull-down? Che libreria usi per il GPIO?
Risposta
#3
Grazie
Ho provato ad inserire una resistenza da 1 kohm tra il pin di input e più 3v ma il risultato non è cambiato.
Poi ho notato false letture anche a circuito aperto.
Esistono in commercio schede di interfaccia per ingressi già "isolate"?

Inviato dal mio SM-J320FN utilizzando Tapatalk
Codice:
import RPi.GPIO as GPIO
import os
import datetime
from datetime import datetime
import time
print("Registrazione Marcia e Arresto.....................")
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

file = open("data_log1.csv", "a") #apri file
if os.stat("data_log1.csv").st_size == 0:#se il file uguale a 0 byte  vuoto quindi scrivi
       file.write("Data,Ora,In Marcia/Fermo \n")#questa riga

ora = datetime.now().strftime("%H:%M:%S")
data = datetime.now().strftime("%d/%m/%y")
marcia = ("In marcia")
fermo = ("Fermo")

while True:
      if GPIO.wait_for_edge(24, GPIO.RISING):
               time.sleep(0.2)
               ora = datetime.now().strftime("%H:%M:%S")
               print("Macchina in marcia",ora)
               file.write(str(data)+","+str(ora)+","+str(marcia)+"\n")
               file.flush()
                       
                       
               
                       
               
      if GPIO.wait_for_edge(24, GPIO.FALLING):
               time.sleep(0.2)
               ora = datetime.now().strftime("%H:%M:%S")
               print("Macchina in arresto",ora)
               file.write(str(data)+","+str(ora)+","+str(fermo)+"\n")
               file.flush()
                       
                       
GPIO.cleanup()
Risposta
#4
Citazione:Hai implementato resistenze di pull-up o pull-down? Che libreria usi per il GPIO?
Risposta
#5
La libreria è RPI. Gpio...
E la resistenza è pull_down

Inviato dal mio SM-J320FN utilizzando Tapatalk

Scusa Zzed ma il codice python RPI. Gpio indica la libreria giusto?

Inviato dal mio SM-J320FN utilizzando Tapatalk
Risposta
#6
si, Rpi.Gpio è una libreria Python per la gestione del GPIO. Io ti consiglierei di utilizzare lòa più moderna Gpio Zero (che si basa sempre su RPI.Gpio, ma è molto più semplice da usare e ha alcune impostazioni automatiche che potrebbero evitare anche quel problema)
Risposta
#7
Ho capito da dove provenivano la maggior parte dei disturbi.. monitor di un portatile con una scheda Cinesisima di interfaccia hdmi... Ho collegato rpi via vnc ad un portatile ed ho quasi vinto.
Dico quasi perché ho ancora delle false letture ogni tanto... Ho integrato la funzione boucetime nel programma ma non è ancora risolutivo...
Penso che passerò ad un relè solidarietà state per leggere questo benedetto ingresso.
Però mi sembra strano che la lettura istantanea di un ingresso possa essere così complicata. ...


Inviato dal mio SM-J320FN utilizzando Tapatalk

Volevo dire solid state

Inviato dal mio SM-J320FN utilizzando Tapatalk
Risposta
#8
In ambienti particolarmente disturbati eletticamente è necessario adottare soluzioni di cablatura un pochino più "spinte": cavi schermati, lunghezza dei vari collegamenti i più corti possibile, masse (ritorno di corrente usualmnte il negativo) assolutamente equipotenziali. Utilizza un fotoaccoppiatore al posto del solid state relay (non è assolutamente necessario non avendo grossi carichi da comandare), elimina le resistenze di pull-up/down (hanno valori di circa 10 Kohms, quindi alta impedenza = disturbi), tra il pin e massa inserisci una resistenza da 1 kohms ( e se necessario ancora più bassa, ricrei quindi un pull-down), tra questo punto e i 3,3 V collega il transistor del fotoaccopiatore ( ai 3,3 V il collettore, al punto di giunzione del pin con la rersistenza l'emittore). Il diodo del fotoaccoppiatore, tramite opportuna resistenza posta in serie (2,2 - 3,3 Kohms) andra collegato ai + 24 V (catodo a massa, anodo tramite la resistenza ai+ 24 V).  Se vi saranno ancora disturbi potrai abbassare la resistenza da 1 Kohms a 470 ohms, ed eventualmente inserire in serie al pin un filtro passa-basso (resistenza  da qualche Kohms  in serie al pin + condensaore da 1000 pF tra pin e massa).
Risposta
#9
Proverò passo passo ciò che hai consigliato.. Grazie. . .. aggiorno comunque il post

Inviato dal mio SM-J320FN utilizzando Tapatalk
Risposta
#10
Ciao
finalmente ho risolto
ho usato come consigliato la libreria gpiozero e un rele solid state ed eliminato la resistenza di pull-down esterna ed utilizzato quella interna.
A banco sembra funzionare bene a breve testerò tutto sulla macchina.
Ringrazio tutti per la collaborazione e consiglio a chi dovesse leggere questi post ed è alle prime esperienze con raspberry di usare la libreria gpiozero in cui molte funzioni sono implementate e semplificate.
Montando il monitor ufficiale rpi ho notato la comparsa di tanto in tanto di un fulmine giallo in alto a destra ed in concomitanza di questo un rallentamento nella lettura.
Uso un alimentatore da 2,5 A e sul rpi c'è collegato solo monitor ufficiale una tastiera un mouse e una chiavetta usb.
probabilmente dovrei cambiare alimentatore e prendere qualcosa di più potente.
Saluti
Risposta
  


Vai al forum:


Navigazione: 4 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect