Sari la conținut
ELFORUM - Forumul electronistilor

Raspberry Pi pentru monitorizare


gabitzu2006

Postări Recomandate

Revin cu ceva noutati: am facut partea cu trafurile si la teste am cam esuat. Zic doar cam, pentru ca pot masura tensiunea pe o ”faza”, chiar pe trei faze, insa tensiunile sunt afisate una sub alta, sau una dupa alta si eu as vrea sa fie afisate toate simultan. Deci, programul care mi-a functionat si care imi afiseaza o singura tensiune sau trei succesiv, este urmatorul:

 

import RPi.GPIO as GPIO
import time

AO_pin = 0 #flame sensor AO connected to ADC chanannel 0
# change these as desired - they're the pins connected from the
# SPI port on the ADC to the Cobbler
SPICLK = 11
SPIMISO = 9
SPIMOSI = 10
SPICS = 8

#port init
def init():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
pass

#read SPI data from MCP3008(or MCP3204) chip,8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 7) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)

GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low

commandout = adcnum
commandout |= 0x18 # start bit + single-ended bit
commandout <<= 3 # we only need to send 5 bits here
for i in range(5):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)

adcout = 0
# read in one empty bit, one null bit and 10 ADC bits
for i in range(12):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1

GPIO.output(cspin, True)

adcout >>= 1 # first bit is 'null' so drop it
return adcout

def main():
init()
time.sleep(2)
print"will detect voltage"
while True:
ad_value = readadc(AO_pin, SPICLK, SPIMOSI, SPIMISO, SPICS)
voltage= ad_value*(3.3/1024)*5
print"***********"
print " Voltage is: " + str("%.2f"%voltage)+"V"
print"***********"
print' '
time.sleep(0.5)




if __name__ =='__main__':
try:
main()
except KeyboardInterrupt:
pass
GPIO.cleanup()

 

 

Am gasit programul asta:

 

# Simple example of reading the MCP3008 analog input channels and printing # them all out. # Author: Tony DiCola # License: Public Domain import time # Import SPI library (for hardware SPI) and MCP3008 library. import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 # Software SPI configuration: CLK = 18 MISO = 23 MOSI = 24 CS = 25 mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) # Hardware SPI configuration: # SPI_PORT = 0 # SPI_DEVICE = 0 # mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) print('Reading MCP3008 values, press Ctrl-C to quit...') # Print nice channel column headers. print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8))) print('-' * 57) # Main program loop. while True: # Read all the ADC channel values in a list. values = [0]*8 for i in range(8): # The read_adc function will get the value of the specified channel (0-7). values = mcp.read_adc(i) # Print the ADC values. print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values)) # Pause for half a second.

time.sleep(0.5)

 

care ar trebui sa-mi afiseze valorile pe toate cele 8 canale simultan (afiseaza adc counts, dar cu o inmultire cred ca il pot face sa afiseze tensiunile). Programul il folosesc cu hardware SPI, nu cu software SPI, asa cum se vede in program (adica am # partea cu soft spi, si un# partea cu hard spi) si imi da eroare, ceva de genul ca nu stie de mcp... am facut tot ce scrie pe site-ul asta : https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008 si tot imi da eroarea. Ma gandeam sa combin cele doua script-uri, dar mi-am prins urechile, din ce observ, sunt abordari diferite. Asadar, rugamintea este: ma poate indruma cineva sa modific unul din scripturi ca sa imi afiseze toate cele trei tensiuni simultan? Multumesc!

L.E. scuze pentru felul cum este prezentat cel de-al doilea script...nu stiu de ce apare asa, nu stiu cum sa-l formatez sa arate ca primul; in editor arata..normal

Editat de gabitzu2006
Link spre comentariu
  • 2 luni mai târziu...
  • Răspunsuri 20
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • gabitzu2006

    17

  • Mircea

    2

  • gauss

    1

  • modoran

    1

Top autori în acest subiect

Imagini postate

am reusit sa fac cel de-al doilea script sa functioneze...nu mergea pentru ca se dezactivase SPI-ul pi-ului (de ce, nu stiu. ciudat e ca eu nu il dezactivasem. e drept ca pi-ul a stat nealimentat mult timp, dar totusi...)

acum...nu stiu cum sa fac sa-mi afiseze valorile pentru tensiune pe fiecare canal. presupun ca trebuie inmultita fiecare valoare de count-uri cu ceva, dar nu stiu unde trebuie introdusa acel ceva (cat este acel ceva, cred ca ma descurc sa aflu).

 

L.E. am reusit si ce am zis mai inainte. iata modificarea>

for i in range(3):
        # The read_adc function will get the value of the specified channel (0-7).
        values = mcp.read_adc(i)
    for i in range(3,8):
        # The read_adc function will get the value of the specified channel (0-7).
        values = mcp.read_adc(i)*1
    # Print the ADC values.
    print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
    # Pause for half a second.
    time.sleep(0.5)

 

se inmulteste la mcp.read cu cat se vrea...   :)

 

 

