INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Gabellichtschranken mit OneWire auslesbar?
02.01.2016, 19:34
Beitrag #1
Gabellichtschranken mit OneWire auslesbar?
Hallo und ein frohes neues Jahr allen Arduino-Freunden,

derzeit bin ich dabei, mich in mein erstes Arduino-Projekt einzuarbeiten und habe dabei erfolgreich mit einem Uno R3 die Impulse einer Gabellichtschranke auslesen und abspeichern können.

Insgesamt möchte ich aber parallel bis zu 4 solcher Lichtschranken betreiben und die entstehenden Impulse verarbeiten.

Beim Schmökern zur Vorgehensweise, wenn mehrere digitale Sensoren ausgelesen werden sollen, bin ich auf "OneWire" gestoßen, allerdings im Zusammenhang mit Temperatursensoren. Es wurde in diesen Anleitungen erklärt, dass diese Sensoren über "drei Drähte" - Masse, Versorgungsspannung und einen Anschluss zum Datenübertragen - verfügen und dass sie nebeneinander betrieben werden können.

"Meine" Gabellichtschranken besitzen ebenfalls nur 3 Anschlüsse, wie auch die Temperatursensoren. Folgendes steht u.a. in den Produktdetail:

Zitat:Produktdetails:
Lichtschranke Photoelectric Sensor Modul
Zustand: Neu
Technische Spezifikationen:
Hauptchip: LM393
Schlitzbreite: 10mm
Betriebsspannung: DC 5V
Größe: 27.6mm X 20mm X 17mm

Hat schon jemand von Euch Gabellichtschranken mit OneWire nebeneinander mit dem Arduino betrieben? Gibt es welche, die dafür geeignet sind und welche, die dies nicht könn(t)en?

Viele Grüße,
Sylvia
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2016, 20:30
Beitrag #2
RE: Gabellichtschranken mit OneWire auslesbar?
Die Notwendigen Informationen findest du im Datenblatt zur Gabellichtschranke.
Eine Gabellichtschranke ist ein Teil welches in der Regel digital ausgewertet wird.
3 Leitungen werde benötigt um die Spannung für die Sender-Led und den Schaltausgang des Transistors an die entsprechenden Anschlüsse heranführt.
Ein Anschluss an OneWire ist nicht möglich.
Mir ist auch keine Gabellichtschranke für OneWire bekannt.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2016, 20:41
Beitrag #3
RE: Gabellichtschranken mit OneWire auslesbar?
(02.01.2016 19:34)Nathea schrieb:  ....
Zitat:Produktdetails:
Lichtschranke Photoelectric Sensor Modul
Zustand: Neu
Technische Spezifikationen:
Hauptchip: LM393
Schlitzbreite: 10mm
Betriebsspannung: DC 5V
Größe: 27.6mm X 20mm X 17mm
...

Hi,
also wenn der LM393 der einzigste Chip in der Lichtschranke ist dann hat die auf jeden Fall keinen One Wire Ausgang sonder einfach einen Digitalen Ausgang der 1 oder 0 liefert je nach Zustand. Der LM393 ist nämlich ein doppelter Komparator ohne weitere Intelligenz.
Oder gibts ein Datenblatt von der Lichtschranke ?
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2016, 22:16 (Dieser Beitrag wurde zuletzt bearbeitet: 02.01.2016 22:17 von Nathea.)
Beitrag #4
RE: Gabellichtschranken mit OneWire auslesbar?
Danke für Eure Hilfsbereitschaft.

Ein Datenblatt gibt’s nicht, bei meinen ersten Gehversuchen mit dem Arduino (meinen ersten mit Mikroelektronik überhaupt) habe ich mich auf die im Auktionshaus verfügbaren Komponenten preiswerter Art beschränkt.

Die Lichtschranke ist diese hier: Link

Es wird mich jetzt nicht verreissen, wenn die Anbindung mehrerer Sensoren etwas aufwändiger werden wird als mit dieser eleganteren OneWire-Lösung, aber ich wollte zumindest die Möglichkeiten ausloten.

Viele Grüße,
Sylvia

P.S.
Gäbe es denn Lichtschranken, bei denen die Option "OneWire" bestünde? Welche wären das?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2016, 22:53
Beitrag #5
RE: Gabellichtschranken mit OneWire auslesbar?
Wieviel Lichtschranken möchtest du denn am Arduino betreiben und warum gerade OneWire?

Ich habe nochmal ein wenig gegoogelt aber nichts gefunden.
Da eine Lichtschranke in der Regel nur High oder Low ausgiebt, denke ich mal, das ist für Hersteller uninteressant, das mit OneWire herzustellen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2016, 23:26
Beitrag #6
RE: Gabellichtschranken mit OneWire auslesbar?
(02.01.2016 22:16)Nathea schrieb:  ....
Die Lichtschranke ist diese hier: Link
....
P.S.
Gäbe es denn Lichtschranken, bei denen die Option "OneWire" bestünde? Welche wären das?

Hi,
also diese Lichtschranke hat nicht mal den LM393 auf dem Board sondern einen 74HC14 also einen CMOC Hex Schmitt Trigger Baustein.
Daher ist der Ausgang definitiv ein digitaler Schaltausgang den man direkt an einen Port vom Arduino anschließen kann.

Und One Wire ist von der Technik her definitv nicht geeignet ein auftretendes Schaltsignal einer Lichtschranke im Sinne des Ereignisses weiterzuleiten.
One Wire ist da einfach nicht Echtzeitfähig genug.
So ein LS-Signal leitet man z.B. auf eine Digitalschaltung zu oder bei einem Mikrokontroller auf einen Port der einen Interrupt auslösen kann um z.B. einen weiteren Schaltausgang anzusteuern oder einfach um eine Variable hochzuzählen.


