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
Ultraschallsensor am I2C Bitte um Hilfe
24.08.2014, 11:36
Beitrag #1
Ultraschallsensor am I2C Bitte um Hilfe
Hallo miteinander,

Da ich nun diverse Möglichkeiten durchprobiert habe und zu keinen Ergebnis gekommen bin wende ich mich an Euch.
Folgendes "Problem"
An mein I2C Baustein ( Porterweiterung ) Link will ich einen Ultraschalsensor dranhängen. So weit so gut. Alles was ich probiert habe um ihm anzusprechen scheitert warum ????
Wie ist die PIN Belegung bei solchen I2C Portexpandern? Wird da einfach weitergezählt ( Arduino hört bei 19 auf also 20.21.... usw )
Brauche ich dazu evtl. eine neue Library ?
Meine Suche war auch hier nicht von Erfolg gekrönt.

Darum bitte um Eure Hilfe wie bekomme ich das Ultraschal Modul HC-SR04 zum laufen?
Hier mein Programm:
Code:
#include <Wire.h>
#define expander 0x20 //Adresse 2.PCF


// Trig ist an Digital-Pin 7 angeschlossen
const byte TRIGGER = 21;

// und Echo an Digital-Pin 8
const byte ECHO = 22;

/************************************************************
*
* void setup()
* ------------
*
* Wird einmal beim Programmstart durchlaufen
*
*************************************************************/
void setup() {                
  Serial.begin(9600);  
  Wire.begin();
  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);

  // Damit später durch HIGH-setzen von TRIGGER ein Impuls
  // ausgelöst werden kann, wird TRIGGER hier LOW gesetzt.
  digitalWrite(TRIGGER, LOW);

  // TRIGGER muss mindestens 2µs LOW sein
  delayMicroseconds(2);

  
}

/************************************************************
*
* void loop()
* ------------
*
* Wird immer wieder durchlaufen
*
*************************************************************/
void loop() {
  long laufzeit;
  double entfernung;
Wire.beginTransmission(expander);
Wire.write(B0000001);
  while(true) {
    // Einen Impuls auslösen
    digitalWrite(TRIGGER, HIGH);
    delayMicroseconds(5);
    digitalWrite(TRIGGER, LOW);

    // Messen, wann der reflektierte Impuls zurückkommt
    laufzeit = pulseIn(ECHO, HIGH);

    // Pro Meter benötigt der Schall in Luft ca. 2,9 ms
    // Weg geht hin und zurück, also mal 2
    entfernung = (double) laufzeit / (2.9 * 2.0);

    Serial.print("Entfernung zum Objekt: ");
    Serial.print(entfernung);
    Serial.println(" mm");

    delay(100);
  }
}
Vielen Dank im Vorab für Antworten

Gruß

Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.08.2014, 17:49
Beitrag #2
RE: Ultraschallsensor am I2C Bitte um Hilfe
(24.08.2014 11:36)Zerebrator schrieb:  Hallo miteinander,

Da ich nun diverse Möglichkeiten durchprobiert habe und zu keinen Ergebnis gekommen bin wende ich mich an Euch.
Folgendes "Problem"
An mein I2C Baustein ( Porterweiterung ) Link will ich einen Ultraschalsensor dranhängen. So weit so gut. Alles was ich probiert habe um ihm anzusprechen scheitert warum ????
Wie ist die PIN Belegung bei solchen I2C Portexpandern? Wird da einfach weitergezählt ( Arduino hört bei 19 auf also 20.21.... usw )
Brauche ich dazu evtl. eine neue Library ?
Meine Suche war auch hier nicht von Erfolg gekrönt.

Darum bitte um Eure Hilfe wie bekomme ich das Ultraschal Modul HC-SR04 zum laufen?
Hier mein Programm:
Code:
#include <Wire.h>
#define expander 0x20 //Adresse 2.PCF


// Trig ist an Digital-Pin 7 angeschlossen
const byte TRIGGER = 21;

// und Echo an Digital-Pin 8
const byte ECHO = 22;

