Skocz do zawartości

Belka tensometryczna, sterownik HX711 i Raspberry Pi


klaudyna

Pomocna odpowiedź

Cześć wszystkim, przychodzę z problemem dotyczącym belki tensometrycznej, ponieważ po podłączeniu całego sprzętu pokazuje  wagę 0. 

 

Posiadam:

-Raspberry Pi 3 Model B

- sterownik HX711 (ten w kolorze zielonym)

- Belka tensometryczna 3kg 

 

Podłączyłam:

- GND do GND

-DT do GPIO5

-SCK do GPIO6

- VCC do 5V

- E+ z czerwonym przewodem od belki tensometrycznej 

- E- z czarnym przewodem od belki tensometrycznej

- A+ z białym przewodem od belki tensometrycznej

- A- z zielonym przewodem od belki tensometrycznej   

Sprawdzałam przepływ prądu  w czarnym i czerwonym kablu od belki tensometrycznej jest ok 4-5V. 

Korzystałam z tego repozytorium git clone  https://github.com/tatobari/hx711py  ale waga pokazuje cały czas 0, niezależnie od tego czy cos jest na wadze czy nie ma.  Wzorowałam się również na tej stronie https://tutorials-raspberrypi.com/digital-raspberry-pi-scale-weight-sensor-hx711/

Oprócz tego korzystałam z innego repozytorium: https://github.com/gandalf15/HX711 ale to wysypuje błędy przy uruchamianiu pliku example.py,   który jest przedstawiony w załączniku. 

 

 

Bardzo proszę o pomoc !  Jeśli ktoś posiada inne repozytorium warte uwagi to byłabym bardzo wdzięczna o podrzucenie. 

 

 

321948480_543938157628138_9012966159997497208_n.jpg

Edytowano przez klaudyna
Link do komentarza
Share on other sites

@klaudyna ale jak masz to podłączone, jeśli belka i sterownik jest na 5 V, a RPi na 3,3 V? Jest tam jakiś konwerter? Podłączanie czegoś na logice 5 V do GPIO 3,3 V często prowadzi do uszkodzenia RPi.

Link do komentarza
Share on other sites

@klaudyna ale Raspberry Pi nie jest na 5 woltów, wejścia RPi działają w standardzie 3,3 V. Tutaj powinien być wstawiony albo konwerter poziomów logicznych, albo całość powinna być zasilana z 3,3 V (najprostsze rozwiązanie). Podanie 5 V napięcia na wejścia może uszkodzić RPi i dzieje się to stosunkowo często. Chyba, że Twój moduł z HX711 posiada odpowiedni konwerter.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Część.

Od niedawna przesiadłem się z programowania w C dla AVR na Micropython dla Raspberry Pi Pico. Próbuję przerabiać moje stare programy z C na Pythona. W nocie katalogowej HX711 (link) jest podany przykład "Reference Driver (C)" który przerobiłem na Micropythona. U mnie program na Raspberry Pi Pico działa. Może zadziała na Raspberry Pi 3.

from machine import Pin
from time import sleep, sleep_us

ADDO = Pin(9, Pin.IN, Pin.PULL_UP) #pin DATA
ADSK = Pin(10, Pin.OUT, Pin.PULL_DOWN) #pin SCK

def ReadWeight(offset):
    Count = 0
    while ADDO.value() == 1:
        continue
    sleep_us(5)
    for i in range(0,24):
        ADSK.high()
        Count = Count << 1
        sleep_us(2)
        ADSK.low()
        if ADDO.value() == 1:
            Count += 1
        sleep_us(1)
    ADSK.high()
    Count = Count ^ 0x800000
    sleep_us(1)
    ADSK.low()
    return (Count//1000 - offset) * 1.15
# number 1000, reduces scale resolution (offset and scale are therefore smaller)
# number offset equalization to zero when there is nothing on the pan,
# number 1.15(scale) the weight scaling factor is calculated when there is e.g.
# an item weighing 300g and the scale shows e.g. 261g, the scale factor (300 / 261 = 1.15)
    

def calibration():
    Count = 0
    while ADDO.value() == 1:
        continue
    sleep_us(5)
    for i in range(0, 24):
        ADSK.high()
        Count = Count << 1
        sleep_us(2)
        ADSK.low()
        if ADDO.value() == 1:
            Count += 1
        sleep_us(1)
    ADSK.high()
    Count = Count ^ 0x800000
    sleep_us(1)
    ADSK.low()
    return (Count//1000)  #offset


offset = calibration()
#print('offset bin:' + str(bin(offset)))
#print('offset:' + str(offset))

while True:
    cmd = ReadWeight(offset)
    print('weight: ' + str(round(cmd)))
    sleep(1)

 

  • Lubię! 2
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.