Einen Gegenstand Zählen mit TCRT5000 Sensor ERLEDIGT

  • Geht das ? 0

    1. Ja (0) 0%
    2. Nein (0) 0%

    Hallo ich benötige mal als Anfänger ein wenig Hilfe
    Mein Projekt ist folgendes ein Gegenstand soll auf einem Förderband gezählt werden mit einem TCRT5000 Sensor.
    [font="Helvetica Neue, Helvetica, Verdana, sans-serif"]Die Produkte sollen fortlaufen gezählt werden und dieser Wert soll in eine Datei geschrieben werden .[/font]
    [font="Helvetica Neue, Helvetica, Verdana, sans-serif"]Diese Datei soll dann alle 90 Tage mit einer Email versendet werden .[/font]
    [font="Helvetica Neue, Helvetica, Verdana, sans-serif"]Ich hoffe Ihr könnt mir dabei ein wenig helfen [/font]

    Einmal editiert, zuletzt von Berndtt (3. Juni 2016 um 21:25)

  • Einen Gegenstand Zählen mit TCRT5000 Sensor ERLEDIGT? Schau mal ob du hier fündig wirst!

  • Hallo.


    Mein Projekt ist folgendes ein Gegenstand soll auf einem Förderband gezählt werden mit einem TCRT5000 Sensor.

    ...hm... Bist du sicher, dass das der richtige Sensor ist ?

    Wenn ich das richtig gelesen habe:
    lt. Datenblatt.

    Zitat


    Operation range 0 to 20 mm

    ...das ist ja extrem kurz.

    Da würde ich nen >ultraschallsensor< nehmen.
    Das Förderband ist ja recht eben.
    Dein Teil hat etwa ne variable Höhe.
    Das Teil wird erkannt, wenn der Abstand zum Band (Bandabstand-x cm) und dann wieder auf Bandabstand steigt.
    Abhängig vom Abstand kann'st den recht schnell pulsen

    gruß root

    Einmal editiert, zuletzt von root (26. März 2016 um 15:34)

  • Hast du mal Fotos von deinem Band? Wie das so aussieht, wenn da Foerdergut drueber laeuft? Denn egal ob dein oder root's Sensor - das funktioniert zb nur, wenn die Foerderstuecke sehr gut vereinzelt, und auch gleichzeitig konvex sind. Den sonst kommt es zu zu wenig oder zu vielen Ausloesungen.

    Oh, und ueberlappen duerfen sie natuerlich auch nicht...

  • Also das mit dem Transport ist kein Problem , die Vereinzelung auch nicht es ist genau der richtige Sensor ,
    Er soll halt jedes Produkt Zählen den Wert in eine Datei Schreiben und dieser Wert soll dann alle 90 Tage per E-Mail versendet werden
    Jetzt meine Frage wie Stelle ich das Programmtechnisch an

  • So, ich bin ja kein Elektroniker - darum darf da gerne noch mal root oder sonstewer drueber gucken!

    Aber von der Beschaltung her muss das meines Erachtens bei 5V ein ~370 Ohm Vorwiderstand fuer die LED sein, mit dem sollte dann genug Strom am Collector rauskommen - auch wenn du den mit 3.3V am GPIO betreibst.

    Dann brauchst du noch eine Entprellung denke ich - auch wen das optisch ist, wuerde ich da nicht von einer scharfen Erkennungskante ausgehen. Die kann in Software oder Hardware erfolgen - ich bin Softwerker, ich mache das also damit.

    Und zu dem Thema findet sich hier massig was - aus den Foren-FAQs zB http://raspberrypiguide.de/howtos/raspberry-pi-gpio-how-to/

    Sobald du dann einlesen kannst, das etwas am Sensor vorbeikommt, reden wir ueber den Rest :)

  • Ah. Der ist ja schon fertig vorbeschaltet. Dann - Anschliessen, gluecklich werden? 3.3V und GND verbinden, und den Ausgang auf einen GPIO legen, den einlesen.

  • Hi __deets__


    Hast du mal Fotos von deinem Band? Wie das so aussieht, wenn da Foerdergut drueber laeuft? Denn egal ob dein oder root's Sensor - das funktioniert zb nur, wenn die Foerderstuecke sehr gut vereinzelt, und auch gleichzeitig konvex sind. Den sonst kommt es zu zu wenig oder zu vielen Ausloesungen.

    Oh, und ueberlappen duerfen sie natuerlich auch nicht...

    Was hat das mit konvex oder konkav zu tun ?
    Wenn ein Stück kommt, ändert sich der Abstand zum Band.Das ist "das Teil kommt".
    Der Abstand wird dann beim weiterlaufen sicher je nach Oberfäche variieren, aber wenn dann wieder Bandabstand festgestellt wird, war's ein Teil (Teil ist durch).

    Was mich an seinem Sensor stört, ist die extrem kurze Distanzreichweite.
    Das wäre was zum Barcode lesen.

    gruß root

  • Ihr sollt nicht über den Sensor diskutieren oder die Örtlichkeiten der Sensor liest das was er lesen soll ausgezeichnet ich benötige eine Lösung da ich PI Anfänger bin
    Automatisch zusammengefügt:
    Also nochmal von vorne der Sensor liest ein Produkt und schreibt eine 1 in in Datei dann liest er ein weiteres Produkt und addiert die 1 aus der Datei zu einer 2 usw
    Nach 90 Tagen soll diese Datei in der jetzt ein Wert X steht mit einer E-Mail versendet werden dafür suche ich eine Lösung am besten in Python

    Einmal editiert, zuletzt von Berndtt (26. März 2016 um 18:45)

  • @root das hat was damit zu tun, ob du zB ein Teil in Form eines L hast (konkav) und das dann doppelt gezaehlt wird, weil der Sensor an beiden Schenkeln ausloest. Aber wir sollten uns nicht zu viel Gedanken machen. Der TE will das nicht :D

    Berndtt Loesungen liefere ich fuer 80Euro/h. Hilfe zur Selbsthilfe ist umsonst. Hier gibt's ausreichend Eintraege zum auslesen von GPIO Eingaengen, auf ein langes Tutorial habe ich konkret verwiesen. Hast du das angeschaut, ausprobiert, etwas nicht verstanden?

  • Hallo.


    Ihr sollt nicht über den Sensor diskutieren oder die Örtlichkeiten der Sensor liest das was er lesen soll ausgezeichnet ich benötige eine Lösung da ich PI Anfänger bin
    Automatisch zusammengefügt:

    Also nochmal von vorne der Sensor liest ein Produkt und schreibt eine 1 in in Datei dann liest er ein weiteres Produkt und addiert die 1 aus der Datei zu einer 2 usw
    Nach 90 Tagen soll diese Datei in der jetzt ein Wert X steht mit einer E-Mail versendet werden dafür suche ich eine Lösung am besten in Python

    Bischen Eigeninitiative ? :D
    Automatisch zusammengefügt:


    @root... Der TE will das nicht :D

    Berndtt Loesungen liefere ich fuer 80Euro/h. Hilfe zur Selbsthilfe ist umsonst. Hier gibt's ausreichend Eintraege zum auslesen von GPIO Eingaengen, auf ein langes Tutorial habe ich konkret verwiesen. Hast du das angeschaut, ausprobiert, etwas nicht verstanden?

    @ __deets__ ... korrekto... :lol:
    @ Berndt... da hast doch schon die Lösung... :D

    gruß root

    Einmal editiert, zuletzt von root (26. März 2016 um 19:00)

  • Ok den Sensor usw bekomme ich schon an die pi angeschlossen GPIO Ein und Ausgänge sind mir auch klar ein wenig mit Python habe ich mich auch schon befast suche halt einen Lösungsansatz
    @ root ganz blöd bin ich auch nicht habe halt noch keine Erfahrung mit der pi

  • Na dann schliess deinen Sensor an, und bau ein Programm, dass die Impulse einliest. Sobald du das hast, *zeig* es hier. Dann diskutieren wir darueber, wie du diese Impulse irgendwie weiterverarbeitest. *Ich* wuerde dafuer eine Datenbank mit sqlite nehmen, weil das

    - bei Python dabei ist
    - du deine Eintraege mit einem Zeitstempel eintragen kannst
    - du eine simple Abfrage ueber die Anzahl der Eintraege in einem bestimmten Zeitraum machen kannst
    - SQLite robust ist darin, Daten wirklich wegzuschreiben. Das ist schwieriger, als man gemeinhin hofft.

    Aber das diskutieren wir, wenn der erste Schritt erfolgreich war.

  • Klingt gut der Sensor müsste die Tage bei mir eintreffen dann werde ich ihn mal anschließen und ich fange mal an in Python was zu schreiben mit Datenbanken wie SQlite habe ich noch gar keine Erfahrung aber wenn ihr mir hilft sollte das ja machbar sein Danke
    Automatisch zusammengefügt:
    Bei meinem 1 wire Temperatursensor der die Temperatur in meinem Aquarium misst habe ich das so gelöst

    i=0
    while [ $i -le 100 ]
    do
    echo $(echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000007746cdc/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C > /var/www/html/Werte.txt
    echo $i
    let i=$i-1
    done

    Und Anzeigen lassen kann man sich das ganze mit einem Internet explorer :


    <html>
    <head>
    <meta http-equiv="refresh" content="86400">
    <meta charset="UTF-8">
    <title>Projekt</title>
    <script type="text/javascript">

    function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('txt').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    }
    function checkTime(i) {
    if (i < 10) {i = "0" + i};
    return i;
    }
    </script>


    </head>
    <body background="Blubberblasen.jpg" onload="startTime()">
    <h1 align="center"><font color="white"> Timo's und Bernhard's kleines Projekt </font></h1>
    <script src="https://ajax.googleapis.com/ajax/libs/jque…0/jquery.min.js"></script>
    <script>
    function updateWert() {
    jQuery.get('Werte.txt', function(data){
    $('#ajaxWert').html(data);
    });
    }

    $(function() {
    updateWert();
    window.setInterval(updateWert, 1000);
    });
    </script>
    <?php

    $werte = file_get_contents ("/home/pi/Desktop/Werte.txt");
    ?>

    <table border=0 align="center" >
    <tr>
    <th><font size="7"><font color="white">Temperatur:</font></th>
    <th><font size="7"><font color="white"><span id="ajaxWert"></span></font></th>
    </tr>
    <tr>
    <td><font size="7"><font color="white"><div id="txt"></div></font></td>
    <td><font size="7"><font color="white"><script language="javascript" type="text/javascript">
    var d = new Date();
    document.write(d.getDate()+"."+ (d.getMonth()+1)+"."+(d.getYear()+1900));
    </script></font></td>

    </tr>
    </table>


    </body>
    </html>

    Einmal editiert, zuletzt von Berndtt (26. März 2016 um 20:00)


  • @ root ganz blöd bin ich auch nicht habe halt noch keine Erfahrung mit der pi

    Hab ich auch nie behauptet.
    Was ich damit meinte, mal selbst bißchen probieren.
    Wenn's dann hakt, nachfragen, keine Thema. :thumbs1:

    Einmal editiert, zuletzt von root (26. März 2016 um 21:32)

  • So Sensor ist da und ist auch angeschlossen mit diesem Python Scribt funktioniert er auch schon


    #!/usr/bin/python
    import time, sys
    import RPi.GPIO as GPIO

    # Pin of PIR OUT
    PIR = 25

    # Init PIR for input
    def initPIR(PIR):
    print "Waiting for PIR..."
    while GPIO.input(PIR) == 1:
    print "PIR Ready"
    return 0

    # Action if motion detected
    def motion():
    print "Motion detected!"
    return

    # Action if motion is gone
    def motionGone():
    print "Ready for new motion detection!"
    return

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

    PirPreviousState = 0
    PirCurrentState = initPIR(PIR)

    try:
    while True:
    PirCurrentState = GPIO.input(PIR)

    if PirCurrentState == 1 and PirPreviousState == 0:
    # PIR is triggered
    motion()
    PirPreviousState=1
    elif PirCurrentState == 0 and PirPreviousState == 1:
    # PIR has returned to ready state
    motionGone()
    PirPreviousState=0

    time.sleep(0.1)
    except KeyboardInterrupt:
    GPIO.cleanup()
    exit()

    jetzt mein Problem wie bekomme ich es hin das der Sensor zählt und mir den Zähler fortlaufend in eine Datei Speichert ?

  • Bitte setz deinen Code in die dazu vorgesehene Code-Tags - sonst ist das nicht zu lesen. Ausserdem wuerde ich dir empfehlen, einen anderen Ansatz zu waehlen - wait_for_edge, statt testen, nix sehen, und dann 0.1 Sekunden warten - wenn in den 0.1 Sekunden was passiert, ist essig, und wenn du das kleiner machst, verbraet dein PI zu viel CPU-Zyklen.

  • Ok ich habe mal jetzt diesen Ansatz die Werte werden gezählt ok aber wie bekomme ich es hin das nur immer der letzte Wert in eine txt Datei geschrieben wird #
    import RPi.GPIO as GPIO
    import time

    # Variable Counter definieren
    Counter = 0

    # SoC als Pinreferenz waehlen
    GPIO.setmode(GPIO.BCM)

    # Pin 25 vom SoC als Input deklarieren und Pull-Down Widerstand aktivieren
    GPIO.setup(25, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

    # ISR
    def Interrupt(channel):
    # Zugriff auf globale Variablen
    global Counter

    # Counter um eins erhoehen und ausgeben
    Counter = Counter + 1
    print "" + str(Counter)

    # Interrupt Event hinzufuegen. Pin 25, auf steigende Flanke reagieren und ISR "Interrupt" deklarieren
    GPIO.add_event_detect(25, GPIO.RISING, callback = Interrupt, bouncetime = 200)

    # Endlosschleife
    while True: time.sleep(1)

  • Nochmal bitte, setz deinen Code in die Tags. Das ist nicht zu lesen so.

    An sieht das sieht doch schon gut aus, jetzt musst du doch nur noch den Wert in eine Datei schreiben. Datei auf machen, wert reinschreiben, datei schliessen.

    Code
    with open("/tmp/filename", "wb") as outf:
         outf.write(str(Counter))

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!