Go Down

Topic: HC-SR04 Sensor fehlt da was? (Read 12055 times) previous topic - next topic

Klaus_ww

Das Gute daran ist: Du wirst diese Stolperfalle nie mehr vergessen  XD
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

selfmade

Hi,
ich dachte schon " bin ich nun total verblödet"

ja diesen Fehler werde ich wohl nie mehr vergessen

der zweite Sensor geht auch, bin auch auf das 1Wire gestossen. Das ist super da kann ich ja mit den Adressen der Sensoren gleich mehrere an einem Pin auslesen. Das ist perfekt.
Jetzt baue ich gerade den Ultraschallsensor wieder auf.
Hoffe es war auch so ein dummer Fehler von mir.

Viele Grüße und vielen Dank für Eure Geduld

Jürgen

selfmade

So, jetzt habe ich nochmal den HC-SR04 angeschlossen.
und mit diesem sketch probiert
(habe die Zeilen ausgetauscht die mir hier in diesem Thread empfohlen wurden)
Code: [Select]

#define trigPin 10
#define echoPin 9

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  int duration, distance;
   digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");

  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}


wie zu sehen hängt der Trigger an 10 und Echo an 9

sind alle Anschlüsse verbunden also 5v, Trig, Ech, GND so erhalte ich
Out of Range (nach der Bedingung im Sketch)
entferne ich trig und echo kommen Entfernungen von 140-160cm

Ich vermute jetzt doch fast der Sensor hat vielleicht doch einen ganz tiefe Macke

Wasjetzt

Hallo!
Dein  Code funktioniert nicht.
Lade diese Lib runter:
http://freecode.com/urls/f05d8c56e9a2b61313a757a6cfb3bdf5
Und dann das Beispiel Ultrasonic Demo
Pin 12 Trigger und 13 Echo...geht sofort und schon recht genau  von ca. 3cm bis 2 Meter.
zudem gibt die Lib gleich die Laufzeit und Distanz in cm und Inch aus.
Schmeiss zuvor die anderen Ultrasonic Libs raus, sonst gibts wieder Probleme...

mfg Martin

jurs


Dein  Code funktioniert nicht.


Was soll das denn?

Der Code funktioniert!
Habe es gerade nochmal selbst getestet.
Der Code in Reply #32 funktioniert und auch der Code im Ausgangsposting mit dem überlangen Trigger-Impuls funktioniert mit dem HC-SR04.

Aber: Wenn auf der einen Seite der Platine ein Bauteil (der Schwingquarz) fehlt, könnte es natürlich sein, dass auf der anderen Seite der Platine auch ein oder mehrere Bauteile fehlen. Auf der Seite, die bisher nicht als Foto gezeigt wurde, sitzen ja noch viel mehr Bauteile.

Vielleicht auch mal kontrollieren, ob auf der anderen Platinenseite alle Bauteile bestückt sind:
http://www.robodino.de/wp-content/gallery/arduino-sensoren/img_6517.jpg

selfmade

Ok
habe es mit Deinem Vorschlag probiert und auch überprüft ob Bibliotheksleichen rumliegen