/************************************************************
*
* void setup()
* ------------
*
* Wird einmal beim Programmstart durchlaufen
*
*************************************************************/
void setup() {                
  Serial.begin(9600);  
  Wire.begin();
  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);

  // Damit später durch HIGH-setzen von TRIGGER ein Impuls
  // ausgelöst werden kann, wird TRIGGER hier LOW gesetzt.
  digitalWrite(TRIGGER, LOW);

  // TRIGGER muss mindestens 2µs LOW sein
  delayMicroseconds(2);

  
}

/************************************************************
*
* void loop()
* ------------
*
* Wird immer wieder durchlaufen
*
*************************************************************/
void loop() {
  long laufzeit;
  double entfernung;
Wire.beginTransmission(expander);
Wire.write(B0000001);
  while(true) {
    // Einen Impuls auslösen
    digitalWrite(TRIGGER, HIGH);
    delayMicroseconds(5);
    digitalWrite(TRIGGER, LOW);

    // Messen, wann der reflektierte Impuls zurückkommt
    laufzeit = pulseIn(ECHO, HIGH);

    // Pro Meter benötigt der Schall in Luft ca. 2,9 ms
    // Weg geht hin und zurück, also mal 2
    entfernung = (double) laufzeit / (2.9 * 2.0);

    Serial.print("Entfernung zum Objekt: ");
    Serial.print(entfernung);
    Serial.println(" mm");

    delay(100);
  }
}
Vielen Dank im Vorab für Antworten

Gruß

Chris

Hallo Chris,
also Porterweiterungen mußt du generell selber verwalten.
Und die pulsIn() Funktion geht da drüber überhaupt nicht.
lg
bk

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
24.08.2014, 18:13
Beitrag #3
RE: Ultraschallsensor am I2C Bitte um Hilfe
Hi Bitklopfer,

Wie ??? kannst mir dazu bitte einen Vorschlag bzw. eine Bsp. Code geben...

Danke
Gruß
Christoph
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.08.2014, 18:29
Beitrag #4
RE: Ultraschallsensor am I2C Bitte um Hilfe
(24.08.2014 18:13)Zerebrator schrieb:  Hi Bitklopfer,

Wie ??? kannst mir dazu bitte einen Vorschlag bzw. eine Bsp. Code geben...

Danke
Gruß
Christoph

guggschd du hier : http://playground.arduino.cc/Main/PCF8574Class

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
24.08.2014, 19:53
Beitrag #5
RE: Ultraschallsensor am I2C Bitte um Hilfe
Hi

zunächst Danke für Deine Hilfe
Doch wie setze ich das im speziellem für mein Sensor um ???

Langsam frustriert mich das ganze ein wenig wozu die Erweiterung wenn du erst einen kopfstand damit betreiben musst ???
Ich wähle doch die Adresse und vergebe die Pins fertig oder ... so habe ich mir das vorgestellt ... nun ja

Wäre Dir echt dankbar wenn Du mir das ganze explizit für mein Fall "übersetzen" könntest.
Denn laut dem Bsp. Code brauche ich 2 Expander Ports oder sehe ich das falsch.
Ich habe nur einen kann ich damit wirklich nichts anfangen ??

Danke und Gruß

Chr.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.08.2014, 10:50 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2014 10:51 von SkobyMobil.)
Beitrag #6
RE: Ultraschallsensor am I2C Bitte um Hilfe
Hallo,
schöne Porterweiterung... nur was nützt sie Dir?
Es ist also so, das Dein Sensor kein I2C Protokoll unterstützt. Was gibt denn der Sensor aus?
Ist das einfach ein Sensor, der an A0 z.B. einen Wert von 0 bis 1023 ausgibt, und Du diesen "einfach" in mm
umrechnen mußt?
Wenn ich das richtig verstehe, dann wird diese "Erweiterung" an den I2C-Bus angeschlossen.
Das zieht nach sich, das sie eine bestimmte Adresse haben muss. Über diese Adresse wird die Erweiterung
dann "angesprochen"
Ich glaube nicht, das Deine Code das hergibt" Wenn dem so ist- dann muß Dein Sensor von dieser
Erweiterung verwaltet werden, d.h. Deine Erweiterung vergibt an die angeschlossenen Sensoren weitere
Adressen. Diese mußt Du lesen. Das gibt Dein Code wohl auch nicht her...

