Kleines Geschickligkeitsspiel mit Wägezelle

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Kleines Geschickligkeitsspiel mit Wägezelle

      Hallo,

      ich hatte im alten Forum mal das Thema eröffnet. Es gab auch ein Ergebnis nur leider hab ich den Code Schnipsel nicht mehr.
      Es ging um eine Wägezelle die am ADC angeschlossen ist.
      Auf der Wägezelle steht ein leeres Glas. In das Glas soll nun langsam Wasser eingefüllt werden bis man einen Wert x erreicht hat. Ist dieser Wert erreicht soll eine grüne LED leuchten.
      Füllt man aber das Wasser zu schnell in das Glas leuchtet eine rote LED und das Spiel ist zu Ende. Glas leeren und wieder alles von Anfang.

      Hätte da jemand eine Idee oder einen Denkanstoß für mich?
    • Wird ein lustiges Trinkspiel!
      Die Wäägezelle wird ja lineare Daten liefern. So könnte man einen Korridor definieren, Volumenzugabe/Zeit=konstant. Hält man das ein leuchtet Led grün, weicht man ab, wird's orange bis rot. Zu große Abweichung=knallrot, Spiel verloren, austrinken!. Einen Spielverlauf könnte ich mir so vorstellen: man fängt an das Glas zu füllen, in der 1. sekunde wird die Zugabe gewogen und gibt die Sollzugabe vor, die bis zur Endmenge eingehalten werden muss, wird zuwenig pro Zeit zugegeben, schlecht, zu viel Zugabe auch schlecht.
      Also in der 1. Sekunde die Menge feststellen und im weiteren Verlauf alle 0,2 Sekunden (zB.) prüfen, ob 1/5 der Menge dazu kommt und gemäß der Differenz die Led ansteuern, bzw bei Grenzüberschreitung Alarm geben.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Eine Zeitvorgabe fände ich schwierig, also 'fülle eine bestimmte Menge in einer bestimmten Zeit ein'. Es sei denn, die geforderte Menge ist mit einem Eichstrich (zB) ersichtlich und es läuft ein sichtbarer countdown. Man gewinnt, wenn immer eine Flüssigkeitszunahme erkannt wird,( es muss immer was zufließen, kein Absetzen,) und zum Ablauf der Zeit die Sollmenge innerhalb einer Toleranz erreicht wird. Eine Gleichmäßigkeit des Zuflusses wäre hier nicht erforderlich, nur ein ständiger Zufluss. (natürlich wird nur Kakao verwendet ;( ). Die Schwierigkeit steigert sich mit der Fülldauer.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • six1 schrieb:

      Danach Ablauf einer Zeitschiene und Prüfung, ob in den Zeitsegmenten die Erhöhung in einem erlaubten Rahmen ist.
      Ein Ende des Spielablaufes, das Ziel, dass man mit gleichmäßigem Füllen erreichen muss, muss aber schon irgendwie vorher vorgegeben werden, sonst läuft das Glas über.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Die Glasgröße/Gewicht vorher festzulegen ist sinnvoll, sonst müsste ich ständig das gleiche Glas nehmen, stimmt.
      Ich habe das mit dem Befehl max gemacht, lasse 10 Messungen machen und nehme mir den grössten wert als Startwert.

      Zum einfüllen:
      Mir würde es reichen wenn ich nicht zeitabhängig einfüllen muss. Einfach nur in einem Limit. Schwapp ich zu viel ins Glas weicht der Wert zu schnell ab und die rote LED darf leuchten.
      Nicht zu kompliziert machen das ganze. :)

      Das Einmessen habe ich wie folgt gemacht, Vorschläge zur Verbesserung sind gern angenommen.
      Ach ja zur LED, ist eine RGB deßwegen die 3 Farben.

      Fehlt noch das eingießen... :)


      Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 20
      5. $framesize = 40
      6. $baud = 19200
      7. Config Timer1 = Timer , Prescale = 256
      8. Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
      9. Config Portd.5 = Output
      10. Config Portd.6 = Output
      11. Config Portd.7 = Output
      12. Led_blau Alias Portd.5
      13. Led_gruen Alias Portd.6
      14. Led_rot Alias Portd.7
      15. Dim Idx As Word
      16. Dim A(10) As Word
      17. Dim Adc_complete As Byte
      18. Dim I As Long
      19. Dim Messvariable As Byte
      20. Dim Takt As Word
      21. Dim Sekunde As Byte
      22. Dim Aktueller_wert As Word
      23. Takt = 34285
      24. On Timer1 Zeit
      25. Enable Timer1
      26. Start Adc
      27. Enable Adc
      28. Enable Interrupts
      29. Messvariable = 0
      30. Do
      31. Gosub Gewicht_messen
      32. Loop
      33. '*********************************************************
      34. Gewicht_messen: 'Anfangsgewicht messen mit 10 Durchläufen
      35. If Messvariable = 0 Then
      36. Do
      37. Aktueller_wert = Getadc(1)
      38. Wait 1
      39. Incr I
      40. A(i) = Aktueller_wert
      41. If I = 10 Then Adc_complete = 1
      42. Loop Until Adc_complete = 1
      43. For I = 1 To 10
      44. Aktueller_wert = A(i)
      45. Waitms 5
      46. Next I
      47. Max(a(1) , Aktueller_wert , Idx )
      48. Messvariable = 1
      49. Led_blau = 1
      50. Wait 2
      51. Led_blau = 0
      52. End If
      53. Return
      54. '*********************************************************
      55. Zeit: 'Zeitschleife für Zeitmessung Einfüllen
      56. Timer1 = 34285
      57. Incr Sekunde
      58. Print "Aktueller_Wert :" ; Aktueller_wert
      59. Return
      Alles anzeigen
    • Genau, in der do..loop until. Dann ist dein array gefüllt. In der for..next weißt du der Variablen aktueller_wert nacheinander einen Wert aus dem array zu und wartest bisschen. Wozu??
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Geht ohne, weil in der for..next eigentlich nix passiert, außer das am Ende der aktuelle_wert=a(10) ist. Ist aber für nix nütze, weil er mit der Funktion max wieder überschrieben wird. :D
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • For..next raus geschmissen?

      Wie ist jetzt dein Spielplan? Was muss man machen, um zu gewinnen?

      Deine Wägezelle würde mich auch interessieren. Beschreib' doch mal deine hw, bitte.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Also zu meiner HW, und sorry das es bissl gedauert hat, aber die Arbeit :)

      Sooo....
      Dummerweise musste ich feststellen das meine Waage nur bis 200g messen kann, was aber dem Versuch keinen Abbruch tut.
      Ich habe hier also eine kleine Mini Waage, ein Arduino UNO (geänderter Bootloader) und ein selbstgeätztes Shield, mit rgb LED.

      Angeschlossen hab ich wie folgt:
      E+ --> 3,3V vom UNO
      E- --> GND
      S+ --> adc0
      s- --> adc1

      adc0 liefert mir ständig 1023 und beim adc1 227 ohne betätigung der Waage.
      Leg ich den Finger drauf, ändert sich 227 in 228.

      Es wird wohl so sein das ich um einen Verstärker nicht drum herum komme, da hat Six1 sicher recht. Die Auflösung der Wiegezelle (kenne sie nicht wirklich) wird wohl zu klein sein.
      Nach ein wenig suchen im Netz, bin ich auf den HX711 gestossen, wo man auch 2 Wiegezellen anschliessen könnte.
      Das gibt es schon fertig als Platine und ist zum testen erst einmal nicht schlecht.

      Oder hat jemand andere Vorschläge für einen Verstärker?

      Grüße
      mhc
      Dateien
      • IMAG0053.jpg

        (284,52 kB, 22 mal heruntergeladen, zuletzt: )
    • Ich finde deine Wahl Hx711 nicht schlecht, extra für so was gemacht und leicht zu bedienen. Aber mangels Erfahrung hat dieser Rat wenig Gewicht :S
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • So, nachdem alles angekommen ist und aufgebaut ist ein kleines Problem.
      Folgenden Schnipsel hab ich zum auslesen über den HX711 gefunden:

      Quellcode

      1. 'ADDO = 1 'I also give quotation marks at this alternately coz as input, not output
      2. Adsk = 0 'clock LOW
      3. Count = 0 'reset variable
      4. While Addo = 1 'wait until data ready
      5. Wend
      6. 'Shiftin ADDO , ADSK , Count , 1 , 24 , 10 --> similar ?
      7. For I = 1 To 24 'channel A, gain 128x
      8. Adsk = 1 'clock HIGH
      9. Shift Count , Left , 1 'shift to left 1 bit
      10. Adsk = 0 'clock LOW
      11. If Addo = 1 Then Incr Count 'give bit 1 for LSB, otherwise 0
      12. Next
      13. Adsk = 1 'clock HIGH
      14. Count = Count Xor &H800000 '0x800000
      15. Adsk = 0 'clock LOW
      16. Hx711_read = Count 'returned value
      17. Hx711 = Str(hx711_read)
      18. Hx711 = Left(hx711 , 3)
      19. Datafix = Val(hx711)
      Alles anzeigen
      Funktioniert einwandfrei, nur verlangsamt es den Code durch das While, Wend :(
      Kann man das auch anders machen, ohne While Wend???