hier die Ausgabe...:( ich glaub der Sensor ist wirklich hinüber. Wenn die dem schon in China den Quarz nicht aufgebaut haben, wer weiss was der noch alles hatte .
Gut in 2-3 Wochen sollte der neue da sein. Bis dahin habe ich hier eh viel zu schrauben
Ich bin schon heil froh das die anderen Teile und Sketche funktionieren. Ich hatte ja eh den Wurm am Anfang total drin.

Code: [Select]
MS: 33481, CM: 606.03, IN: 238.59
MS: 33158, CM: 600.18, IN: 236.29
MS: 32149, CM: 581.92, IN: 229.10
MS: 32146, CM: 581.86, IN: 229.08
MS: 32132, CM: 581.61, IN: 228.98
MS: 32173, CM: 582.35, IN: 229.27
MS: 32180, CM: 582.48, IN: 229.32
MS: 32129, CM: 581.56, IN: 228.96
MS: 32131, CM: 581.59, IN: 228.97
MS: 32157, CM: 582.06, IN: 229.16
MS: 32169, CM: 582.28, IN: 229.24
MS: 32117, CM: 581.34, IN: 228.87
MS: 32121, CM: 581.41, IN: 228.90
MS: 32176, CM: 582.41, IN: 229.29
MS: 32175, CM: 582.39, IN: 229.29
MS: 32138, CM: 581.72, IN: 229.02
MS: 32162, CM: 582.15, IN: 229.19
MS: 32162, CM: 582.15, IN: 229.19
MS: 32162, CM: 582.15, IN: 229.19
MS: 32127, CM: 581.52, IN: 228.94
MS: 32173, CM: 582.35, IN: 229.27
MS: 32165, CM: 582.21, IN: 229.22
MS: 32124, CM: 581.47, IN: 228.92


das gibt er aus... egal was ich mache auch wenn sich die Entfernung ändert.

Ps. Gleich noch eine Frage.

Ich habe hier ein Relay-Board für den Arduino, darüber werden später die u.a. Pumpen und Lampen geschaltet .
Mit den 5V vom Arduino habe ich es getetstet und die LED's auf dem Board zeigen mir das wohl versucht wird zu schalten.
habe gelesen das diese Boards um auch wirklich schalten zu können 12V brauchen und damit sie nicht so warm werden kann man sie auch mit 10V anfahren.

Da ich nun Spannung zu versorgen habe von 3,3V über 5V nun 10 V und für eine kleine Pumpe auch noch 12V.
Gibt es da eine Multi-Trafo der mir gleich mehrere Spannungen zur Verfügung stellt.
Ich möchte vermeiden das ich zum Schluss eine 10fach Steckdoese nur für diese Minitrafos benötige

Noch eine Frage:
Das mit den Tempfühlern und dem OneWire hat mich sehr beeindruckt.
Da ich in Aqua-becken die PH-Werte etc. messen muss habe ich für den Arduino ein PH-Shield. An dieses PH-Shield sollen nun 3 Sonden angeschlossen werden (diese Shields sind recht teuer deswegen 3 an eine Sonde).
Die Sonden müssen zwar kalibriert werden, ich werde also eine Mittelwert finden müssen da ja alle vom gleichen Shield bedient werden, aber kann man dann die Sonden nicht via OneWire abfragen (also Hardwareadresse ermitteln etc.)?

Bis dato wollte ich das über ein Schieberegister steuern.
In der Reihenfolge
Arduino <===> PH-Shield <===> Schieberegister <===> 3 PH-Sonden die am Schieberegister hängen und bei Bedarf an das Shield geschaltet werden

Grüße
Jürgen

Wasjetzt

Hallo!
Hab ich auch aus Post #32 aufgespielt und kriege Werte von 58 und 180 abwechselnd..zwischendurch auch mal ein "Out of Range"
Die Teile können doch nicht alle ein "Eigenleben" führen ?
..und warum schauts dann mit der Lib recht stimmig aus ?? (zumindest bei meinem Sensor).

mfg Martin

selfmade

#37
Apr 10, 2014, 09:02 pm Last Edit: Apr 10, 2014, 09:05 pm by selfmade Reason: 1
Hier mal die neuen Bilder Vorder und Rückseite.
Vielleicht habe ich ihn auch beim Auflöten des Quarz erst noch richtig zerstört.
Meine Lupe hatte ich in der Garage:(

jurs


Hier mal die neuen Bilder Vorder und Rückseite.


Das Layout Deiner Platine scheint etwas anders zu sein als bei dem Foto-Link, den ich gesendet hatte.

Aber trotzdem sollten sich beim angeschlossenen Schwingquarz zwei Kondensatoren befinden, auf dem von mir verlinkten Foto C6 und C7 direkt am Quarz angeschlossen und auf Deinem Foto C1 und (sieht aus wie) C5 in unmittelbarer Nähe. Dort sind auf Deinem Foto nur zwei leere Bestückungsplätze für die beiden Kondensatoren zu sehen.

Für mich sieht es auch auf der anderen Platinenseite unvollständig bestückt aus.

selfmade

ja, ich glaube Du hast recht.
Ich vermute die haben in China nicht nur den Quarz vergessen, wahrscheinlich fehlt da noch einiges andere auch.

Eine andere Frage.
Ich bin ja absoluter Neueinsteiger in Arduino & Co.

Wie muss ich mir das Abspeichern der Sketche auf dem Arduino vorstellen.
Haben da mehrere Sketche Platz?
wieviel MG passen da drauf?
wenn ich einen Sketch nicht mehr brauche wie bring ich den wieder runter oder lösche diesen?
Aktuell teste ich viel, spiele also auch viel Mist auf das Arduino Board.
Wenn ich dann mal alles zusammen habe kann man dann das Arduino komplett säubern, formatieren wird ja nicht funktionieren.

Gibt das für diese grundlegenden Fragen irgendwo eine gute Einsteigerseite auf der sowas gut beschrieben ist?

jurs


Wie muss ich mir das Abspeichern der Sketche auf dem Arduino vorstellen.
Haben da mehrere Sketche Platz?


Nein. Beim "Upload" wird immer der vorhandene Sketch gelöscht und der neue Sketch hochgeladen.


wieviel MG passen da drauf?


Was soll MG bedeuten? Megabytes?
Ein Arduino UNO hat 32 KB Flash-Speicher, also 0,032 MB.  Oder in Gigabytes ca. 0,000032 GB.


wenn ich einen Sketch nicht mehr brauche wie bring ich den wieder runter oder lösche diesen?


Der alte wird automatisch gelöscht, bevor der neue hochgeladen wird.

selfmade

sorry hatte mich verschrieben
ja natürlich MB
habe gerade auf der arduino seite gesehen das der mega 256kb hat. für einen code sind zwar 32kb schon einiges was wahrscheinlich bei den meisten reicht.

Wenn auf dem Flash-Speicher kann also nur 1 Programm laufen... wow.
das bedeutet das alles was ich an das Arduino anschliessen in ein Programm packen muss. mmmhhh.

Gibt es da Lösungsansätze zur Programmierung?
Beispiel: in einer Schleife muss/will ich nur alle 10 Minuten was auslesen und eine Aktion ausführen. ZB. beim Temp-Sensor
in der anderen Schleife möchte ich 1 mal pro Std was ausführen z.B. PH messen usw usw.

irgendwie geht das aber bestimmt oder?

michael_x

Quote
aber bestimmt

Eine Stunde sind 3600000L millis().
Schau dir das Tutorial BlinkWithoutDelay als Basis an.
Wenn du nicht rauskriegst, was das mit deiner Frage zu tun hat, melde dich wieder ;)

Serenifly

32kB reicht für viele Programme aus. RAM ist eher ein Problem als Flash. Vor allem auf dem UNO. Flash wird erst problematisch wenn du zig Bibliotheken hast und vor allem bei TFTs mit mehreren Fonts.
Und selbst auf dem Mega kann es unter Umständen problematisch werden Programme größer als 64k oder 128k zu schreiben, da da im Hintergrund einige Tricks ablaufen, weil Zeiger auf einem 8 Bit Prozessor nur 16 Bit haben.

Um dein Programm zu strukturieren musst du die Aufgaben teilen und in getrennte Funktionen packen. Diese kann man dann in loop() aufrufen, bzw. Funktionen können wieder andere Funktionen aufrufen. Das ist aber im Prinzip auch nicht anders wie man Programme auf dem PC schreibt.

jurs


Gibt es da Lösungsansätze zur Programmierung?


Kooperatives Multitasking mit der loop-Funktion als Scheduler.


Beispiel: in einer Schleife muss/will ich nur alle 10 Minuten was auslesen und eine Aktion ausführen. ZB. beim Temp-Sensor
in der anderen Schleife möchte ich 1 mal pro Std was ausführen z.B. PH messen usw usw.

irgendwie geht das aber bestimmt oder?


Die Arduino-Software startet automatisch einen Timer, der Dir einen mit der Funktion "millis()" auslesbaren Millisekundentakt bereitstellt. Davon abgeleitet kannst Du Dir natürlich auch eigene Funktionen basteln, die nur alle 10 Minuten laufen. Alle 10 Minuten wäre also 10 * 60 Sekunden * 1000 Millisekunden = 600000. Also mußt Du immer, wenn millis() um 600000 weitergezählt hat, einmal Deine Funktion laufen lassen.

Go Up