Wenn das ganze "Arduino like" sein sollte, dann solltest Du für diesen Sensor eine Lib zur Verfügung
haben- wie auch für die Erweiterung.
Hast Du diese nicht- dann mußt Du das "zu Fuss" programmieren. Das funktioniert ohne sehr ausführliches
Datenblatt so gut wie NICHT.

In Deiner Stelle würde ich den Sensor erst einmal nur StandAlone am Arduino betreiben. So kannst Du sehen,
ob er richtig funktioniert und ob ein reproduzierbares Ergebnis geliefert wird.
Du baust Dir z.B. eine Messstrecke auf. Erster Gegenstand bei 30cm, zweiter bei 50cm.
Der Sensor sollte Dir also 2 verschiedene Werte liefern. Diese kannst Du dann als Referenz verwenden.
Deine Porterweiterung sollte ja die gleichen Werte liefern können.

Das hilft Dir zwar jetzt nicht viel weiter, aber Du hast einen Punkt, an dem Du einsteigen kannst.
Suche Dir für die Erweiterung mal eine Lib und ein Datenblatt, dann könn--te das Funktionieren.
Auf alle Fälle brauchst Du zwei Adressen, die Du auslesen müßtest. Eine von der Erweiterung, und eine
vom angeschlossenem Gerät. So sehe ich das.
Gruß und Glück
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.08.2014, 16:34
Beitrag #7
RE: Ultraschallsensor am I2C Bitte um Hilfe
Hi
Also zunächst folgendes: Ich habe bereits 3 solche Sensoren an Arduino hängen. dazu 1 x Servo und 2 DC Motoren und ein I2C Display (alles läuft TOP).
Aber kannst Dir denken ich habe schlicht keinen Port mehr für... ja für nichts mehr.
So nun die Top Idee mit den Expander.
Die Adresse ist ja relativ einfach es gibt dazu einen Scanner die Lautet ( wie Du im meinen Programm unschwer erkennen kannst) 0x20.
Mein Problem ist ich habe absolut keinen Plan wie ich die Pins ansprechen soll !
Ich muss Sie initialisieren doch wie.

Warum ist das ganze so ein Sh... wieso kann ich nicht ganz einfach nur die Ports erweitern um einige Sensoren oä. anzuschließen.

Hat niemand von Euch Erfahrung damit??

Wie kann ich sonst die Ports handeln ? gibt es dazu alternativen.

Gruß

Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.08.2014, 17:12
Beitrag #8
RE: Ultraschallsensor am I2C Bitte um Hilfe
Hallo,
im Groben wird der I2C ja so gelesen und geschrieben:

void setup()
Wire.beginTransmission(0x00); // Adresse Deiner Erweiterung
Wire.write(0x00); // Register Deiner Erweiterung
Wire.write(0b00011100); // Erweiterung Register schreiben bitmap, bit 7 is /EOSC
Wire.endTransmission();

in void loop();

Wire.beginTransmission(0x00);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(0x00, 7);

while(Wire.available())
{
mein wert1 = Wire.read();
mein wert2 = Wire.read();
mein wert3 = Wire.read();
mein wert4 = Wire.read();
mein wert5 = Wire.read();
mein wert6 = Wire.read();
mein wert7 = Wire.read();
}

Das solltest Du aber dem Datenblatt der Erweiterung entnehmen können.
Auch zu der Lib gibt es meistens ein "LiesMich"
Gruß und Spaß
Andreas
P.S. schreib doch mal, was für einen Arduino und was da dran hängt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 122 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 235 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 287 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 452 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 543 06.07.2016 14:59
Letzter Beitrag: Binatone
  Hilfe beim Arduino Shield reimundko 6 459 05.06.2016 11:28
Letzter Beitrag: rpt007
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 534 23.04.2016 10:26
Letzter Beitrag: rkuehle
  Wo finde ich bitte die LIB USBHOST ? arduinopeter 6 501 24.03.2016 16:53
Letzter Beitrag: arduinopeter

Gehe zu:


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