Editat de gabitzu2006
Link spre comentariu
  • 1 lună mai târziu...

Salutare forumisti!

Revin cu ceva noutati si ceva intrebari. Mi-au sosit senzorii de curent (trafuri de curent) dintr-o tara mult estica. Sunt de tipul SCT013 30A/1V. Acum vin intrebarile. prima ar fi: daca senzorul asta scoate 1 V atunci cand prin cablul din orificiul lui trec 30A, va reusi mcp3008 (convertorul A/D) sa citeasca cu rezolutie buna valoarea curentului? Ma gandesc ca, cumva, ar trebui sa translatez domeniul 0-1V pe care-l da la iesire senzorul, in domeniul 0-3,3V (voi avea aref de 3,3V). Primul lucru la care ma gandesc: amplificatoare operationale. Dar deja se complica lucrurile. mcp3008 vrea doar curent continuu..deci redresarea pentru tensiuni mici (adica mai mult de jumatatea domeniului de iesire al SCT-ului) de la iesirea senzorului este cam..imposibila sau cel putin nefolositoare. Cineva zicea pe un forum strain ca tensiunea data de un senzor din seria asta trebuie redresata neaparat cu full bridge si filtrata cu minim 10uF. Mai zicea ceva si de un oarece offset. Asadar....cum ar trebui sa folosesc acest tip de senzor impreuna cu mcp3008? Multumesc!

 

L.E.  se pare ca e vorba despre redresare fara prag...ce spuneam eu de AO....mai sap.

Editat de gabitzu2006
Link spre comentariu

Excelenta idee! Multumesc!

de fapt...chestia e ca acelasi mcp il folosesc si pentru a citi tensiunile...si deja am facut divizorul...dar il refac...cred ca ies mai bine asa. Asta cu referinta e faina. Dar ce parere ai despre redresarea fara prag? exista si alta solutie? pana acum eu doar asta am gasit....inca mai citesc despre asa ceva

Link spre comentariu
  • 4 luni mai târziu...

salutare!

ma apropii de final (sa zicem) cu proiectul meu. desigur, totul facut pe placute de test. pana la urma, pentru masurarea curentului, am folosit acei senzori de curent (tranformatoare de curent) plus redresor fara prag cu lm324. Mai ramane sa fac un cablaj cu tot montajul si sa fac ”calibrarea”. Rezultatele sunt deocamdata afisate ruland niste scripturi. intentionez ca citirea rezultatelor sa o fac intr-un browser. lucrez la un server apache si o pagina html ce vor rula pe pi. voi posta cand ma voi apropia si mai mult de final. inca nu am facut teste pe chiar generator, sper sa nu am probleme deosebite in rularea testelor !live”

repet, scopul proiectului era doar sa arat ca se poate monitoriza, nu sa controlez functionarea unui generator electric. iaca, se face un an de cand am demarat proiectul  :). daca era sa vand acest proiect, eram falimentar din start . zic asta ca sa nu credeti ca o fac in scop comercial, ci doar ca hobby. bafta tuturor!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări