Zählen mittels Sensor

  • Hallo :helpnew:


    Ich bin komplett neu und würde gerne mein erstes Projekt erstellen und bitte um eure Hilfe was ich dazu brauche.
    zu Beginn möchte ich etwas ganz einfaches machen:


    Einen Seonsor der z.B imm wenn ich mit der Hand davorhalte mir eine Zeile mit dem aktuellen Datum und der aktuellen Zeit in ein Skript schreibt.
    Welchen Sensor nehme ich dazu am Besten? Welches Betriebssystem ist am Besten dafür geeignet?


    Danke im Voraus! :D

  • Kurz und knapp:


    Betriebsyste Raspbian


    Sensor - je nachdem was du mit "Hand davor halten" anstellen willst:


    z. B.


    - Ultraschallentfernungsmesser
    - IR Entfernungsmesser


    Bei Unterschreiten einer Entfernung zum Sensor wird dann das Schreiben der Zeile ausgelöst.


    Ultraschallentfernungsmesser gibt es schon sehr This link from Amazon is forbidden ein paar widerstände sind zum Anschließen notwendig.
    IR Entferungsmesser in verschiedenen Varianten 0,5-5cm, 4-30cm, 10-80cm, 20-150cm - die sind etwas Teurer und benötigen
    einen A/D-Wandler.

    Edited once, last by Nueffe ().

  • mit "Hand davor halten" meinte ich nur zählen --> Hand da = 1 ; Hand nicht da = 0


    Und Danke für die schnellen Antworten


  • ein simplen Phototransistor soll dafür auch ausrechend sein;


    https://www.raspberrypi.org/fo…=GPIO%252bphototransistor


    Gruß
    Georg


    Da kannst Probleme mit dem Restlicht bekommen. Ne Reflexionslichtschranke ist ja auch nur eine LED und ein Phototransistor. Nur da sind Diode und Transistor in einem ganz engen Spektrum (meist irgendwo im IR-Bereich) aufeinander abgestimmt. Aber auch da kann Restlicht stören.


  • Die Reflektionslichtschranken sind halt relativ teuer (>20€)
    Ich könnte ja auch die Ultraschallentfernungsmesser nehmen und nur eine Zustandsänderung ab z.B 5cm vor dem Sensor als 1 zählen und alles andere als 0 oder?

  • Grundsätzlich ja.


    für eine so kurze Entfernung kannst du auch den Ultraschallsensor mit 3,3 V betreiben. Dann kannst du dir die Widerstände sparen.


  • Die Reflektionslichtschranken sind halt relativ teuer (>20€)


    Schluck :s


    Ich habe gerade eine Lieferung mit 2 verschiedenen bekommen. Werde aber nicht schaffen die sofort in den Shop zu stellen, weil ich das noch testen muss. 1-2 Euro. Reichweite muss ich aber checken.

  • Schluck :s


    Ich habe gerade eine Lieferung mit 2 verschiedenen bekommen. Werde aber nicht schaffen die sofort in den Shop zu stellen, weil ich das noch testen muss. 1-2 Euro. Reichweite muss ich aber checken.


    Kannst du schon etwas über die Reichweite der Sensoren sagen?

  • Wenngleich ich den Vorrednern zustimmen würde, daß Ultraschallsensoren und Reflexlichtschranken sicherlich naheliegendere Lösungen darstellen, so wollte ich der Idee halber noch die "Kamera mit Bewegungserkennung" (motion) nennen. So man diese in seiner Schublade herumliegen hat, kann man damit sicherlich auch zählen (nach der Art in der man auch mit Kanonen auf Spatzen schießt).


  • So dank eurer Hilfe hab ich das nun zum Laufen gebracht.
    Hab mit der Programmierung etwas herum gespielt aber leider hänge ich bei einem Punkt fest.
    In dem Link ist es in der If Schleife so beschrieben dass ich jede Sekunde Abfrage und einen Wert ausgebe.
    Nun möchte ich aber dchon jede Sekunde abfragen aber nur bei Änderung der Ausgangslage was ausgeben.
    z.B es wird nix ausgegeben dann halte ich meine Hand vor (die zwischen 0-5 cm Abstand hat) und nun soll nur einmal Hand vorhanden ausgegeben werden solange die Hand davor steht,wenn die Hand mal weg ist wieder nix ausgeben bis die Hand wieder da ist.
    Automatisch zusammengefügt:[hr]
    [Blocked Image: http://imagizer.imageshack.us/v2/150x100q90/661/o0Laar.jpg]

    Edited once, last by baron007 ().

  • Im einfachsten Fall benötigst Du eine zweite (Zustands-) Variable die Dir angibt, ob Du eine Aktion durchführen mußt oder nicht (weil Du sie schon durchgeführt hast). Zudem sollte ein wenig Hysterese eingebaut werden, da Deine Ausgabe sonst im Sekundenrhytmus (oder wie schnell Du auch immer abtasten willst) flattern könnte.


    Anbei skizziert in Pseudocode.



  • Im einfachsten Fall benötigst Du eine zweite (Zustands-) Variable die Dir angibt, ob Du eine Aktion durchführen mußt oder nicht (weil Du sie schon durchgeführt hast). Zudem sollte ein wenig Hysterese eingebaut werden, da Deine Ausgabe sonst im Sekundenrhytmus (oder wie schnell Du auch immer abtasten willst) flattern könnte.


    Anbei skizziert in Pseudocode.



    das würde ja schon mit meinem Programm funktionieren aberich will wie du geschrieben hast dieses flattern nicht haben.
    Am einfachsten so gesagt.
    Solange die Hand da ist wird 1 mal Hand da ausgegeben. auch wenn 100x abgefragt wird und die hand aber ständig da ist soll nur 1 mal Hand da ausgegeben werden.
    wenn die Hand aber kurz mal weg ist muss einfach nichts gemacht werden solange bis die Hand wieder da ist dann muss wieder 1 mal Hand da ausgegeben werden egal wie lange die Hand da ist.

  • Hallo.


    Na, wie schnasseldag schon sagte, ne Zustandsvariable mitziehen.


    Pseudocode :


    ...wenn die Hand weg ist, soll ja nichts gemacht werden.
    (Auser die Variable clearen)


    gruß root

    Edited once, last by root ().

  • baron007: Mit dem Flattern meinte ich einen Effekt, den Du mit Deinem Programm derzeit noch nicht mal siehst, weil er von Deiner "Dauerausgabe" verdeckt wird. Dieses Problem würdest Du erst erkennen, wenn Du die zweite Zustandsvariable (bAktiv/hand_ist_da) einbaust, und dann den Abstand auf <5 und >5 vergleichst. Jittert der Abstand nämlich um 5 herum, so wirst Du in diesem Szenario wiederum eine "dauerhafte" Ausgabe (Hand da, Hand weg, Hand da...) feststellen. Daher der Vergleich auf <5 und >6.


  • baron007: Mit dem Flattern meinte ich einen Effekt, den Du mit Deinem Programm derzeit noch nicht mal siehst, weil er von Deiner "Dauerausgabe" verdeckt wird. Dieses Problem würdest Du erst erkennen, wenn Du die zweite Zustandsvariable (bAktiv/hand_ist_da) einbaust, und dann den Abstand auf <5 und >5 vergleichst. Jittert der Abstand nämlich um 5 herum, so wirst Du in diesem Szenario wiederum eine "dauerhafte" Ausgabe (Hand da, Hand weg, Hand da...) feststellen. Daher der Vergleich auf <5 und >6.


    ist korrekt aber warum so umständlich ?
    Für mich wäre "distace < 30cm) Beispiel
    und "distance > 100cm) Beispiel
    ausreichend.
    Klar kann es dann genau an der 30cm Marke jittern, aber wenn er noch Anfänger ist.. klein anfangen, der Rest kommt dann


    gruß root

  • da war ich zu langsam:
    [font="Arial"]Ob ich es richtig sehe ???? - keine Ahnung.[/font]
    [font="Arial"]Aber der Neuling macht eine ... Abfragen- Schleife ... und alle fallen darauf ein.[/font]
    [font="Arial"]Er möchte NUR auf ... seine Hand Reagieren. Einfaches:[/font]
    [font="Arial"]Toggle - on / of[/font]
    [font="Arial"] [/font]
    [font="Arial"]Er macht ein logischen Fehler, und vergleicht einen Faktor 5 mit nächstmögliche Möglichkeit -> also mit der 6.[/font]
    [font="Arial"]Es ist aber ein Ultraschallsensor! ... und er will nur Toggeln - on / of[/font]
    [font="Arial"] [/font]
    [font="Arial"] [/font]
    [font="Arial"]Vermute:[/font]
    [font="Arial"] [/font]


    [code=php]abstand = distanz();


    if (abstand < 5)
    ...
    if (abstand > 25)
    ...
    [/php]


    [font="Arial"] [/font]
    [font="Arial"]wird dem ausrechend sein, um " flattern frei" .... sein vorhaben zu realisieren.


    Gruß
    Georg


    [/font]
    [font="Arial"] [/font]

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:

    Edited once, last by georg-Lu_1963-1 ().


  • baron007: Mit dem Flattern meinte ich einen Effekt, den Du mit Deinem Programm derzeit noch nicht mal siehst, weil er von Deiner "Dauerausgabe" verdeckt wird. Dieses Problem würdest Du erst erkennen, wenn Du die zweite Zustandsvariable (bAktiv/hand_ist_da) einbaust, und dann den Abstand auf <5 und >5 vergleichst. Jittert der Abstand nämlich um 5 herum, so wirst Du in diesem Szenario wiederum eine "dauerhafte" Ausgabe (Hand da, Hand weg, Hand da...) feststellen. Daher der Vergleich auf <5 und >6.


    Ok jetzt hab ich verstanden was du meinst.
    Was ich aber noch immer nicht geschafft habe ist das Hand da nur einmal ausgegeben wird wenn die Hand da ist.
    Also bei meinem derzeitigen Programm ist es ja so das ich jede Sekunde Abfrage und wenn die Hand da ist bekomm ich im Terminal im Sekundentakt
    Hand da
    Hand da
    Hand da
    Hand da
    Wenn ich die Hand nun weg gebe bekomm ich
    Hand nicht da
    Hand nicht da
    Hand nicht da
    Ich will aber solange ich die Hand da habe nur 1x Hand da ausgibt
    Wenn die Hand nun weg ist soll nur 1x Hand nicht da ausgegeben werden.
    Die Abfrage in jeder Sekunde soll schon bleiben nur halt nur bei Änderung der letzten Zustandes etwas ausgeben und sonst einfach nix tun und in einer Sekunde wieder abfragen ob es eine Änderung im Zustand gegeben hat.
    Automatisch zusammengefügt:[hr]


    Ja ich will nur wenn Hand da dann Hand da
    Wenn keine Hand da dann keine Hand da ohne 100x zu wiederholen.


    Aber ich muss ja in einer Schleife abfragen sonst misst er ja nicht erneut oder?

    Edited once, last by baron007 ().

  • dann solltest du deine abfrage bzw die if anweisung wo du abfragst erweitern


    z.b. so:


    da = 0
    nichtda = 0


    if(hand = da & da = 0 & nichtda != 1) then
    da = da+1
    nichtda = 0
    if(hand = nichtda & da != 0 & nichtda = 0 ) then
    da = 0
    nichtda = nichtda +1


    so sollte es klappen da er hand da bzw hand nicht da nur 1x ausgibt

    Edited once, last by gMaN ().