Счетчик монет в Raspberry Pi (RPi-GPIO)

У меня проблема со счетом монет в raspberry pi B+ с использованием RPi-GPIO.

Это код:

 import RPi.GPIO as GPIO

 GPIO.setmode(GPIO.BCM)
 GPIO.setup(23, GPIO.IN)

 while True:
    print(GPIO.input(23))

Я позвонил производителю, и он сказал, что счетчик монет посылает импульс со значением 1 постоянно и со значением 0, когда монета опущена. Но в консоли показывает 0 и 1 случайным образом. И ничего не меняется, когда монета падает.

4 проводных выхода:

  • Черный и красный: 12 В (шрифт)
  • Белый: пульсирует (1 постоянно, 0 при падении монеты). Подключается в малину на 23 пин (я выбираю этот пин т.к. есть в наличии).
  • Фиолетовый: для подсчета монет на отдельном светодиоде.

Напряжение: шрифт 12 В, импульс (белый провод) 0,19 ~ 0,25 вольт.

Примечание. Импульс является цифровым.

У меня есть этот счетчик монет:

введите здесь описание изображения


person Radagast    schedule 08.10.2015    source источник
comment
Можете ли вы показать нам характеристики оборудования? Как соединения счетчика монет. Только кодом на питоне помочь не сможем.   -  person lilezek    schedule 08.10.2015
comment
4 проводных выхода: черный и красный - 12 В (шрифт), белый - импульс на 23 контакте (1 постоянно, 0 при опускании монеты) и фиолетовый - для подсчета монет на отдельном светодиоде. Шрифт 12 В, а импульс (белый провод) 0,19 ~ 0,25 вольт, и я использовал резистор 10 кОм в этом проводе. И я использую Raspberry pi B+   -  person Radagast    schedule 08.10.2015
comment
Каковы характеристики пульса? Почему вы выбрали контакт 23? Можете ли вы расширить с дополнительной информацией?   -  person lilezek    schedule 08.10.2015
comment
Я отредактировал/обновил вопрос.   -  person Radagast    schedule 08.10.2015
comment
Импульс счетчика монет работает с тем же напряжением, что и входные контакты RP GPIO?   -  person lilezek    schedule 08.10.2015
comment
Нет, импульс между 0,19В и 0,25В. низкое напряжение   -  person Radagast    schedule 08.10.2015
comment
@lilezek, я понимаю, счетчик не работает при том же напряжении, что и RPi, я связался с производителем, и он говорит: напряжение не имеет значения, всегда отправляются 0 и 1. это имеет смысл?   -  person Radagast    schedule 08.10.2015
comment
Разве это не проблема? Ожидаемое напряжение должно быть между 3,3 В и 5 В, я думаю.   -  person lilezek    schedule 08.10.2015
comment
Значит, мне нужно сделать еще одну схему на макетной плате? при энергетике 0,2в в 3,3в?   -  person Radagast    schedule 08.10.2015
comment
@lilezek я вижу в (мозаика-индустрии.com/embedded-systems/microcontroller-projects/), контакты gpio принимают 0 В ~ 3,3 В   -  person Radagast    schedule 09.10.2015
comment
Давайте продолжим обсуждение в чате.   -  person lilezek    schedule 09.10.2015


Ответы (2)


again=True

Total=0

Wrongs=0

Corrects=0


Total_bags=0

Wrong_bags=0

Correct_bags=0

coins=['1p','2p','5p','10p','20p','50p','£1','£2']

bag_value=[1.00,1.00,5.00,5.00,10.00,10.00,20.00,20.00]

bag_amount=[100,50,100,50,50,20,20,10]

bag_weight=[3.56,7.12,3.25,6.5,5.0,8.0,8.75,12.0]

coins_len=len(coins)

Master_list=list()

CoinCount_list=list()

Tilte_list=['Name','Coin','Weight','Accurate']

Master_list.append(Tilte_list)

with open("Master.txt","w") as f: 
    f.write("{}".format(Master_list))

while True:

    again=True


    what=input("\nMenu\n1)\tAdd a bag\n2)\tStats\n")

    CoinCount_list=list()
    if what=='1':

        name=input("What is your name\n")

        CoinCount_list.append(name)

        with open("CoinCount.txt","w") as f: 
            f.write("{}".format(CoinCount_list))


        with open("CoinCount.txt","w") as f: 
            f.write("{}".format(CoinCount_list))

        Percent=0

        Wrongs=0

        Corrects=0 


while again:

Монета

        coin_input=input("What type of coin do you have\n")
        for i in range (0,coins_len):
            if coin_input==coins[i]:

                Coin=coins[i]
                valid=input("That is valid, is that what you wanted\n")

                if valid=="Yes":


                    CoinCount_list.append(coins[i])

                    with open("CoinCount.txt","w") as f: 
                        f.write("{}".format(CoinCount_list))

                    while True:
                        try:    
                            weight=int(input("What is the weight of the bag\n"))
                            break
                        except ValueError:
                            print("Oops!  That was no valid number.  Try again...\n")
                    amountCoin=weight/bag_weight[i]

Масса

                    CoinCount_list.append(weight)

                    with open("CoinCount.txt","w") as f: 
                        f.write("{}".format(CoinCount_list))

                        if bag_amount[i] == amountCoin:

                            Total_bags=Total_bags+1

                            again=input("Thank you would you like to add another bag\n")

                            CoinCount_list.append('Correct')

                            with open("CoinCount.txt","w") as f: 
                                f.write("{}".format(CoinCount_list))

                            Total=bag_value[i]+Total
                            Correct_bags=Correct_bags+1

                            Corrects=Corrects+1

                            if again== 'Yes':
                                a='b'



                            else:
                                again=False


                                Master_list.append(CoinCount_list)

                                with open("Master.txt","w") as f: 
                                    f.write("{}".format(Master_list))







                        elif bag_amount[i] > amountCoin:
                            print("You have ",amountCoin,"coins, add ",amountCoin-bag_amount[i], "coin\n")

                            Wrong_bags=Wrong_bags+1
                            Total_bags=Total_bags+1

                            Wrongs=Wrongs+1



                        elif bag_amount[i] <amountCoin:
                            print("You have ",amountCoin,"coins, take away ",amountCoin-bag_amount[i], " coin\n")

                            Wrong_bags=Wrong_bags+1
                            Total_bags=Total_bags+1

                            Wrongs=Wrongs+1



if what=='2':
        print("")
        print("  We have check",Total_bags," ")
        print(" ",Correct_bags,"Correctly")
        print(" ",Wrong_bags,"Incorrectly")
        print("  We have raised £",Total," ")
        print("")
        with open("Master.txt") as f:
           rd=f.readlines()
        #print (rd)

        print(*Master_list, sep='\n')

        f = open("CoinCount.txt", "w")
        f.write( str(Master_list) ) 
        f.close()
person Archie Adams    schedule 02.10.2018
comment
Я не знаю, насколько читабелен код, однако я думаю, что вы должны прокомментировать или добавить к самому этому комментарию какое-то объяснение того, как работает ваш код. - person Thomas J.; 02.10.2018

person    schedule
comment
это хорошо, но я видел проблему, мне нужно считывать импульсы на 30 мс... я могу изменить импульс на монетоприемнике (30 мс; 50 мс; 100 мс) - person Radagast; 09.10.2015
comment
Это похоже на забавный проект, удачи с ним! - person ; 09.10.2015