Was wird denn mit den Lichschranken erfasst ?

lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2016, 00:20
Beitrag #7
RE: Gabellichtschranken mit OneWire auslesbar?
Grad habe ich nochmal deinen Eingangspost gelesen.
Du möchtest 4 Gabellichtschranken am Arduino betreiben.
Damit belegst du 4 digitale Eingänge des Arduinos.

Wenn du nicht all zu viel weitere Komponenten am Arduino betreiben möchtest, ist das kein Problem.
Der Uno oder ähnliche hat 20 Ports, wovon 2 für die serielle Schnittstelle reserviert sind.
Von den restlichen 18 Ports können 6 auch als analoge Eingänge genutzt werden.

Somit hättest du anschließend weitere 14 Ports zur freien Verfügung.
Sollte also kein Problem sein.
Also warum OneWire?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2016, 10:18
Beitrag #8
RE: Gabellichtschranken mit OneWire auslesbar?
Hall allerseits,

ja, warum 4 Lichtschranken? Ganz einfach: Ich will die Gärung in 4 Weinballons, die parallel "arbeiten" protokollieren, quasi "Bubble-Counter" basteln. Die ausgelesenen Daten (aktuell noch auf SD-Karte, später via WLAN) sollen in eine MySQL-Datenbank übertragen und auch als Graphen auf einer lokalen Webseite dargestellt werden. Dafür ist es natürlich auch nötig, jede einzelne Lichtschranke auch in den Datensätzen voneinander unterscheiden und abgrenzen zu können.

Es gibt viele, viele unterschiedliche Sketches im Internet, an denen ich mich orientieren konnte und, wie gesagt, es klappt bereits mit 1 Lichtschranke.

Warum OneWire? Weil mir die Syntax der gefundenen Sketche unkompliziert(er) erschien als die Einbindung mehrerer digitaler Eingänge. Immerhin bin ich erst in den Anfängen, die Programmierung eines Arduino zu verstehen und aktuell erst auf dem Stand, dass ich wenige fertige Sketch-"Schnipsel" miteinander verbinden kann, so dass sie funktionieren.

So sieht "meiner" aktuell aus:

Code:
// Bubble catcher from wizbrewery
#define resolution 100000     //only capture pulse that are greater than this to avoid noise
#define sample 9              // Zum Berechnen der Durchschnittswerte, als erster Wert zählt 0
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;    // first INT pin (digital pin 2 on an Arduino Uno)
File dataFile;
String dataString = "";       // Leerer Daten-String für das Abspeichern auf Karte

volatile unsigned long pulseThen;
volatile unsigned long pulseNow;
volatile unsigned long numPulses;
volatile unsigned long keeppulse[sample];
volatile int count=0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Initializing SD card...");
  if (!SD.begin(chipSelect))
  {
    Serial.println("SD-Karte nicht erkannt");
  }
  Serial.println("SD-Karte bereit");

attachInterrupt(0, isr, RISING);
numPulses = 0;                      // Reset auf Zählernummer 0, wenn ein Neustart erfolgt
}

void isr()                                    // Hauptprogramm analog loop
{
unsigned long now = micros();
float pulselength;
pulseNow = now;
int averagepulse;
int totalsample = 0;

if ((pulseNow - pulseThen) > resolution)
{
/* Auskommentiert, betrifft ausschließlich Ausgabe auf Seriellen Monitor
     Serial.print("Blub Nr ");                
     Serial.print(numPulses+1);
     Serial.print(" Abstand ");
*/
   pulselength = (float)(pulseNow - pulseThen) /1000000;
/*   Auskommentiert, betrifft ausschließlich Ausgabe auf Seriellen Monitor
     Serial.print(pulselength);
     Serial.print(" ");
     Serial.print("keeppulse ");
     Serial.print(count);
     Serial.print(" Sekunden \n");
*/  
   dataString = "";                                           // Datensatz für SD-Karte zusammenbasteln
   dataString += String(numPulses+1);
   dataString += ";";
   dataString += String(pulselength);
   dataString += " Sek.";

    File dataFile = SD.open("datalog.txt", FILE_WRITE);       // Textfile öfnen
    if (dataFile) {                                           // String in Tetfile schreiben
      dataFile.println(dataString);
      dataFile.close();
      // Serielle Ausgabe
      Serial.println(dataString);
    }
    else {
      Serial.println("Fehler beim Öffnen von datalog.txt");   // Fehlermeldung, falls Schreiben fehlschlägt
    }    
  
   if( count < sample )                                       // if - else Betrifft Anzeige auf Seriellen Monitor
   {
    keeppulse[count] = pulselength;
    count++;
   }
   else
   {
    count = 0;
    Serial.print("Durchschnittsgeschwindigkeit der letzten ");
    Serial.print(sample+1);
    Serial.print(" Blubs ist ");
    for( int x=0; (x<sample); x++ ) {
      totalsample += (int)keeppulse[x];
     }
    averagepulse = totalsample/sample;
    Serial.print(averagepulse);
    Serial.print(" Sekunden \n\n");
    }                                                         // if - else bis hierhin

   pulseThen = pulseNow;
   ++numPulses;
}
}

void loop()
{

}

Danke Euch auf jeden Fall schon einmal für Eure Hinweise. Nun werde ich "OneWire" für mein Projekt beerdigen und mich auf das Verständnis des Auslesens mehrerer Pins parallel zu beschränken. Kriege ich bestimmt auch noch hin Smile

Viele Grüße,
Sylvia
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste