Forum: Mikrocontroller und Digitale Elektronik Welchen Parameter muss ich nutzen, um mit Arduino und DS18S20 ein Relais zu steuern?


von Helmut O. (magahigi)


Lesenswert?

Hallo, Leute,
es ist zum Weinen:
Wen ich auch frage, jeder erzählt mir, wie einfach das ist, und am Ende 
kann mir keiner sagen, wie es geht ...
Mein Problem:
Ich möchte mit einem Arduino Nano w/Atmega 328 und einem DS18S20 
Temp.-Sensor eine Schaltung bauen, die ab einem gegebenen Wert (z.B. 
20°C) eine Relais schaltet.

Mit den üblichen Sketchen habe ich das Relais einzeln testen können und
habe mit dem DS18S20 Temperaturen gemessen, im Serial Monitor gesehen.

Aber welchen Parameter muss ich im Sketch denn angeben, dass das 
Programm weiß, dass ich bei z.B. 20°C das Relais schalten möchte???

Ich habe hier den Sketch teilweise dargestellt.
Ganz unten sieht man die Stelle, um die es mir geht:

WAS muss ich angeben, damit das Programm versteht, dass ab (z.B. 
gemessenen 20°C) das Relais geschaltet werden soll?
Kann mir jemand dabei helfen??
Was mache ich denn falsch???

Hier Auszüge aus meinem  Sketch:

Bibliotheken:
<Wire.h>
<OneWire.h>
<DallasTemperature.h>
(...)
const int DS18S20 = 2; // An Pin 2 liegt der Data-Pin des DS18S20.
const int relaisPin = 11; // An Pin 11 liegt der VCC des Relais an.

float Temperatures = digitalRead)2); // Das ist doch das Auslesen der 
Temp.  // - oder?
pinMode(relaisPin, OUTPUT);

void setup(void) {

(...) // hier steht das Erkennen des Ds18S20 Device usw.
}

void loop(void) {
sensors.requestTemperatures();
//und jetzt kommt die if-Schleife, bei der ich nicht weiß, was ich als 
//Referenz-Wert bzw. Parameter angeben soll, damit das Programm bei dem 
//eingestellten Wert (hier: 20°C) das Relais schalten soll ...
// ich habe das so und anders versucht, aber nie hat das Relais 
geschaltet

digitalRead(2); // Ist das ein brauchbarer Ansatz??
if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

digitalWrite(relaisPin, LOW); // Jetzt müsste das Relais ja schalten 
...?
}
else {
digitalWrite(relaisPin, HIGH);
}

Kann mir jemand dabei helfen???

: Verschoben durch User
von Hopsink (Gast)


Lesenswert?

Die Hoffnung stirbt zuletzt?

Frage Gurgel, der antwortet auch auf Trivialitäten.
Wir hier so wohl eher nicht.

If Temperatur größer Sollwert, dann aus,

Else nicht....

von Wolfgang (Gast)


Lesenswert?

Helmut O. schrieb:
> if (Temperatures > 20)

Eine float-Variable mit einer int-Konstanten zu vergleichen, ist nicht 
so pralle.

Und was soll das mit dem "digitalRead(2)" werden?

von ntldr (Gast)


Lesenswert?

Wolfgang schrieb:
> Eine float-Variable mit einer int-Konstanten zu vergleichen, ist nicht
> so pralle.

Quatsch. Das ist überhaupt kein Problem. Der Compiler macht dadraus 
einfach direkt ein 20.0f.

Zum Topic:
Du kannst den DS18S20 nicht direkt mit digitalRead auslesen. Der 
verwendet den OneWire Bus. Die Header dafür hast du ja schon. Jetzt 
einfach dem Rest der Tutorials folgen, die du überall findest.

von Manfred (Gast)


Lesenswert?

Helmut O. schrieb:
> if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

Das kommt jetzt total unbeholfen rüber.

Du hast im seriellen Monitor Temperaturwerte gesehen, also kannst Du in 
serial.print(irgendwas) gucken, wie die Variable heißt und wie sie 
zyklisch ermittelt wird.

Dein "digitalRead(2);" ist falsch und kann weg: Erstens willst Du keinen 
digitalen Zustand, sondern einen analogen Wert lesen. Zweitens ist ein 
Read ohne Zuweisung auf eine Variable sinnlos.

Füge vor Deinem "if" ein "Serial.println(Temperatures);" ein und schaue 
per Monitor, ob diese Variable einen sinnvollen Wert hat. Wenn nein, 
zurück auf Anfang und gucken, ob sie anders heißt oder wie / wo sie 
einzulesen ist.

Es ist keine Schande, an sowas eine Stunde oder zwei herum zu kauen, da 
musst Du selbst durch. Das sage ich nicht, weil ich böse bin, ich 
spreche aus eigener Erfahrung!

Wolfgang schrieb:
> Eine float-Variable mit einer int-Konstanten zu vergleichen, ist nicht so 
pralle.

Das macht in der Arduino-Umgebung keinerlei Probleme, tue ich des 
öfteren.

von Wolfgang (Gast)


Lesenswert?

ntldr schrieb:
> Quatsch. Das ist überhaupt kein Problem. Der Compiler macht dadraus
> einfach direkt ein 20.0f.

Eben - man sollte sich trotzdem der Automatismen bewußt sein, die da 
ablaufen. Äpfel mit Birnen zu vergleichen, ist kein guter Stil.
Die ".0f" kann man gerade noch hinschreiben.

Man fragt sich natürlich, warum man bei der Aktion überhaupt mit float 
rummachen muss. Der Sensor liefert int-Daten und damit kann man auch den 
Grenzwertvergleich machen.

von Manfred (Gast)


Lesenswert?

Wolfgang schrieb:
> Man fragt sich natürlich, warum man bei der Aktion überhaupt mit float rummachen 
muss.

Das ist für die Fragestellung vollkommen unerheblich. Helmut scheitert 
daran, entweder die falsche Variable zu vergleichen oder diese nicht 
zyklisch einzulesen. Seine "if - else" sieht sinnvoll aus.

> Der Sensor liefert int-Daten und damit kann man auch den
> Grenzwertvergleich machen.

Der 18S20 liefert mindestens eine Nachkommastelle, also ein float. Die 
Anwendung ist so simpel, dass sie sogar auf einem AT168 oder weniger 
liefe, durch int anstatt float gesparter Speicher gibt kein Geld zurück.

von Wolfgang (Gast)


Lesenswert?

Manfred schrieb:
> Der 18S20 liefert mindestens eine Nachkommastelle, also ein float.

Der DS18B20 liefert keine Float und auch keine Nachkommastellen.
Der Sensor liefert 9 Bit signed integer, die als 16 Bit signed integer 
ausgegeben werden (Fig. 4 im Datenblatt). Das LSB hat ein Gewicht von 
0.5°C.

Man muss die ausgegebenen Int-Zahlen also mit (Grenzwert * 2) 
vergleichen.

Mit digitalRead() wird man die gemessenen Daten allerdings nie zu 
Gesicht bekommen.

von Roland F. (rhf)


Lesenswert?

Hallo,
Manfred schrieb:
> Der 18S20 liefert mindestens eine Nachkommastelle, also ein float.

Nein, der Baustein liefert einen Digitalwert (siehe Tabelle 1 im 
Datenblatt) und den kann man doch direkt für einen Vergleich mit dem 
Wert zum Schalten des Relais benutzen.

rhf

von Helmut O. (magahigi)


Lesenswert?

Hallo, Wolfgang,
und danke für Deine Antworten, die ich hier, so weit ich es verstehe, 
gerne beantworte:

Wolfgang (Gast):
=> Eine float-Variable mit einer int-Konstanten zu vergleichen, ist 
nicht
so pralle.

* Mit "float-Variable mit einer int-Konstanten zu vergleichen" hast Du, 
nehme ich an, meine Zeile
float Temperatures = digitalRead)2); // Das ist doch das Auslesen der
Temp.  // - oder?
gemeint.
Ja, danke, damit hat sich meine Frage zunächst beantwortet (was auch 
andere hilfsbereite Schreiber meinen), dass diese keine sinnvolle 
Herangehensweise ist.

=> Und was soll das mit dem "digitalRead(2)" werden?

* Das war ein Versuch ... aus einigen der weiter unten erhaltenen 
Antworten kann ich lesen, dass dieser Weg mich nicht weiter bringt. 
Allerdings nicht aus allen, denn
ntldr (Gast) meint dazu:
=> Quatsch. Das ist überhaupt kein Problem. Der Compiler macht dadraus
einfach direkt ein 20.0f.

* Was jetzt stimmt, weiß ich also nicht ... aber ist vielleicht auch 
nicht so wichtig. Mal sehen, ob ich das Programm zum Laufen bekomme und 
Dank Dir für Deinen Beitrag dazu!

Helmut

von Helmut O. (magahigi)


Lesenswert?

Danke, ntldr (Gast) für Deine Antwort!
Da lese ich:

=> Zum Topic:
Du kannst den DS18S20 nicht direkt mit digitalRead auslesen. Der
verwendet den OneWire Bus. Die Header dafür hast du ja schon. Jetzt
einfach dem Rest der Tutorials folgen, die du überall findest.

* Dass ich den DS18S20 nicht mit digitalRead auslesen kann, habe ich 
verstanden, danke für den Hinweis!
Den OneWire Bus Header habe ich, ja.
Da steht in meinem Sketch drin:

OneWire oneWire(One_Wire_Bus);

 ... aber wie kann ich diesen Header benutzen, um dem Programm zu sagen, 
dass es die z.B. 20°C lesen und mit dem von mir vorgegebenen Wert 
vergleichen soll?

Wenn ich schreibe:

if (One_Wire_Bus > 20);

bekomme ich die error-Meldung:

'One_Wire_Bus' was not declared in this scope

Warum will mir denn keiner konkret verraten, wie ich das richtig machen 
muss???
Mit Dank für Deine Mühen
Helmut

von Joachim B. (jar)


Lesenswert?

Helmut O. schrieb:
> if (One_Wire_Bus > 20);
>
> Warum will mir denn keiner konkret verraten, wie ich das richtig machen
> muss???


isst du Eier roh oder bereitest du sie zu?

1 mit onewire die Temperatur LESEN
2 dann erst die gelesene Temperatur verwenden

hier schon fertig
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/

und ab Zeile 14 kannst du die Temperatur nutzen

na ja
if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

besser (siehe Name von...
if(temperature > 20.0) { ; };// mach was

statt { ; }; // natürlich was sinnvolles einstellen

von Helmut O. (magahigi)


Angehängte Dateien:

Lesenswert?

Hallo,  Manfred (Gast),
vielen Dank für Deine Antwort!
Da lese ich

=> Das kommt jetzt total unbeholfen rüber.

* Womit ich Dir recht gebe ... in diesem Punkt komme ich mir auch 
unbeholfen vor, sonst hätte ich doch hier nicht um Hilfe gebeten.

=> Du hast im seriellen Monitor Temperaturwerte gesehen, also kannst Du 
in
serial.print(irgendwas) gucken, wie die Variable heißt und wie sie
zyklisch ermittelt wird.

* Nein, das kann ich leider nicht.
In meinem Sketch kommt das serial.print(irgendwas) gar nicht vor ... und 
trotzdem kann ich im seriellen Monitor die Temperaturen lesen, vgl. 
angehängtes Foto "Sketch 1".

=> Dein "digitalRead(2);" ist falsch und kann weg: Erstens willst Du 
keinen
digitalen Zustand, sondern einen analogen Wert lesen. Zweitens ist ein
Read ohne Zuweisung auf eine Variable sinnlos.
* OK, danke, digitalRead(2) ist jetzt weg.

=> Füge vor Deinem "if" ein "Serial.println(Temperatures);" ein und 
schaue
per Monitor, ob diese Variable einen sinnvollen Wert hat.


* Wenn ich vor dem "if" ein "Serial.println(Temperatures);" einsetze, 
antwortet mir das System:  "'Temperatures' was not declared in this 
scope"

=> Wenn nein, zurück auf Anfang und gucken, ob sie anders heißt oder wie 
/ wo sie  einzulesen ist.

* Das habe ich getan und festgestellt, dass im Sketch steht:

serial.println("Temperatursensor - DS18S20");

und wenn ich das vor dem if eingebe, schimpft mich zwar keine 
error-Meldung, aber es hilft mir gar nix ... da weiß ich immer noch 
nicht, was ich dem Programm sagen soll, damit es bei überschreiten der 
20°C das Relais schaltet ...
Schreibe ich bei dem if folgendes:

if (Temperatursensor - DS18S20 > 20) { // dann digitalWrite und else ...

dann kommt die error-Meldung " 'Temperatursensor' was not declared in 
this scope"

Was muss ich denn tun, damit die Schaltung das versteht???
Mit Dank für Deine Mühen
Helmut

von Helmut O. (magahigi)


Lesenswert?

Hallo, Manfred,
Und danke für Deine Antwort!
Da steht zu lesen:

=> Der 18S20 liefert mindestens eine Nachkommastelle, also ein float.

Nein, der Baustein liefert einen Digitalwert (siehe Tabelle 1 im
Datenblatt) und den kann man doch direkt für einen Vergleich mit dem
Wert zum Schalten des Relais benutzen.

* Ja, das ist genau meine Frage:
WIE kann ich den gelieferten Digitalwert für den Vergleich mit dem 
Schaltwert fürs Relais benutzen??
Die Tabelle 1 im Datenblatt zeigt mir ein Schema mit Rechtecken, gibt 
mir aber keinen für mich verständlichen Hinweis zur Lösung meines 
Problems ...
Hättest DU vielleicht einen?

Mit Dank für Deine Antwort
Helmut

von spess53 (Gast)


Lesenswert?

Hi

>Die Tabelle 1 im Datenblatt zeigt mir ein Schema mit Rechtecken, gibt
>mir aber keinen für mich verständlichen Hinweis zur Lösung meines
>Problems ...

Die Werte stehen unter 'Table 1. Temperature/Data Relationship'.

MfG Spess

von Joachim B. (jar)


Lesenswert?

Helmut O. schrieb:
> * Ja, das ist genau meine Frage:
> WIE kann ich den gelieferten Digitalwert für den Vergleich mit dem
> Schaltwert fürs Relais benutzen??

fragst du auch wie du ein Ei verzehrfertig bekommst?

eine Lösung als Programm zeigte ich und auch wo du erweiterst, aber so 
langsam denke ich das ist nichts für dich.

Helmut O. schrieb:
> * Nein, das kann ich leider nicht.
> In meinem Sketch kommt das serial.print(irgendwas) gar nicht vor ... und
> trotzdem kann ich im seriellen Monitor die Temperaturen lesen, vgl.
> angehängtes Foto "Sketch 1".

du zeigst ja auch nicht alles, scrolle mal runter zu loop()

: Bearbeitet durch User
von Helmut O. (magahigi)


Lesenswert?

Hallo, Joachim B.,
vielen Dank für Deine Antwort ... vielleicht hilft die mir weiter?

* diesen Beitrag
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/

hatte ich mit schon einmal und habe ihn jetzt nochmal angesehen und in 
meinen Sketch kopiert und zum Laufen gebracht ... das ist der erste 
Sketch, der unsinnige Temperaturen liefert, Raumtemperatur bei mir 1,88 
...
Warum dieser Sketch so einen Käse macht, weiß ich nicht.

=> und ab Zeile 14 kannst du die Temperatur nutzen

* Zeile 14 meinst Du diese?

float getTemp() // returns the temperature from one DS18S20 in DEG 
Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) { // no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

* Wie kann ich das jetzt für MEINE if-Schleife benutzen, in der ich die 
gemessene  mit der von mir gegebenen Temperatur vergleicht ... 
vorausgestzt, die gemessene Temperatur ist kein Käse ...?

Mit Dank für Deine Mühen

Helmut




na ja
if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

besser (siehe Name von...
if(temperature > 20.0) { ; };// mach was

statt { ; }; // natürlich was sinnvolles einstellen

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

Helmut O. schrieb:
> * Zeile 14 meinst Du diese?
>
> float getTemp() // returns the temperature from one DS18S20 in DEG
> Celsius

sag mal willst du mich veräppeln?

Joachim B. schrieb:
> und ab Zeile 14 kannst du die Temperatur nutzen

von Helmut O. (magahigi)


Lesenswert?

Nein, Joachim,
ich will Dich auf keinen Fall veräppeln .. die Lösung meines Problems 
ist mir viel zu wichtig,da mache ich keine doofen Späße.

Ich habe zurückgefragt, welche Zeile Du mit 14 meinst, weil MEIN Sketch 
keine so schicke Zählung am linken Rand hat ... und ich natürlich in 
Meinem Sketch gesucht habe ... jetzt ist mir klar, dass Du die Zeile 14 
im Original gemeint hat, sorry.

 Und jetzt versuche ich also, diese Zeile zu verwenden.

Ich habe Deine Worte vor mir:
=>  na ja
if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

* Offenbar nicht ... hier weiß ich immer noch nicht genau, WELCHEN Namen 
ich einsetzen soll.

=> besser (siehe Name von...
if(temperature > 20.0) { ; };// mach was

*Ja, versuche ich ja .... aber WELCHEN Namen muss ich denn dort jetzt 
einsetzen?? DAS ist doch meine Kern-Frage hier ...

Mit ernst gemeinten Grüßen
Helmut

von Helmut O. (magahigi)


Angehängte Dateien:

Lesenswert?

Hallo, Spess!
Ja, da stehen Werte ... aber was fange ich denn mit denen an?
Wie komme ich denn von diesen Werten auf den Vergleich der von mir 
vorgegebenen Temperatur mit der gemessenen???

Mit Dank für Deinen Beitrag
Helmut

von Joachim B. (jar)


Lesenswert?

Helmut O. schrieb:
> ich will Dich auf keinen Fall veräppeln ..

die Worte les ich wohl.....

> Ich habe zurückgefragt, welche Zeile Du mit 14 meinst, weil MEIN Sketch
> keine so schicke Zählung am linken Rand hat ... und ich natürlich in
> Meinem Sketch gesucht habe ... jetzt ist mir klar, dass Du die Zeile 14
> im Original gemeint hat, sorry.

na wenn ich einen Link schicke, worauf werde ich mich dann wohl 
beziehen?

>  Und jetzt versuche ich also, diese Zeile zu verwenden.
>
> Ich habe Deine Worte vor mir:
> =>  na ja
> if (Temperatures > 20) {  // Ist 'Temperatures' hier das richtige???

wenn im Sketch mit der Zeile 14 die Variable der Temperatur an 
Serial.print geschickt wird, wie wird sie dann heissen?

offensichtlich nicht "Temperatures"

> * Offenbar nicht ... hier weiß ich immer noch nicht genau, WELCHEN Namen
> ich einsetzen soll.

dabei schrieb ich sogar schon die Lösung

> => besser (siehe Name von...
> if(temperature > 20.0) { ; };// mach was

und nun fühle ich mich doppelt veräppelt oder du bist wirklich absolut 
ungeeignet dafür.

> *Ja, versuche ich ja .... aber WELCHEN Namen muss ich denn dort jetzt
> einsetzen?? DAS ist doch meine Kern-Frage hier ...
> Mit ernst gemeinten Grüßen
> Helmut

glaube ich dir das du das total ernst meinst mit dem veräppeln.

Beitrag "Re: Welchen Parameter muss ich nutzen, um mit Arduino und DS18S20 ein Relais zu steuern?"
kein loop in Sicht

Beitrag "Re: Welchen Parameter muss ich nutzen, um mit Arduino und DS18S20 ein Relais zu steuern?"
loop in Sicht aber immer noch kein Serial.print

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Wie komme ich denn von diesen Werten auf den Vergleich der von mir
>vorgegebenen Temperatur mit der gemessenen???

Dir sind binäre und hexadezimale Zahlendarstellungen ein Begriff?

20°C entspricht einem vom Sensor gelesenen Wert = 40D = 0x28 oder
     0b0000000000101000

Und dann brauchst du nur eine Vergleich von deinem Messwert und den 20° 
zu machen.

MfG Spess

von magahigi (Gast)


Lesenswert?

OK, ich schreibe jetzt meinen gesamten Sketch hier rein.
Bin jetzt - wenn ich ihn richtig verstanden habe - dem Tipp von Joachim 
B. gefolgt und habe den von ihm empfohlenen Sketch
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
kopiert und am Ende meine if-Schleife reingesetzt.
Meine Kernfrage, was ich denn eingeben muss, damit das Programm läuft, 
bekomme ich von Joachim B. mit dem Tipp beantwortet, ich sollte ich
1 Mit onewire die Temperatur lesen  // ja, aber WIEEEEE DENN???
2 dann erst die gelesene Temperatur verwenden. // Ja, WIEE DENN??

Ab Zeile 14 (im Original aus at.) könne ich die Temperatur nutzen.
Ich solle, so meint Manfred, in serial.print(irgendwas) gucken,wie die 
Variable heißt und wie sie zyklisch ermittelt wird. //Was heißt denn 
'zyklisch ermittelt'??
Ich finde an der angegebenen Stelle
serial.print(temperature);
und wenn ich 'temperature' in der if - Schleife eingebe, schimpft die 
error-Meldung
" 'temperature' was not declared in this scope"


Hier also der vollständige Sketch, der leider immer noch nicht 
funktioniert.
Was mache ich denn falsch????
Ist doch zum Weinen!!
1
 #include <Wire.h>
2
#include <DallasTemperature.h>
3
#include <OneWire.h>
4
 
5
const int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
6
const int relaisPin = 12; // Relais auf dem Pin 12  //Temperature chip i/o
7
8
OneWire ds(DS18S20_Pin);  // on digital pin 2
9
 
10
void setup(void) 
11
{
12
  Serial.begin(9600);
13
}
14
 
15
void loop(void) {
16
  float temperature = getTemp();
17
  Serial.println(temperature);
18
  
19
  delay(1000); //just here to slow down the output so it is easier to read
20
  
21
}
22
 
23
 
24
float getTemp(){
25
  //returns the temperature from one DS18S20 in DEG Celsius
26
 
27
  byte data[12];
28
  byte addr[8];
29
 
30
  if ( !ds.search(addr)) {
31
      //no more sensors on chain, reset search
32
      ds.reset_search();
33
      return -1000;
34
  }
35
 
36
  if ( OneWire::crc8( addr, 7) != addr[7]) {
37
      Serial.println("CRC is not valid!");
38
      return -1000;
39
  }
40
 
41
  if ( addr[0] != 0x10 && addr[0] != 0x28) {
42
      Serial.print("Device is not recognized");
43
      return -1000;
44
  }
45
 
46
  ds.reset();
47
  ds.select(addr);
48
  ds.write(0x44,1); // start conversion, with parasite power on at the end
49
 
50
  byte present = ds.reset();
51
  ds.select(addr);    
52
  ds.write(0xBE); // Read Scratchpad
53
 
54
  
55
  for (int i = 0; i < 9; i++) { // we need 9 bytes
56
    data[i] = ds.read();
57
  }
58
  
59
  ds.reset_search();
60
  
61
  byte MSB = data[1];
62
  byte LSB = data[0];
63
 
64
  float tempRead = ((MSB << 8) | LSB); //using two's compliment
65
  float TemperatureSum = tempRead / 16;
66
  
67
  return TemperatureSum;
68
  
69
70
71
if(temperatures>20.0){
72
  digitalWrite(relaisPin, LOW);
73
}
74
else
75
{digitalWrite(relaisPin, HIGH);
76
}}

von Joachim B. (jar)


Lesenswert?

magahigi schrieb:
> Ist doch zum Weinen!!

ja leider

> 
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
> kopiert und am Ende meine if-Schleife reingesetzt.

warum am Ende, ich zeigt schon mehrmals das du die Variable ab 
Serial.print  Zeile 14 nutzen kannst.

> Meine Kernfrage, was ich denn eingeben muss

hatte ich bereits beantwortet, ohne sinnverstehendes LEsen wird das aber 
nichts.

void loop(void) {
  float temperature = getTemp();
  Serial.println(temperature); // Zeile 14 wird ja die Temperatur 
ausegeben

// und wenn sie ausgeben ist kanst du sie auch für deinen Vergeich 
nutzen!
// hier im sketch wurde sie "temperature" genannt


  delay(1000); //just here to slow down the output so it is easier to 
read

}

> 2 dann erst die gelesene Temperatur verwenden. // Ja, WIEE DENN??

wie oft soll man das noch erklären?

> Ab Zeile 14 (im Original aus at.) könne ich die Temperatur nutzen.
> Ich solle, so meint Manfred, in serial.print(irgendwas) gucken,wie die
> Variable heißt und wie sie zyklisch ermittelt wird. //Was heißt denn
> 'zyklisch ermittelt'??

was heisst zyklisch?
Adjektiv
    1.
    einem Zyklus (1) entsprechend, in Zyklen sich vollziehend
    "etwas läuft zyklisch ab, verläuft zyklisch"

das wäre ja
void loop(void) {
// alles dazwischen wird immer wieder gemacht
}

wenn ich nun frage was wird gemacht?
schaust du dann mal hin?

> Ich finde an der angegebenen Stelle
> serial.print(temperature);

aber was machst du?

du kopierst
> if(temperatures>20.0){
>   digitalWrite(relaisPin, LOW);
> }
> else

irgendwo hin, nicht an der genannten Stelle

dort wo du das hinkopiert hast heisst die Variable doch ganz anders!
>   return TemperatureSum;

ausserdem wird nach return auch nichts mehr gemacht

> und wenn ich 'temperature' in der if - Schleife eingebe, schimpft die
> error-Meldung
> " 'temperature' was not declared in this scope"

ja welch Wunder, dort heisst sie ja auch anders.

Du zerschlägst das Ei auf dem Frühstücksteller, rennst aus der Küche und 
schimpfst das es nicht gekocht im Eierbecher liegt?

Wenn ich schreibe im Sketch ab Zeile 14 darfst du das nutzen, warum 
kopierst du es ans Ende der Welt, war das Zeile 15, nach 14?

zähle noch mal nach......

Wie beim Ei kochen muss man schon eine Reihenfolge einhalten,

1. aus dem Kühlschrank nehmen
2. in einen Topf mit Wasser legen
3. den Topf mit Wasser und Ei auf den Herd stellen
4. nach der Dauer das Ei rausnehmen
5. in den Eierbecher tun
6. aufklopfen
7. Salz rauf
8. Löffel nehmen
9. Ei löffeln

Du kannst natürlich nach 1 zu 5 springen, wohl bekommts

von Rainer V. (a_zip)


Lesenswert?

magahigi schrieb:
> Hier also der vollständige Sketch, der leider immer noch nicht
> funktioniert.

Nur als kleiner Tip am Rande...in allen Editoren, die ich kenne, kann 
man eine Zeilennummerierung einschalten! Vielleicht versuchst du das 
erst einmal. Dann kann man sich deutlich besser über dein Programm 
unterhalten!!
Gruß Rainer

von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> oder du bist wirklich absolut ungeeignet dafür.
Nicht ganz abwegig.

Helmut:
Weshalb Du erneut einen unvollständigen Screenshot gepostet hast ... 
dabei gibt sich Joachim nun wirklich viel Mühe mit Dir :-) Jetzt mal zu 
Deinem Sketch, ich ziehe den in die IDE:

Dein Sketch wirft eine eindeutige Fehlermeldung "in Zeile 71 
temperatures nicht deklarierte Variable" - warum hast Du Dich nicht 
darum gekümmert, bevor Du gepostet hast?

In Zeile 17 steht "Serial.println(temperature);" - wenn da ein 
sinnvoller Temperaturwert in °C erscheint, dürfte klar sein, wie die 
Variable wirklich heißt?

Deklariert ist diese variable nur innerhalb (loop), also kannst' sie 
nicht weiter unten in "get temp" verwenden. Warum auch ... ich würde die 
Abfrage auf >20° in die Hauptschleife legen.

Testen kann ich mangels Hardware nicht, aber zumindest kompiliert das:
1
#include <Wire.h>
2
#include <DallasTemperature.h>
3
#include <OneWire.h>
4
 
5
const int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
6
const int relaisPin = 12; // Relais auf dem Pin 12  //Temperature chip i/o
7
8
OneWire ds(DS18S20_Pin);  // on digital pin 2
9
 
10
void setup(void) 
11
{
12
  Serial.begin(9600);
13
}
14
 
15
void loop(void) {
16
  float temperature = getTemp();
17
  Serial.println(temperature);
18
  
19
  delay(1000); //just here to slow down the output so it is easier to read
20
21
  if(temperature>20.0){
22
  digitalWrite(relaisPin, LOW);
23
  }
24
  else {
25
  digitalWrite(relaisPin, HIGH);
26
  }
27
}
28
 
29
 
30
float getTemp(){
31
  //returns the temperature from one DS18S20 in DEG Celsius
32
 
33
  byte data[12];
34
  byte addr[8];
35
 
36
  if ( !ds.search(addr)) {
37
      //no more sensors on chain, reset search
38
      ds.reset_search();
39
      return -1000;
40
  }
41
 
42
  if ( OneWire::crc8( addr, 7) != addr[7]) {
43
      Serial.println("CRC is not valid!");
44
      return -1000;
45
  }
46
 
47
  if ( addr[0] != 0x10 && addr[0] != 0x28) {
48
      Serial.print("Device is not recognized");
49
      return -1000;
50
  }
51
 
52
  ds.reset();
53
  ds.select(addr);
54
  ds.write(0x44,1); // start conversion, with parasite power on at the end
55
 
56
  byte present = ds.reset();
57
  ds.select(addr);    
58
  ds.write(0xBE); // Read Scratchpad
59
 
60
  
61
  for (int i = 0; i < 9; i++) { // we need 9 bytes
62
    data[i] = ds.read();
63
  }
64
  
65
  ds.reset_search();
66
  
67
  byte MSB = data[1];
68
  byte LSB = data[0];
69
 
70
  float tempRead = ((MSB << 8) | LSB); //using two's compliment
71
  float TemperatureSum = tempRead / 16;
72
  
73
  return TemperatureSum;
74
}

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Rainer V. schrieb:
> ...in allen Editoren, die ich kenne, kann man eine Zeilennummerierung 
einschalten!

Sogar in der Arduino ...

von Rainer V. (a_zip)


Lesenswert?

Manfred schrieb:
> Rainer V. schrieb:
>> ...in allen Editoren, die ich kenne, kann man eine Zeilennummerierung
> einschalten!
>
> Sogar in der Arduino ...

...na also...

von Verzweigung (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

In der Arduino IDE kannst du die Anzeige von Zeilennummern einstellen. 
Klicke im Datei Menü auf Voreinstellungen, dann auf "Zeilennummern 
anzeigen".

von Zeno (Gast)


Lesenswert?

@TO

Du hast ein ganz einfaches Problem: Du kopierst wild irgendwelche 
Codeschnipsel zusammen, ohne zu wissen was Du tust. Damit kommt dann 
genau auch das heraus was wir hier sehen. Das macht es auch so schwer da 
zu helfen, weil Du die Basics schon nicht verstehst. Ich bewundere 
gerade Joachims Gelassenheit.

Ich kann Dir nur Folgendes empfehlen:
1. Kaufe Dir ein gutes Buch zum Thema Arduino und dessen Programmierung. 
Was ich hier geschrieben habe meine ich auch wortwörtlich. Das Buch läßt 
sich besser durcharbeiten als ein Onlineturial.
2. Arbeite das gewissenhaft Schritt für Schritt durch und versuche die 
dort beschriebenen Beispiele zu verstehen. Die Betonung liegt auf 
verstehen. Einfach nur abtippen bringt gar nichts, weil Dich das nicht 
weiter bringt.

Denke  nicht das das alles an einem Tag erledigt ist. Rechner besser in 
Wochen.

von magahigi (Gast)


Lesenswert?

Ja, Rainer,
das habe ich versucht.
Allerdings läuft mein arduino auf einem raspberry,  und dort gibt es 
zwar den Kartenreiter "Datei", dort auch "Einstellungen", aber 
"Zeilennummern anzeigen" suche ich dort vergeblich ... was ich sehr 
schade finde, da ich auch lieber eindeutig beschreiben und verstehen 
würde.
Helmut

von Stefan F. (Gast)


Lesenswert?

Dann musst du vielleicht mal eine neuere Version der Arduino IDE 
installieren. Das ist doch kinderleicht. Am Linux liegt es jedenfalls 
nicht.

von Rainer V. (a_zip)


Lesenswert?

Also ehrlich, abgesehen davon, dass ich unter Linux ausgerechnet auf 
einem R-PI entwickeln möchte...ist das doch wirklich alles wildes 
gehampel! Gib' dir mal einen Ruck und versuche - vor allem für dich 
selbst , etwas Systematik in dein  Vorhaben zu bringen. Fragen im Forum 
hat und soll vor allem - den Sinn - haben, die Frage "richtig" zu 
stellen. Einfach nur was hinschreiben bringt gar nichts!!! Und schon gar 
nicht ohne Zeilennummern :-)
Viel Erfolg und Gruß Rainer

von Manfred (Gast)


Lesenswert?

Rainer V. schrieb:
> Also ehrlich, abgesehen davon,

Punkt Punkt Punkt wurde wohl alles hinreichend erklärt. Vielleicht ist 
H* ja so nett, mal meine Änderung 
Beitrag "Re: Welchen Parameter muss ich nutzen, um mit Arduino und DS18S20 ein Relais zu steuern?" auszutesten - im 
Gegensatz zu seinem Sketch (18:05) ist die zumindest ohne Fehlermeldung 
kompilierbar.

Wenn danach nichts von ihm kommt, *was irgendwie logisch nachvollziehbar 
ist* , hat es keinen Sinn mehr - dann empfehle ich, sich mit 
Holzarbeiten zu befassen.

von my2ct (Gast)


Lesenswert?

Manfred schrieb:
> - dann empfehle ich, sich mit Holzarbeiten zu befassen.

Genau da wäre so ein Thermostat aber ausgesprochen praktisch, damit es 
in der Werkstatt nicht zu kalt wird.

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

magahigi schrieb:
> Allerdings läuft mein arduino auf einem raspberry,  und dort gibt es
> zwar den Kartenreiter "Datei", dort auch "Einstellungen", aber
> "Zeilennummern anzeigen" suche ich dort vergeblich ...

Stefanus F. schrieb:
> Dann musst du vielleicht mal eine neuere Version der Arduino IDE
> installieren

geht doch

Zeno schrieb:
> Ich bewundere
> gerade Joachims Gelassenheit.

danke

: Bearbeitet durch User
von Helmut O. (magahigi)


Lesenswert?

Ja, ich habe den  Sketch ausprobiert, der  zunächst keine 
error-Meldungen nach sich zieht ...aber er komm auf unsinnige Werte, wie 
2,13°, die sicherlich nicht der Raumtemperatur entsprechen.
Ob es nur daran liegt, dass die gemessene Temperatur nicht zweistellig 
angezeigt weren kann?
Jedenfalls funktioniert dieser Sketch auch nicht.

Sollte ich diesen Sketch mit anderen zu kombinieren versuchen, die 
nachvollziehbare Temperaturangaben erzielt haben?

von leo (Gast)


Lesenswert?

Helmut O. schrieb:

> Sollte ich diesen Sketch mit anderen zu kombinieren versuchen, die
> nachvollziehbare Temperaturangaben erzielt haben?

Nein.

ad Teil 1) Probier mal zum Temperaturmessen;
https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/examples/Simple/Simple.pde

(1. Link in Suche nach "ds18s20 arduino library")

leo

von Manfred (Gast)


Lesenswert?

Helmut O. schrieb:
> Ja, ich habe den  Sketch ausprobiert, der  zunächst keine
> error-Meldungen nach sich zieht ...aber er komm auf unsinnige Werte, wie
> 2,13°, die sicherlich nicht der Raumtemperatur entsprechen.

Zu Anfang hast Du geschrieben, Du hättest im seriellen Monitor korrekte 
Temperaturwerte, das passt nicht zusammen.

Ich gehen jetzt davon aus, dass diese 2,13° per serial.print in Zeile 17 
ausgegeben werden. In der Zeile davor wird "getTemp()" aufgerufen, 
welches in der Variable "temperature" diesen Wert zurück gibt.

Es ist an Dir, eine strukturierte Fehlersuche zu machen:
1. Andern sich die 2.13°, wenn der Sensor erwärmt wird?

Ja - dann liegt ein Rechenfehler in getTemp() vor.
Nein - dann ist der Sensor defekt, falsch angeklemmt oder ein falscher 
Typ.

> Ob es nur daran liegt, dass die gemessene Temperatur nicht zweistellig
> angezeigt weren kann?
Nein, "float temperature = getTemp();" kann deutlich längere Zahlen 
darstellen.

> Sollte ich diesen Sketch mit anderen zu kombinieren versuchen, die
> nachvollziehbare Temperaturangaben erzielt haben?

Das wäre ein denkbarer Weg, aus einem anderen Sketch den Teil zu 
isolieren, der die Temperatur holt und berechnet.

von Wolfgang (Gast)


Lesenswert?

Helmut O. schrieb:
> Ja, ich habe den  Sketch ausprobiert, der  zunächst keine
> error-Meldungen nach sich zieht ...aber er komm auf unsinnige Werte, wie
> 2,13°, die sicherlich nicht der Raumtemperatur entsprechen.

Käme es dir passender vor, wenn der Sensor für die Raumtemperatur einen 
Wert von 17°C ermitteln würde?

von Manfred (Gast)


Lesenswert?

Manfred schrieb:
> aber er komm auf unsinnige Werte,

Mir fällt gerade noch auf, dass die zwei
#include <Wire.h>
#include <DallasTemperature.h>
von Dir garnicht benutzt werden!

Probiere "float temperature = getTemp();" zu ersetzen durch

sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");
float temperature = sensors.getTempCByIndex(0);

- das habe ich aus dem link von leo (Gast) für Dich abgemalt.

von Hopsink (Gast)


Lesenswert?

Na toll,

Helmut O ist in meiner Klasse auf der Fachoberschule hier in Darmstadt 
und das ist eine Aufgabe zu unserer Facharbeit!

Auf dem Schulhof posaunte er was von diesem Forum und alle haben nun 
Spaß hier mitzulesen wie er auch hier nicht klarkommt.

Jan aus der FOS 11b
????

von Manfred (Gast)


Lesenswert?

Neuer Versuch:
1
#include <Wire.h>
2
#include <DallasTemperature.h>
3
#include <OneWire.h>
4
#define ONE_WIRE_BUS 2
5
 
6
const int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
7
const int relaisPin = 12; // Relais auf dem Pin 12  //Temperature chip i/o
8
9
OneWire ds(DS18S20_Pin);  // on digital pin 2
10
OneWire oneWire(ONE_WIRE_BUS);
11
DallasTemperature sensors(&oneWire);
12
13
void setup(void) {
14
  Serial.begin(9600);
15
  sensors.begin();
16
}
17
 
18
void loop(void) {
19
  sensors.requestTemperatures(); // Send the command to get temperatures
20
  Serial.println("DONE");
21
  float temperature = sensors.getTempCByIndex(0);
22
  Serial.println(temperature);
23
  delay(1000); //just here to slow down the output so it is easier to read
24
25
  if(temperature>20.0){
26
  digitalWrite(relaisPin, LOW);
27
  }
28
  else {
29
  digitalWrite(relaisPin, HIGH);
30
  }
31
}

Hopsink schrieb:
> Helmut O ist in meiner Klasse auf der Fachoberschule hier in Darmstadt

Helmut - magst Du das bestätigen?

Hopsink schrieb:
> Auf dem Schulhof posaunte er was von diesem Forum und alle haben nun
> Spaß hier mitzulesen wie er auch hier nicht klarkommt.

Als ordentlicher Mensch wirst Du Dich sicherlich bemühen, mit Helmut 
gemeinsam eine Lösung zu finden? Schadensfreude oder Hohn sind in einem 
Technikforum fehl am Platze .

von Hopsink (Gast)


Lesenswert?

Rein fiktiv oder?!

von Zeno (Gast)


Lesenswert?

Manfred schrieb:
> Als ordentlicher Mensch wirst Du Dich sicherlich bemühen, mit Helmut
> gemeinsam eine Lösung zu finden? Schadensfreude oder Hohn sind in einem
> Technikforum fehl am Platze .

Ich finde es auch nicht so toll, daß er hier seinen Komilitonen so 
vorführt, selbst wenn er Grund dazu hätte. Es gibt eben Dinge die tut 
man nicht.

Andererseits wäre es wünschenwerte wenn Helmut mal meinen Rat

Zeno schrieb:
> Ich kann Dir nur Folgendes empfehlen:
> 1. Kaufe Dir ein gutes Buch zum Thema Arduino und dessen Programmierung.
> Was ich hier geschrieben habe meine ich auch wortwörtlich. Das Buch läßt
> sich besser dur .....

befolgen würde und sich endlich mal auf den Hosenboden setzen würde, 
anstatt nur irgendwelche Codeschnipsel zu kopieren ohne deren Sinn 
verstanden zu haben.
Es hilft ihm auch nicht wenn ihm hier jede Codezeile vorgekaut wird. Er 
muß erst mal die Grundlagen verstehen und dann kann man auch vernünftig 
und gezielt helfen. So und mit seiner Einstellung zu der Sache, lernt er 
gar nichts. Wenn das unser ingenieurtechnischer Nachwuchs werden soll, 
dann sehe ich bei dieser Einstellung für die Zukunft schwarz.

von Manfred (Gast)


Lesenswert?

Zeno schrieb:
> Andererseits wäre es wünschenwerte wenn Helmut mal meinen Rat
> befolgen würde und sich endlich mal auf den Hosenboden setzen würde,
> anstatt nur irgendwelche Codeschnipsel zu kopieren ohne deren Sinn
> verstanden zu haben.

Das Klischee des "Arduinos" :-)

Ganz ehrlich: Ich selbst nutze auch viele fertige Libraries und schlage 
mich nicht mit den Bits eines LCD, INA219, DS18_irgendwas, SD-Card etc., 
das ist ja der Vorteil der Hochsprache. Ich habe schon so manche Stunde 
getestet, wenn irgendwas nicht erwartungsgemäß läuft, aber ich kann 
halbwegs strukturiert Fehler suchen.

Meinen ersten Mikroprozessor hatte ich auf dem Tisch, als Internet noch 
nicht vorstellbar war, also Datenbuch und alleine in der Ecke - das hat 
mich sicherlich anders geprägt.

> Es hilft ihm auch nicht wenn ihm hier jede Codezeile vorgekaut wird. Er
> muß erst mal die Grundlagen verstehen und dann kann man auch vernünftig
> und gezielt helfen. So und mit seiner Einstellung zu der Sache, lernt er
> gar nichts.

Damit hast Du zweifelsfrei recht. Im Thread wurden einige Dinge 
vorgekaut, vielleicht sogar zu viele. Mit "vorkauen" fühle auch ich mich 
angesprochen.

> Wenn das unser ingenieurtechnischer Nachwuchs werden soll,
> dann sehe ich bei dieser Einstellung für die Zukunft schwarz.

Wenn ich so überlege, was ich an Kollegen hatte, ist die Zukunft schon 
partiell Gegenwart.

von Theor (Gast)


Lesenswert?

@ Helmut O. (magahigi)

Das wird evtl. unangenehm für Dich, aber ich versuche so höflich wie 
möglich zu sein:

1. Es scheint, dass Du nicht weisst, was Du tust .
So ein Programm hat eine Struktur.
Ein Aspekt dieser Struktur ist die "Sichtbarkeit" von Variablen. Darum 
solltest Du Dich mal kümmern. Du kannst nicht einfach wild irgendwelche 
Variablen die irgendwo in dem Programm erscheinen, irgendwo_ _anders 
verwenden.
Kümmere Dich darum und lerne, was es mit der Sichtbarkeit von Variablen 
auf sich hat.

2. Du zeigst Mängel in der Eigeninitiative
Wenn Du nun auf ein unbekanntes Wort wie "zyklisch" triffst, wäre es 
doch möglich einfach mal in einem Wörterbuch nachzuschauen. Tust Du aber 
nicht.
Das betrifft nicht nur diesen einen Fall, sondern beinahe jeden Aspekt 
Deines Problems.

3. Du versuchst offensichtlich, ausgehend von absolut unzureichenden 
Kenntnissen, Dir hier die Hausaufgaben machen zu lassen. Oder jedenfalls 
irgendeine Aufgabe zu erledigen, die Du im Rahmen Deiner schulischen 
Ausbildung erfüllen musst.
Das ist hier in diesem Forum nicht das Ziel.
Egal ob Du nun selbst oder die Schule oder das pädagogische Konzept 
schuld ist: Du alleine bist dafür verantwortlich alle nötigen Schritte 
zu unternehmen um das Problem zu lösen. Nicht wir.
Die ständige Wiederholung der selben Frage, wird Dir nicht 
weiterhelfen.

4. Du gehst dermassen unsystematisch vor, dermassen unter Auslassung 
grundlegender Schlussweisen - was man sö landläufig vernünftiges und 
folgerichtiges Denken nennt -, dass man Dir nur dringend raten kann, 
sofort daran etwas zu ändern. Oder aber zu akzeptieren, dass Du dazu 
nicht fähig bist.
In jedem Fall können und wollen wir nicht für Dich denken.

5. Du probierst offensichtlich, vermutlich aufgrund von geringem Wissen, 
einfach nur blind herum.
Gib sofort das "herumprobieren" auf. Analysiere die Situation und das 
Problem. Falls Dir Wissen fehlt, lerne das. Falls Du nicht weißt, was 
Dir fehlt, frage danach. Aufgrund solcher Informationen werden wir gerne 
helfen, wenn Du gezielte und spezifische Fragen stellst. Aber nur dann 
und so.

6. Du wirst vermutlich eine gewisse "Bockbeinigkeit" hier feststellen. 
Anscheinend will Dir niemand den Code einfach hinschreiben.
Nimm das als Zeichen, dass die oben erwähnten Vorgehensweisen einfach 
nicht angemessen sind. Weder in Bezug auf das Thema, noch in Bezug auf 
das Forum.
Man versucht ja Dir zu helfen, aber ausgehend davon, das Du Dir selbst 
Wissen aneignest und das Du vernünftig und sachgerecht vorgehst.
Also passe Dich der Situation an, oder das wird hier nichts.

von Wolfgang (Gast)


Lesenswert?

Manfred schrieb:
> Ganz ehrlich: Ich selbst nutze auch viele fertige Libraries und schlage
> mich nicht mit den Bits eines LCD, INA219, DS18_irgendwas, SD-Card etc.,
> das ist ja der Vorteil der Hochsprache.

Ganz ehrlich: Meinst du, dass es sinnvoll ist, eine Routine wie deine 
getTemp(), die für einen DS18B20 im 12-Bit Modus geschrieben wurde, 
kritiklos für einen DS18S20 zu verwenden und dann vernünftige Ergebnisse 
zu erwarten, nur weil keine Fehlermeldung kommt?

Manfred schrieb:
> Testen kann ich mangels Hardware nicht, aber zumindest kompiliert das:
> ...

Manfred schrieb:
> byte MSB = data[1];
>   byte LSB = data[0];
>
>   float tempRead = ((MSB << 8) | LSB); //using two's compliment
>   float TemperatureSum = tempRead / 16;

Was soll dieses Kauderwelsch:
1) Welchen tieferen Grund gibt es, die vom Sensor gelesenen Bytes, nach 
dem Zusammensetzen auf einen 16-Bit Wert, auf eine float Variable 
tempRead zuzuweisen. Der Sensor liefert einen Ganzzahlwert und fertig. 
Beim Debuggen möchte man vielleicht genau diese Sensorrohdaten mit dem 
Datenblatt vergleichen und braucht sie also einmal. Die Konvertierung in 
einen float Datentyp stiftet hier nur Verwirrung, ist kontraproduktiv 
und beschäftigt an dieser Stelle völlig unsinnig den µC.

Ganz abgesehen davon:
Warum wird der auf der rechten Seite der Zuweisung berechnete signed int 
Wert für einen DS18S20 nicht einfach mit (Grenzwert * 2) verglichen, um 
festzustellen, dass der kritische Wert erreicht ist?

2) In der nächsten Zeile geht es dann mit dem Kauderwelsch weiter:
Warum wird die float Variable tempRead dort durch den Ganzzahlwert 16 
dividiert, warum nicht durch eine float Konstante (aber das hatten wir 
oben schon), die allerdings für einen DS18S20 absolut unpassend ist 
(RTFM Fig.4).
Die Konvertierung der Sensorrohdaten in einen float hat genau hier statt 
zu finden, nämlich bei der Umsetzung und Skalierung der Rohdaten in 
einen °C-Temperaturwert mit Nachkommastellen (auch wenn diese float Zahl 
für die beschriebene Aufgabe des Programms völlig irrelevant ist).

int16_t tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = (float) tempRead / x.0f;  // Temperatur / °C

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> ...Welchen tieferen Grund gibt es, die vom Sensor gelesenen Bytes, nach
> dem Zusammensetzen auf einen 16-Bit Wert, auf eine float Variable
> tempRead zuzuweisen. Der Sensor liefert einen Ganzzahlwert und fertig.

keinen, ich wunderte mich auch zumal float echt ein Resourcenfresser ist 
denke ich, aber nun gut so sei es hier,

auch wenn ich nicht glaube das dem TO irgendwie zu helfen ist war ich 
neugierig, noch nie einen DS18x20 am nano328p gehabt und die LIB 
genutzt, deswegen:
1. die LIB geladen und ins Verzeichnis geschoben
2. einen funktionierenden nano328p gesucht, war schon fast soweit die 
Stiftleisten in den OVP zu löten, aber ich fand dann doch noch einen.
3. nach einigen Versuchen klappte es auch mit dem upload, schlimm halt 
wenn es bei mir nun 4 upload Möglichkeiten gibt und man nicht weiss 
welche gilt:
1
nano.name=Arduino Nano
2
## Arduino Nano w/ ATmega328P (new boot full mem low upload)
3
## Arduino Nano w/ ATmega328P (new bootloader full mem)
4
## Arduino Nano w/ ATmega328P (new bootloader old mem)
5
## Arduino Nano w/ ATmega328P (old bootloader low mem)

aber es lief, natürlich nicht mit dem sketch unter DS18s20 weil ich 
keinen besitze, aber mit Änderungen:
aus:
1
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
2
//Temperature chip i/o
3
OneWire ds(DS18S20_Pin);  // on digital pin 2

schnell umgeschrieben zu
1
int DS18B20_Pin = 2; //DS18S20 Signal pin on digital 2
2
//Temperature chip i/o
3
OneWire ds(DS18B20_Pin);  // on digital pin 2

klappte es wie erwartet auch weil es ja hiess:

Arduino – Temperatur messen mit 1Wire Sensor DS18S20/DS18B20/DS1820

also die LIB ist vorbereitet!

Serial.print wirft also aus:
Mi 23.Jan 2019
 18x T= 23.7*C
 RTC T= 23,5*C
con=63 hell=08

als Vergleich zum Sensor in der RTC
mit Ausgabe aufs Nokia Display, man will ja nicht immer com: bemühen

von Zeno (Gast)


Lesenswert?

Manfred schrieb:
> Wenn ich so überlege, was ich an Kollegen hatte, ist die Zukunft schon
> partiell Gegenwart.

Das hast Du leider recht. Wichtig ist halt das das Problem erkannt und 
die Ursache beseitigtwird.

Manfred schrieb:
> Das Klischee des "Arduinos" :-)
>
> Ganz ehrlich: Ich selbst nutze auch viele fertige Libraries und schlage
> mich nicht mit den Bits eines LCD, INA219, DS18_irgendwas, SD-Card etc.,
> das ist ja der Vorteil der Hochsprache. Ich habe schon so manche Stunde
> getestet, wenn irgendwas nicht erwartungsgemäß läuft, aber ich kann
> halbwegs strukturiert Fehler suchen.

Das Arduino Konzept an sich ist nicht schlecht, da es die Leute an die 
Welt der Mikrokontroller heranführen soll. Das entbindet dennoch nicht 
vom selbstständigen Denken. So blauäugig wie der TO an die Sache geht 
funktioniert auch Arduino nicht. Grundlegende Dinge muß man schon 
lernen, damit sich der Erfolg einstellt. Die Arduinowelt kapselt im 
Wesentlichen die Hardware in passenden  Bibliotheken und erspart so dem 
Anfänger den steinigen Einstieg über die Datenblätter der Controller in 
die µC Welt.
Ich selbst bin auch über ein MSP430 Evalboard in die Controllerwelt 
eingestiegen und habe auch jede Menge Lehrgeld gezahlt.
Es spricht auch nichts dagegen fertige Libs oder auch (im Privatbereich) 
fertige Codeschnipsel zu benutzen. Wenn man sich aber gar nicht mit der 
Materie auseinandersetzt und blind irgendwelche Codezeilen aneinander 
kopiert ohne zu wissen was man da macht, dann geht es eben in die Hose.
Die Sketche aus denen der TO die Codefragmente zusammen kopiert hat 
funktionieren bestimmt. Der TO hat aber die Funktion der Sketche nicht 
kapiert und halt zur Zeilen herauskopiert von den er meint, daß sie zur 
LÖsung seiner Aufgabe hilfreich seien. Das funktioniert natürlich nicht 
- auch bei Arduino nicht.

von Stefan F. (Gast)


Lesenswert?

Paul kauft sich in der Reste-Abteilung von Ikea einen halben Schrank. Im 
Bauhaus findet er ein paar Bretter die er dazu verwenden möchte. Schicke 
Türen bestellt er sich bei Aliexpress. Zum Schluss klebt er die Teile 
mit extra starkem Gewebeband von Tesa zusammen - so wie Chuck Norris das 
in seinem Youtube Channel immer macht.

Leider fallen seine Sachen alle nach unten, weil die Bretter diagonal 
montiert wurden und die Türen fallen beim Öffnen ab.

Ab sonst ist alles prima, denn der Paul darf sich jetzt "Fachkraft für 
Holz-Konstruktionen" nennen. Jetzt bewirbt er sich bei Phantasialand, 
dort wird er die Holz-Achterbahn pflegen.

von Brummbär (Gast)


Lesenswert?

Joachim B. schrieb:
> aus:
> int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
> //Temperature chip i/o
> OneWire ds(DS18S20_Pin);  // on digital pin 2
>
> schnell umgeschrieben zuint DS18B20_Pin = 2; //DS18S20 Signal pin on
> digital 2
> //Temperature chip i/o
> OneWire ds(DS18B20_Pin);  // on digital pin 2

Das ist doch Quatsch. Nur durch umbenennen einer Variable wird sich das 
Verhalten der LIB nicht verändern. Du kannst ebenso schreiben:
1
int Dummbatz_Pin = 2; // DS18S20 Signal pin on digital 2
2
//Temperature chip i/o
3
OneWire ds(Dummbatz_Pin);  // on digital pin 2

von Brummbär (Gast)


Lesenswert?

Übrigens: Den genauen Typ bekommt die LIB über die ID des Sensors.

von magahigi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, Leute,
vielen Dank für die seit gestern Abend neu eingegangenen Antworten!
Bevor ich sie alle  durcharbeite,  habe ich erstmal den Sketch vom 
Manfred (=> Manfred (Gast) Datum: 22.01.2019 22:56)
ausprobiert:
Wie man auf dem angehängten Arduino-Screenshot erkennen kann, liefert 
der Sketch nun brauchbare Celsius-Werte.
Daraus schließe ich, dass der Temp.-Sensor weder kaputt noch falsch 
angeschlossen ist.
Einzig das Relais schaltet er nicht.

Wenn ich den Pin 12 (an dem der Temp.-Sensor angeschlossen ist) über 
eine LED mit 2,2 kOhm-Widerstand mit Ground verbinde, während das Relais 
auch angeschlossen ist (5v, Ground  und Pin 12), dann schaltet es. Das 
Relais kann also auch nicht kaputt sein.
Da ich das Kabel der LED an Pin 12 kontaktiert habe, darf ich annehmen, 
dass dort gegen Ground eine Spannung anliegt - allerdings liegt die 
Spannung offenbar immer an, egal, ob die Temperatur ÜBER oder UNTER 20°C 
ist - das Relais schaltet dann immer.
Ob DAS einen Schluss zulässt, der mir nicht klar ist??

Ich schicke diese Antwort jetzt erst mal ab und gehe alle weiteren 
Anregungen durch ... diese Schaltung muss doch irgendwie zum Laufen 
gebracht werden können - oder?
Helmut

von Stefan F. (Gast)


Lesenswert?

Zeige mal deinen Schaltplan.

von Thomas F. (thomas_82)


Lesenswert?

magahigi schrieb:
> Wenn ich den Pin 12 (an dem der Temp.-Sensor angeschlossen ist) über
> eine LED mit 2,2 kOhm-Widerstand mit Ground verbinde, während das Relais
> auch angeschlossen ist (5v, Ground  und Pin 12), dann schaltet es. Das


Relais und Sensor an PIN 12 angeschlossen / verkabelt?

von Stefan F. (Gast)


Lesenswert?

Kann es sein, dass du den Pin12 in der setup() Funktion noch nicht als 
Ausgang konfiguriert hast?

https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/

> Wenn ich den Pin 12 (an dem der Temp.-Sensor angeschlossen ist)

Was jetzt, ist da das Relais oder der Sensor angeschlossen? Beide 
gleichzeitig mach keinen Sinn.

von Joachim B. (jar)


Lesenswert?

Brummbär schrieb:
> Nur durch umbenennen einer Variable wird sich das
> Verhalten der LIB nicht verändern

statt zu brummen....

Brummbär schrieb:
> int Dummbatz_Pin = 2; // DS18S20 Signal pin on digital 2
> //Temperature chip i/o
> OneWire ds(Dummbatz_Pin);  // on digital pin 2

ist aber nicht gut lesbar

Brummbär schrieb:
> Übrigens: Den genauen Typ bekommt die LIB über die ID des Sensors.

gut das du das schreibst, ich fand halt passend umbenennen lesbarer!

ja die Chip ID, ich hatte da noch was im Hinterkopf, aber am pur AVR ist 
es bei mir länger her, so seit 10 Jahren läuft es ja bei mir am NETIO 
ohne Arduino LIB

Stefanus F. schrieb:
> Zeige mal deinen Schaltplan.

das ist doch alles so sinnlos
Schaltplan wird nie gezeigt, der Sketch wieder als JPG Bild Ausschnitt 
nicht komplett als Code!

dabei war er hier schon mal weiter:
Beitrag "Re: Welchen Parameter muss ich nutzen, um mit Arduino und DS18S20 ein Relais zu steuern?"

Sorry der Helmut MUSS kognitiv behindert sein, ich sehe überhaupt keine 
Lernkurve!

von magahigi (Gast)


Angehängte Dateien:

Lesenswert?

Mitunter finde ich ja manche Posts hier zum Lachen.
Am besten war dieser:
Hopsink (Gast)
Datum: 22.01.2019 22:43
=> Na toll,

Helmut O ist in meiner Klasse auf der Fachoberschule hier in Darmstadt
und das ist eine Aufgabe zu unserer Facharbeit!

Auf dem Schulhof posaunte er was von diesem Forum und alle haben nun
Spaß hier mitzulesen wie er auch hier nicht klarkommt.

Jan aus der FOS 11b
????

 * Nur so viel von mir:
Die Zeit, dass ich auf einer Schule war, liegt schon Jahrzehnte zurück 
... aber lustige Idee ...
Das nur am Rande für all die engagierten Schreiber hier, die die 
Sachfrage mitunter aus den Augen verlieren ...
Helmut

von Joachim B. (jar)


Lesenswert?

magahigi schrieb:
> Die Zeit, dass ich auf einer Schule war, liegt schon Jahrzehnte zurück

und nun kannst du nichts mehr dazulernen?

was soll das immer mit dem Bildschirmfoto?

sag mal kapierst du es wirklich nicht?
Demenz, weil du alles sofort wieder vergisst?

Code als Code einzustellen?

magahigi schrieb:
> die
> Sachfrage mitunter aus den Augen verlieren ...

Wer verliert denn hier alles aus den Augen?

: Bearbeitet durch User
von magahigi (Gast)


Lesenswert?

Danke für den Tipp von leo (Gast)
Datum: 22.01.2019 22:05
=> Probier mal zum Temperaturmessen;
https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/examples/Simple/Simple.pde

(1. Link in Suche nach "ds18s20 arduino library")

leo

* Das habe ich ausprobiert, und mit diesem Sketch liefert das Programm 
völlig realistische Werte, vgl. mein angehängter Screenshot.

Ein weiterer Beleg also, dass der Temp.-Sensor weder falsch 
angeschlossen noch defekt ist, stimmts?

Mit Dank dafür
Helmut

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> was soll das immer mit dem Bildschirmfoto?
> sag mal kapierst du es wirklich nicht?

Das frage ich mich inzwischen auch. Ich denke, es hat keinen Sinn, so 
weiter zu machen. Wir verschwenden hier nur unsere Zeit.

von Joachim B. (jar)


Lesenswert?

Stefanus F. schrieb:
> Wir verschwenden hier nur unsere Zeit.

wir wurden die ganze Zeit nach Strich und Faden ver**scht

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Joachim B. schrieb:
> was soll das immer mit dem Bildschirmfoto?
> sag mal kapierst du es wirklich nicht?
> Demenz, weil du alles sofort wieder vergisst?

@Joachim:
Schalt mal einen Gang zurück, und über dich in Sachlichkeit

@Helmut:
Dein "Vergehen" wegen Joachims Aufgeregtheit zu Bildschirmfotos ist dir 
vermutlich überhaupt nicht bewust.

MAnche "Puristen" mögen es halt, wenn man Textausgaben als Text 
wiedergibt, und nicht als Foto. Ich persönlich habe da kein Problem mit, 
auch wenn dein mit abfotografiertes Code-Schnipsel keine Information 
liefert, und "im Grunde" auch deine Ausgabe nicht viel Information 
erhält, welche man nicht per copy&paste als Text in deiner Rückantwort 
hätte einfügen können.

Einen einfachen Tip von weiter oben hast du anscheinend bisher noch 
nicht aufgegriffen, bzw. nicht das Ergebnis hier berichtet:

Halte den Sensor mal zwischen den Fingern  während der Messung. Da 
sollte sich ja der eingelesene Wert kontinuierlich ändern...

von Stefan F. (Gast)


Lesenswert?

Was ist jetzt mit dem Schaltplan und dem pinMode() ?

von Joachim B. (jar)


Lesenswert?

Wegstaben V. schrieb:
> @Joachim:
> Schalt mal einen Gang zurück, und über dich in Sachlichkeit

hatte ich hier lange versucht aber irgendwann geht die auch bei mir 
verloren
PS. du hast ein 'r' über

: Bearbeitet durch User
von Helmut O. (magahigi)


Lesenswert?

@ Wegstaben V.:
=> Einen einfachen Tip von weiter oben hast du anscheinend bisher noch
nicht aufgegriffen, bzw. nicht das Ergebnis hier berichtet:

Halte den Sensor mal zwischen den Fingern  während der Messung. Da
sollte sich ja der eingelesene Wert kontinuierlich ändern...

* Doch, diesen Tipp habe ich natürlich beherzigt: Ja, wenn ich meine 
Finger an den Temp.-Sensor halte, dann ändern sich die angegebenen 
Werte.
Auf diese Weise habe ich ja ausprobiert, ob das Relais beim 
Überschreiten der 20°-Marke schaltet ... tut es nicht.

@ Stefanus F. (stefanus)
Datum: 23.01.2019 21:34

=>  Was ist jetzt mit dem Schaltplan und dem pinMode() ?

* Am PinMode bin ich gerade dran ... Antwort kommt gleich!

Helmut

von magahigi (Gast)


Lesenswert?

Hallo, Stefanus F. (stefanus),
Du hast geschrieben am
 23.01.2019 20:32
* Kann es sein, dass du den Pin12 in der setup() Funktion noch nicht als
Ausgang konfiguriert hast?

* Verdammt! Ja, das stimmt! Pin 12 ist nicht als OUTPUT konfiguriert ... 
also habe ich das sofort nachgeholt

[c]
void setup() {
pinMode(relaisPin = 12);
.... }

Aber als ich das gemacht habe, hat  der compiler wieder geschimpft:

"In function 'void setup' :
ino :15:21: error: assignment of read-only variable 'relaisPin'"
ino:15:29: error: too few arguments to function 'void pinMode(uint8_t, 
uint8_t)'
In file included from 
/home/pi/sketchbook/libraries/OneWire/OneWire.h:13:0,
from 
/home/pi/sketchbook/libraries/ArduinoTemperature/DallasTemperature.h:25,
fromsketch_jan23a.ino:2:
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:98:6: note: 
declared here
void pinMode(uint8_t, uint8_t);
     ^   "

* Bei dieser Meldung verstehe ich zwar jedes Wort, aber nicht, was sie 
mir sagen will.
Wo ist denn der Fehler?

Helmut

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
> hier schon fertig
> 
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/

Helmut O. schrieb:
> Ja, ich habe den  Sketch ausprobiert, der  zunächst keine

welchen sketch?

> error-Meldungen nach sich zieht ...aber er komm auf unsinnige Werte, wie
> 2,13°, die sicherlich nicht der Raumtemperatur entsprechen.
> Ob es nur daran liegt, dass die gemessene Temperatur nicht zweistellig
> angezeigt weren kann?
> Jedenfalls funktioniert dieser Sketch auch nicht.

dieser funktioniert bei mir mit einem DS18B20

https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/

und ich vertraue dem Kollegen

Brummbär schrieb:
> Übrigens: Den genauen Typ bekommt die LIB über die ID des Sensors.

daran habe ich weniger Zweifel als das der TO uns hier veräppelt.

von Thomas F. (thomas_82)


Lesenswert?

magahigi schrieb:
> void setup() {
> pinMode(relaisPin = 12);
> .... }


Am besten mal auf den Link von vorhin klicken.
https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/


Stefanus F. schrieb:
> Kann es sein, dass du den Pin12 in der setup() Funktion noch nicht als
> Ausgang konfiguriert hast?
>
> https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
>

von Helmut O. (magahigi)


Lesenswert?

Thomas F. schrieb:
> magahigi schrieb:
>> void setup() {
>> pinMode(relaisPin = 12);
>> .... }
>
> Am besten mal auf den Link von vorhin klicken.
> https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
>
> Stefanus F. schrieb:
>> Kann es sein, dass du den Pin12 in der setup() Funktion noch nicht als
>> Ausgang konfiguriert hast?
>>
>> https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
>>

Ja, Thomas,
danke für den Tipp.
Diese reference habe ich registriert und beachtet .. und dennoch 
erscheint die von mir angegebene Fehlermeldung, sobald ich Pin 12 unter 
pinMode als OUTPUT deklariere .... was mache ich da falsch??

Helmut

von Joachim B. (jar)


Lesenswert?

Helmut O. schrieb:
> .... was mache ich da falsch??

nichts du findest immer wieder neue Spielkameraden :)))

von Manfred (Gast)


Lesenswert?

magahigi schrieb:
> * Nur so viel von mir:
> Die Zeit, dass ich auf einer Schule war, liegt schon Jahrzehnte zurück

Ich bezweifele das.

> Das nur am Rande für all die engagierten Schreiber hier, die die
> Sachfrage mitunter aus den Augen verlieren ...

Die Sachfrage ist schon lange zur Lachnummer mutiert, was Du hier 
abziehst, passt zu einem Schulkind, keinesfalls zu einem Erwachsenen.

magahigi schrieb:
> * Verdammt! Ja, das stimmt! Pin 12 ist nicht als OUTPUT konfiguriert ...
> also habe ich das sofort nachgeholt
>
> [c]
> void setup() {
> pinMode(relaisPin = 12);
> .... }
>
> Aber als ich das gemacht habe, hat  der compiler wieder geschimpft:

Dann hast Du es also falsch gemacht. Ich gehe davon aus, das Du 'meinen' 
Sketch von 22.01.2019 22:56 direkt kopiert hast, ohne zu erfassen, was 
da nun eigentlich passiert. Egal, es geht vorwärts.

Ich könnte jetzt aus dem Ärmel weg die Output-Deklaration einfügen, 
aber das wird mir zu doof, diese eine Zeile schreibe ich Dir nicht mehr.

Wenn Du etwas mit dem Arduino machen willst, gehe logisch vor.

Schreibe einen einfachen Ablauf:
Definiere Port

Setze Port high
Mache 2 Sekunden Pause
Setze Port low
Mache 2 s Pause
und wieder auf "Setze Port high"

Wenn das Relais nicht schaltet, nehme das Meßgerät in die Hand und 
ergründe die Ursache.

Wenn Du innerhalb des Programmes sehen willst, was es tut, schreibe 
Serial.print-Befehle rein, z.B. in der if-Schleife
"Serial.print ("if ausgeführt");
und in der Else
"Serial.print ("Else ausgeführt");

Ziel aller Aktionen ist, kleine Einzelteile der Software zu testen, 
bevor man am Gesamten verzweifelt.

In meinen ersten Versuchen habe ich eine LED blinken lassen, einen 
Taster abgefragt, ein Lauflicht gebaut, von einem Drehpoti den Wert 
geholt und so weiter, also erstmal einfache Grundlagen verinnerlicht.

Wenn Du damit überfordert oder nicht dazu bereit bist, gestehe Dir ein, 
dass Du im falschen Bereich bastelst.

Joachim B. schrieb:
>> Übrigens: Den genauen Typ bekommt die LIB über die ID des Sensors.
> daran habe ich weniger Zweifel als das der TO uns hier veräppelt.

Darauf hat 'mein' Sketch gesetzt, es steht so im Kommentar der 
DallasTemperature.h., die ich schon benutzt habe. Ist ja das schöne an 
A*, Library einbinden und sich nicht um Details der Bit kümmern müssen - 
bis irgendwann der Speicher ausgeht und man optimieren muss.

Joachim B. schrieb:
> als das der TO uns hier veräppelt.

Einen dermaßen perfekter Troll überschreitet mein Vorstellungsvermögen.

von Zeno (Gast)


Lesenswert?

magahigi schrieb:
> Bei dieser Meldung verstehe ich zwar jedes Wort, aber nicht, was sie
> mir sagen will.
> Wo ist denn der Fehler?

Du verstehst gar nichts! Dir fehlen sämtliche Grundlagen.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> was soll das immer mit dem Bildschirmfoto?

Sei froh, dass die Phase mit dem Smartphone Photos vom Monitorbildschirm 
schon überstanden ist ...

Joachim B. schrieb:
> dieser funktioniert bei mir mit einem DS18B20
>
> 
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
>
> und ich vertraue dem Kollegen

Das mag ja alles sein. Mit einem DS18S20 kann der aber so nicht 
funktionieren, weil der DS18S20 keine 12 Bit Daten mit 4 binären 
Nachkommastellen liefert. Vergleiche mal in den beiden Datenblättern die 
Figure 4 oder kurz RTFM.

von Hopsink (Gast)


Lesenswert?

Er lacht sich krank...

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Das mag ja alles sein. Mit einem DS18S20 kann der aber so nicht
> funktionieren, weil der DS18S20 keine 12 Bit Daten mit 4 binären
> Nachkommastellen liefert. Vergleiche mal in den beiden Datenblättern die
> Figure 4 oder kurz RTFM.

du gehst von der anderen LIB aus, ich von der von mir gezeigten, aber 
nein ich werde die von mir verlinkte LIB nicht sezieren ob du Recht 
hast.

hier waren zur Info 2 LIBs genannt worden!

Was mit was nicht funktioniert schreibst du ja nicht.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

magahigi schrieb:
> pinMode(relaisPin = 12);
> Wo ist denn der Fehler?

Angeblich hast du ja die Doku von Arduino gelesen. Dort steht im 
Beispiel:
> pinMode(13, OUTPUT);

Bist du wirklich so bescheuert, den Unterschied nicht zu erkennen? Das 
kann doch nicht sein!

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> du gehst von der anderen LIB aus, ich von der von mir gezeigten, aber
> nein ich werde die von mir verlinkte LIB nicht sezieren ob du Recht
> hast.

Ich habe mich auf deinen Betrag bezogen und den auch zitiert, in dem du 
den Blog-Eintrag verlinken hat, der sich auf einen ganz anderen Sensor 
bezieht und so nicht für den DS18S20 passt.
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/

Da der TO auf Fragen nur sehr bedingt reagiert, ist die ganze Diskussion 
hier allerdings etwas fruchtlos.

von Helmut O. (magahigi)


Lesenswert?

Manfred schrieb:
> Schreibe einen einfachen Ablauf:
> Definiere Port
>
> Setze Port high
> Mache 2 Sekunden Pause
> Setze Port low
> Mache 2 s Pause
> und wieder auf "Setze Port high"
>
> Wenn das Relais nicht schaltet, nehme das Meßgerät in die Hand und
> ergründe die Ursache.

* Das habe ich heute als erstes gemacht.
Erfolg:
Das Relais Tongling 5V) schaltet genau 1 mal ... dann leuchten die rote 
und die grüne LED am Relais gleichzeitig, und nix passiert mehr.
Was die Ursache sein könnte, weiß ich nicht ...
Helmut

von Helmut O. (magahigi)


Lesenswert?

... wenn ich statt des Relais eine LED anschließe, dann blinkt sie 
abwechselnd ... das Relais ist vielleicht defekt?

Helmut

von Helmut O. (magahigi)


Lesenswert?

Ich werde die gesamte Schaltung also nochmal aufbauen und statt des 
Relais eine LED anschließen ....
Bin gespannt, ob dann der Temp.-Schalter die LED ein- bzw. ausschaltet.
Danke für diesen Tipp!
Helmut

von Stefan F. (Gast)


Lesenswert?

Welche Spannungen misst du an dem Pin (während das Relais-Modul 
angeschlossen ist):

Bei HIGH x,x Volt
Bei LOW  x,x Volt

Bitte die fehlenden Zahlen ergänzen. Falls dein Multimeter dafür zu 
träge ist, nimm ein Oszilloskop.

von Ralf S: (Gast)


Lesenswert?

Hallo Helmut,

kann sein, dass ich es bei den Posts oben übersehen habe -> ich konnte 
noch keinen Schaltplan entdecken.

Stell doch bitte mal einen Schaltplan hier ein. Und eventuell zusätzlich 
ein Foto vom Aufbau, dann kann man überprüfen, ob der Aufbau auch dem 
Schaltplan entspricht.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Ich habe mich auf deinen Betrag bezogen und den auch zitiert,

nicht in diesem Posting:

Wolfgang schrieb:
> Das mag ja alles sein. Mit einem DS18S20 kann der aber so nicht
> funktionieren, weil der DS18S20 keine 12 Bit Daten mit 4 binären
> Nachkommastellen liefert. Vergleiche mal in den beiden Datenblättern die
> Figure 4 oder kurz RTFM.

dann schwindelt der Link und Brummbär?

Brummbär schrieb:
> Übrigens: Den genauen Typ bekommt die LIB über die ID des Sensors.

https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
Arduino – Temperatur messen mit 1Wire Sensor DS18S20/DS18B20/DS1820

wie gesagt, ich habe die LIB nun nicht zerpflückt, die meisten Arduino 
LIBs machen was sie sollen, natürlich nicht alle und fehlerfrei gibts 
selten.
Wer nur etwas programmieren kann (so wenig wie ich z.B.) der kann das 
auch leicht korrigieren, aber ein DS18S20 wäre hilfreich.

> in dem du
> den Blog-Eintrag verlinken hat, der sich auf einen ganz anderen Sensor
> bezieht und so nicht für den DS18S20 passt.
> 
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
>
> Da der TO auf Fragen nur sehr bedingt reagiert, ist die ganze Diskussion
> hier allerdings etwas fruchtlos.

stimmt, aber da nun einige schon genug Zeit reingesteckt hatten ist das 
nicht für den TO sondern für alle Interessierten.

Sollte meine genannte LIB wirklich den DS18s20 nicht können habe ich 
hier dazu gelernt und behalte das im Hinterkopf!

von Helmut O. (magahigi)


Lesenswert?

Ralf S: schrieb:
> Hallo Helmut,
> kann sein, dass ich es bei den Posts oben übersehen habe -> ich konnte
> noch keinen Schaltplan entdecken.
>
> Stell doch bitte mal einen Schaltplan hier ein. Und eventuell zusätzlich
> ein Foto vom Aufbau, dann kann man überprüfen, ob der Aufbau auch dem
> Schaltplan entspricht.

Hallo, Ralf,
wie soll ich den Schaltplan zeichnen?
Wäre einfach auf Papier und abfotografieren in Ordnung?

von Stefan F. (Gast)


Lesenswert?

Helmut O. schrieb:
> Wäre einfach auf Papier und abfotografieren in Ordnung?

Aber sicher doch!

von Ralf S: (Gast)


Lesenswert?

Hallo Helmut,
ja, zeichnen und abfotografieren ist in Deinem Fall in Ordnung. Schöner 
ist natürlich ein Schaltplan aus einem Programm, aber da muss man sich 
ja erstmal einarbeiten. Mir würde eine handgefertigte Skizze reichen.

Und ein Foto vom realen Aufbau. Damit kann man dann vergleichen, ob die 
Idee (=Schaltplan) mit der Praxis (=aufgebaute Schaltung) übereinstimmt. 
Fehler beim Aufbau passieren nämlich fast jedem mal, auch geübteren 
Bastlern.

von Ralf S: (Gast)


Lesenswert?

Ach ja, und bitte auch noch den vollständigen Sketch für den Minimaltest 
aus dem Post oben.


>Manfred schrieb:
>> Schreibe einen einfachen Ablauf:
>> Definiere Port
>>
>> Setze Port high
>> Mache 2 Sekunden Pause
>> Setze Port low
>> Mache 2 s Pause
>> und wieder auf "Setze Port high"
>>
>> Wenn das Relais nicht schaltet, nehme das Meßgerät in die Hand und
>> ergründe die Ursache.

>* Das habe ich heute als erstes gemacht.
>Erfolg:
>Das Relais Tongling 5V) schaltet genau 1 mal ... dann leuchten die rote
>und die grüne LED am Relais gleichzeitig, und nix passiert mehr.
>Was die Ursache sein könnte, weiß ich nicht ...
>Helmut

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Wolfgang schrieb:
>> Ich habe mich auf deinen Betrag bezogen und den auch zitiert,
>
> nicht in diesem Posting:
>
> Wolfgang schrieb:
>> Das mag ja alles sein. Mit einem DS18S20 kann der aber so nicht ...

Genau dort, wenn du mal vollständig zitierst

Wolfgang schrieb:
> Joachim B. schrieb:
>> dieser funktioniert bei mir mit einem DS18B20
>>
> 
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
>>
>> und ich vertraue dem Kollegen
>
> Das mag ja alles sein. ...

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Genau dort, wenn du mal vollständig zitierst

wir reden echt aneinander vorbei, müssen hier keine 
Nebenkriegsschauplätze aufmachen.

Wenn die LIB aus:
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
mit
http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip

nicht mit dem DS18s20 funktioniert soll es mir recht sein.

von Helmut O. (magahigi)


Angehängte Dateien:

Lesenswert?

Hier erst mal mein Schaltungsaufbau:
Man erkennt auf dem linken Breadboard den dreibeinigen schwarzen 
DS18S20.
Sein (von uns aus) linkes Beinchen ist direkt mit dem Ground-Pin des 
Nano verbunden, sein mittleres mit Pin 2, und das rechte Beinchen über 
das Breadboard mit dem 5V-Pin. Indirekt, weil vom 5V am Breadboard ein 
Widerstand zum mittleren Beinchen führt.

Unten sieht man das Relais. Dessen rotes Kabel geht auch direkt zum 5V 
des Nano, das  mittlere zu Ground, und das braune (an der roten LED des 
Relais) zu D12.

Ein 2. Kabel geht vom D12 am selben Breadboard, auf dem auch der Nano 
sitzt, zu einem Widerstand, zu einer LED und von dieser zu einem roten 
Kabel, das einfach so dahängt, ohne Kontakt.
Wenn ich das mit dem Ground verbinde, leuchtet die LED und das Relais 
schaltet - egal, ob über oder unter 20°C ...

Jetzt versuche ich noch, eine brauchbare Zeichnung zu erstellen, die ich 
dann auch noch ins forum schicke.

Helmut

von otto (Gast)


Lesenswert?

Geiler Thread,

seit 4 Tagen versucht hier jemand ne Lamp an- und auszuschalten.
Mit gehfühlt 100 Helfern.

Mit genug Schub bekommt man auch Schweine zum Fliegen, dachte ich 
bisher.

Stimmt aber nicht.

Das Wochenende wird zu weiteren 233 Beiträgen führen.
Ich ess mein Popcorn aber lieben im Kino ;-)

Und dann noch dieser "M Ing." hier, zum schiessen!!!

von Helmut O. (magahigi)


Angehängte Dateien:

Lesenswert?

So - jetzt habe ich auch den Schaltplan irgendwie hingekriegt.
Ob der zur Lösung meines Problems etwas beitragen kann?

von Thomas F. (thomas_82)


Lesenswert?

2,2k Ohm Widerstand an 5V für eine LED ist gefühlt "etwas" zu hoch.


Ist das "Ding" nach
2,2k ohm -> led -> Ding
Mitte unten gelbe Linie höhe RST Pin eine Diode?

von Helmut O. (magahigi)


Lesenswert?

Thomas F. schrieb:
> 2,2k Ohm Widerstand an 5V für eine LED ist gefühlt "etwas" zu hoch.
>
> Ist das "Ding" nach
> 2,2k ohm -> led -> Ding
> Mitte unten gelbe Linie höhe RST Pin eine Diode?

Hallo, Thomas,
ja, das ist eine Diode, eine LED.

von Stefan F. (Gast)


Lesenswert?

Schöner Plan, fotografiere ihn beim nächsten mal senkrecht von oben, 
dann kann man ihn viel besser erkennen.

> Ist das "Ding" nach 2,2k ohm -> led -> Ding
> Mitte unten gelbe Linie höhe RST Pin eine Diode?
> ja, das ist eine Diode, eine LED

Drehe die Diode richtig herum oder lasse sie besser weg. Die hat dort 
keine sinnvolle Funktion.

Hast du den Ausgang jetzt mit pinMode(12, OUTPUT) konfiguriert?

Welche Spannungen misst du bei HIGH und LOW Pegel?

Hast du vor, Rückfragen zu beantworten um Hilfe zu bekommen, oder willst 
du uns nur mit wiederholten Fragen auf Trab halten?

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> du gehst von der anderen LIB aus, ich von der von mir gezeigten, aber
> nein ich werde die von mir verlinkte LIB nicht sezieren ob du Recht
> hast.

Was hast du denn jetzt gegen die Lib?
Die OneWire-Lib ist doch in Ordnung - auch für den DS18S20.
http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
Die Library hat überhaupt keine speziellen Funktionen, die auf den 
DS18x20 abzielen.

Was so nicht für den DS18S20 funktioniert, ist der im Blog gezeigte Code 
zum uploaden und betrachten der Messdaten im Serial Monitor. Ich 
schreibe jetzt nicht nochmal, was an den Daten vom DS18B20 anders ist, 
als an denen vom DS18S20.

Im Beispiel DS18x20_Temperature, das bei der OneWire Library dabei ist, 
wird doch der Code zur automatischen Auswertung beider Sensortypen 
(DS18S20 und DS18B20) sogar gezeigt. In den Library-Code muss man dafür 
nun wirklich nicht ein gucken.
Aber das nützt alles nichts, wenn man nicht weiss, was man tut und zu 
faul ist, mal die beiden Datenblätter nebeneinander zu legen und Fig.4 
zu betrachten.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Aber das nützt alles nichts, wenn man nicht weiss, was man tut und zu
> faul ist, mal die beiden Datenblätter nebeneinander zu legen und Fig.4
> zu betrachten.

was erzählst du das mir, hast du keinen leeren Schrank?

ich bin nicht zu faul habe das sogar aufgebaut und die Funktion für 
einen DS18B20 bewiesen und mich interessiert es nicht ob es mit einem 
DS18s20 und dieser LIB funktioniert, ein User sagt ja und nun?

Wenn der TO was lernen wollte kann er gerne reinschauen oder eine andere 
LIB nutzen.
Das ist doch hier nicht das Problem und nun geh woanders spielen.
Hier reinpoltern dem TO nicht helfen und andere User anpinkeln scheint 
deine Masche zu sein?

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Hier reinpoltern dem TO nicht helfen und andere User anpinkeln scheint
> deine Masche zu sein?

Nun ist aber mal gut. Wenn der TO auf Rückfragen nicht reagiert, ist das 
sein Problem.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> und zu
> faul ist, mal die beiden Datenblätter nebeneinander zu legen

du hattest MICH zitiert meintest offensichtlich den TO?

dann schreib das doch, wäre ich im Hellsehen besser würde ich Lotto 
spielen :)

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> du hattest MICH zitiert meintest offensichtlich den TO?

Das Blog-Zitat kommt doch von DIR. Was nützt es dem TO mit seinem 
DS18S20, wenn du auf Code verweist, der genau für einen DS18B20 
geschrieben ist. Ein Blick ins Datenblatt zeigt sofort den Grund - DIR 
und dem TO.

von Helmut O. (magahigi)


Lesenswert?

Stefanus F. schrieb:

>> Ist das "Ding" nach 2,2k ohm -> led -> Ding
>> Mitte unten gelbe Linie höhe RST Pin eine Diode?
>> ja, das ist eine Diode, eine LED
>
> Drehe die Diode richtig herum oder lasse sie besser weg. Die hat dort
> keine sinnvolle Funktion.

* Hallo, Stefanus. Meine Antwort hat ja etwas auf sich warten lassen.
Ich muss mitunter auch noch anderen Beschäftigungen nachgehen ... sorry.

Ja, die Diode habe ich von dort wieder entfernt. Mit der habe ich nur 
probiert, was passiert, wenn sie parallel zum Relais angesteuert wird.
Der Effekt war aber, dass beim Schließen des Dioden-Kontakts diese 
brennt UND  das Relais schaltet ... woraus ich mir keinen Reim machen 
kann.


>
> Hast du den Ausgang jetzt mit pinMode(12, OUTPUT) konfiguriert?

* Ja, das habe ich!

Mein Gedanke dazu: Ich  muss ja nicht alles verstehen ... (alles lacht, 
OK)
Warum?
Während ich gestern eine ganze Liste von Fehlermeldungen bekommen habe, 
ist die Deklaration als OUTPUT heute anstandslos durchgegangen ...
Allerdings habe ich meinem Relais nicht mehr über den Weg getraut und es 
durch eine LED ersetzt. Schalten ist ja schalten, stimmt's?
Und zu meiner größten Überraschung zeigt der Serial Monitor nur 
vernünftige Temperaturen an - UND: beim Überschreiten der 20°C geht die 
LED aus!!
Kurz:
Zum ersten Mal hat's geklappt!

Danke vielmals für Eure Unterstützung, Leute, ganz besonders für die 
sachdienliche natürlich!!!
Die LED hat reagiert!!! Jippiie!!!

> Welche Spannungen misst du bei HIGH und LOW Pegel?

Ich messe 4,48 Volt ...

Mit freudigen Grüßen

Helmut

von Helmut O. (magahigi)


Lesenswert?

Thomas F. schrieb:
> magahigi schrieb:
>> void setup() {
>> pinMode(relaisPin = 12);
>> .... }
>
> Am besten mal auf den Link von vorhin klicken.
> https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/

Ja! Jetzt habe ich auch den Fehler entdeckt: Das Gleichheitszeichen 
hätte ein Komma sein müssen.

Aus Fehlern lernen wir! Selbst ich ... dieser passiert mir 
wahrscheinlich nicht mehr.

Und: Die Schaltung funktioniert!!!!

Ob ich diesen Thread irgendwie formal beenden muss, weiß ich nicht.
Für diesen letzten Tipp wäre ich dann auch noch dankbar.

Immer noch freudige Grüße

Helmut :-))

von leo (Gast)


Lesenswert?

Helmut O. schrieb:

>
> Und: Die Schaltung funktioniert!!!!

Super, und als 3) schaust du mal nach, was "Hysterese" bedeutet.

Leo, und wieder weg, nicht weg, weg, ...

von Joachim B. (jar)


Lesenswert?

Helmut O. schrieb:
>> Welche Spannungen misst du bei HIGH und LOW Pegel?
>
> Ich messe 4,48 Volt ...

ja ist klar....

was misst du denn bei tri state wenn high und low immer 4,48V bringen?

von Manfred (Gast)


Lesenswert?

Wolfgang schrieb:
> ist die ganze Diskussion hier allerdings etwas fruchtlos.

Sie ist insoweit fruchtlos, als dass Helmut nicht sinnvoll nachtestet 
und antwortet. In anderen Punkten finde ich sie schon interessant!

Joachim B. schrieb:
> Hier reinpoltern dem TO nicht helfen und andere User anpinkeln scheint
> deine Masche zu sein?

Da wird Dir niemand widersprechen. Ich habe es mir verkniffen, Wolfgang 
hat schon genug vermeidbare Unruhe in den Thread gebracht.

----

Was die Libraries angeht: Arduino bringt von Haus aus die 
DallasTemperature.h mit, die ich in meinem Beispiel eingebunden hatte. 
Sie behauptet mit 18S20, 1820, 18B20 und weiteren umgehen zu koennen:
1
// Model IDs
2
#define DS18S20MODEL 0x10  // also DS1820
3
#define DS18B20MODEL 0x28
4
#define DS1822MODEL  0x22
5
#define DS1825MODEL  0x3B

Nachdem Helmut schrieb, dass er glaubhafte Temperaturwerte hat, kaufen 
wir das mal.

Ich denke mal, diese Komödie ist nun beendet.

von Rainer V. (a_zip)


Lesenswert?

Hallo, ich fand die Beiträge zum Problem auch ganz interessant und es 
hätte doch deutlich ätzender werden können! Jetzt bleibt doch eigentlich 
nur noch die Frage, warum das Relais nicht arbeitet, wenn doch die Led 
funktioniert! Oder kam das Rel. zu Testzwecken ins Spiel? Wie auch 
immer...ich hoffe, dass dem TO klar ist, dass er das Rel. wahrscheinlich 
nicht direkt an einen Port hängen kann. Wenn der benötigte Strom zu groß 
ist, muß das Rel. über einen Transistor angesteuert werden. Und der Port 
muß mit einer Diode geschützt werden...
Gruß Rainer und viel Spass weiterhin!

von Hopsink (Gast)


Lesenswert?

M.Eng Ing. Daniel D. (Firma: Embedded-Laboratorys IBC)

löst das Problem gegen Einwurf kleiner Münzen sicher souverän.

von Manfred (Gast)


Lesenswert?

Rainer V. schrieb:
> ich hoffe, dass dem TO klar ist, dass er das Rel. wahrscheinlich
> nicht direkt an einen Port hängen kann.

Dem TO ist garnichts klar.

Aber, wenn Du Dir das Bild 24.01.2019 15:11 angeschaut hättest, hättest 
Du gesehen, dass er ein Chinamodul verwendet, was direkt vom µC 
ansteuerbar ist. Natürlich muß man auch das richtigherum anklemmen ... 
aber scheint ja gelöst zu sein.

von Rainer V. (a_zip)


Lesenswert?

Manfred schrieb:
> Dem TO ist garnichts klar.
>
> Aber, wenn Du Dir das Bild 24.01.2019 15:11 angeschaut hättest

Angeschaut schon, aber nicht genau genug...und da Chinamodule nicht zu 
meinem täglichen Bastelfreuden gehören, habe ich mich nur gefragt, was 
das denn nur für ein merkwürdiges Relais ist :-)

Hopsink schrieb:
> M.Eng Ing. Daniel D. (Firma: Embedded-Laboratorys IBC)

...und das hat uns ja wohl über alle Massen beeindruckt oder!?
Gruß Rainer

von Wolfgang (Gast)


Lesenswert?

Rainer V. schrieb:
> ...ich hoffe, dass dem TO klar ist, dass er das Rel. wahrscheinlich
> nicht direkt an einen Port hängen kann ...

Das halte ich auch eher für unwahrscheinlich.
Auf einem vernünftigen Bild von so einem Relaismodul sieht man, dass 
sowohl Treibertransistor als auch Freilaufdiode auf dem Modul vorhanden 
sind.

Relaismodul:
https://www.ebay.de/itm/132267277186

Helmut O. schrieb:
> Schaltungsaufbau.jpg

von Jemand (Gast)


Lesenswert?

Hallo

wenn gefühlt 70% der Beiträge dieses Thread wegfallen würden, und dazu 
zählen eindeutig nicht(!) die von Helmut O. als TO, könnte dieser Thread 
sogar richtig hilfreich für so manchen, zugegeben leider ungeschickt 
vorgehenden, Anfänger und "Zwangsnutzer" sein.

Ja der richtige und Ziel bringende Weg ist es natürlich in kleinen 
Schritten vorzugehen und immer zu versuchen zu verstehen was da jeweils 
im Sketch (des aufbauenden Tutorials bzw. Kurses)gemacht wurde.

Aber genau daran scheitern die meisten Arduino und ganz allgemein µC 
Tutorials (wohl auch in den Ausbildungseinrichtungen?!).
Es wird oft in kleinsten auf Trivialitäten bezüglich der Hardware über 
mehrere Seiten hinweg eingegangen, und in den ersten Kapiteln sehr 
genau, oft ermüdend und wiederholend, die ersten Grundlagen und 
Anwendungen der Programmiersprache (der Sketcherstellung) erklärt aber 
dann:
Auf einmal kommt, ohne jegliche tiefere Erklärung im Programm (Sketch) 
ein Kommentar so etwas wie: "Ein Objekt erzeugen" oder noch heftiger 
"Eine Instanz des Objekt instantiieren" vorzugsweise noch mit 
englischsprachigen Bezeichnungen, auch dort wo sie nicht unbedingt 
notwendig sind, im eigentlichen Programmcode (Sketch).
Und das dann nur noch Fragezeichen beim Lernenden auftauchen ist 
selbstverständlich. Denn im Tutorial selbst wird darauf meist nicht 
erklärend eingegangen, sondern es wird den lernenden nur einfach wie ein 
Knochen den Hund hingeworfen (Wobei der Hund mit den Knochen was 
anfangen kann - also es ist mehr so als wenn man den Hund ein Buch vor 
die Nase wirft...).

Und jetzt?

Googeln - entweder wieder nur (für einen Anfänger!) Kauderwelsch oder 
Erklärungen aus den PC Bereich der wieder zu neuen Fragen führt...
Damit Fehler und falsche Vorstellungen nahzu garantiert.
Es fehlt einfach an guten und in die Tiefe gehende µC und gerade auch 
speziell Arduino Tutorials die eben die nicht so einfach zu 
verstehenden, aber notwendigen, tief ergehenden Bestandteile der 
Programmierung (Egal ob nun in C oder C+ oder irgendwelchen 
"vereinfachten" Anpassungen wie beim Arduinogesamtsystem) wirklich 
verständlich erklären - und das sind eben halt nicht(!) vordringlich die 
Sachen wie eine z.B.Bibliothek  eingebunden wird (das kann man "Überall" 
und gut verständlich nachlesen) und, gefühlt über viele Seiten gehende, 
Erklärungen zu Sachen wie PinMode DigitalWrite usw., sondern auch was 
diese Objekte, Instanzen usw. eigentlich -genau- sind, warum sie genutzt 
werden, die Vorteile und Ideen dahinter verständlich machen und warum 
sie sich manchmal von der Anwendung her unterscheidenden, warum ein µC 
bzw. Arduino Prgramm Sketch so und nicht anders aufgebaut sein sollte 
und so einiges mehr was einen Anfänger und oder "Codezusammenwürfeler" 
immer wieder "vor die Wand fahren lässt"

Wenn es in der Ausbildung genause bescheiden mit der Wissensvermittlung 
aussieht ist es total verständlich das Probleme und ungeschicktes 
Vorgehen beim erlernen entstehen bzw. selbst beim besten Willen des 
Lernenden diese es einfach nicht verstehen und sich hineindenken können 
so wie es bei Helmut eventuell(ich kann mich natürlich auch irren - aber 
es gibt eindeutig genug Fälle wo es so ist) auch der Fall ist,und es 
sehr aufwendig und nervend ist das Wissen und Ziel bringende Hilfe zu 
vermitteln.
Wenn es sich dann noch tatsächlich um eine "aufgedrückte" Aufgabe 
handeln sollte (weil es der Lehrplan so will) ist es total 
nachvollziehbar das so manche,  nicht wirklich von Thema begeisterte, 
nur noch Verwirrt sind und ein mit "gefährlichen" Halbwissen die Aufgabe 
auf leider total falschen Weg zu lösen versuchen.

Jemand

von Stefan F. (Gast)


Lesenswert?

Das eigentliche Hauptproblem des TO (nachdem sein Monitor plausible 
Temperaturwerte anzeigte) war, dass er den Ausgang zum Relais-Modul 
nicht als Ausgang konfiguriert hat.

Weiterhin hat er nicht verstanden, wie das Relais Modul funktioniert, 
deswegen hat er sehr irritiert reagiert, dass eine zusätzliche 
Status-LED einen dauerhaften Schaltvorgang auslöste.

Dabei ist es ganz einfach: Das Relais Modul ist wie üblich mit einem PNP 
Transistor ausgestattet. Es schaltet daher bei LOW Pegel ein und dazu 
genügt ein geringer Steuerstrom.

Da der Pin am Mikrocontroller nicht als Ausgang konfiguriert war, hat er 
durch seinen Schreibzugriff auf das PORT Register (gekapselt durch die 
Arduino Funktion digitalWrite()) lediglich den internen Pull-Up 
Widerstand ein/aus geschaltet.

Als er nur die LED alleine angeschlossen hatte (zwischen I/O Pin und 
GND) konnte er ihre Reaktion auf die Temperaturänderungen deutlich 
sehen. Allerdings erreichte die LED nicht ihre volle Helligkeit, weil 
der interne Pull-Up Widerstand recht hochohmig ist. Es reicht aber, um 
den Unterschied zwischen an und aus zu erkennen.

Als er nur das Relais-Modul anschloss, reagierte dieses gar nicht, denn 
es will mit LOW Pegel angesteuert werden. Der interne Pull-Up liefert 
aber nur HIGH Pegel.

Als er beide zusammen anschloss, zog die LED die Spannung vom internen 
Pull-Up und vom Transistor des Relais-Moduls weit genug herunter, dass 
das Relais permanent anzog. Dabei leuchtete auch die LED permanent.

Des Rätsels Lösung war am Ende, den Pin mit digitalMode(12,OUTPUT) als 
Ausgang zu konfigurieren. Das hat der TO trotz meines deutlichen 
Hinweises aber erst Stunden später hinbekommen, weil er die Doku dazu 
erst nicht gelesen hatte und dann hat er sie nicht verstanden. Aus den 
oben beschrieben Beobachtungen konnte er keine Schlüsse ziehen, hat aber 
irttümlich angenommen, dass aus dem Mikrocontroller bereits ohne 
pinMode() ein korrektes Signal heraus käme.

Dazu kam noch, dass der TO lange verweigert hat, die Spannung an dem 
fraglichen Pin zu messen. Hätte er das getan, wäre hoffentlich auch ihm 
die Fehlerursache klar geworden. Als er es dann endlich tat, meldete er 
für HIGH und LOW nur einen Spannungswert (4,48 Volt), womit meine Frage 
uneindeutig und falsch beantwortet wurde.

Der TO hat selbst massiv dazu beigetragen, dass er nicht voran kam. Das 
ist meine Sicht der Dinge.

Mein Rat an Helmut:

Du hast eine Hütte gebaut, bevor du den Hammer richtig halten kannst.

Fange mit einfacheren Aufgaben an. Zuerst solltest du ganz ohne Computer 
die Eigenschaften der Bauteile erforschen, die du verwendest:

Widerstand
Diode
LED
Transistoren (PNP, NPN, vielleicht auch MOSFET)
Relais-Modul

Dann solltest du die Grundlagen der Programmiersprache und des gcc 
Compilers auf dem PC lernen, am besten anhand einer Windows oder Linux 
Konsolen-Anwendung. Die QT-Creator IDE wird Dir dabei helfen, es geht 
aber auch ohne IDE. Auch die Fehlermeldungen des Compilers sollst du 
erstmal auf dem PC kennen lernen, bevor du dich an 
Mikrocontroller-Programmierung wagst.

Wenn du dann den Mikrocontroller programmierst, solltest du mit 
einfachen Sachen anfangen. Also eben keine Sensoren die ein komplexes 
serielle Kommunikations-Protokoll nutzen dass du nicht durchblickst. 
Fange besser mit LEDs und Tastern an. Programmiere Timer, Quiz-Buzzer, 
Blinker - alles was ohne spezielle "Libraries" auskommt.

Beschäftige dich mit Multitasking: Lass eine LED im Sekundentakt 
blinken, eine andere soll regelmäßig blitzen und währenddessen sollen 
noch zwei Taster abgefragt werden, mit denen eine dritte LED an und aus 
geschaltet werden kann. Realisiere das, ohne eigene Interruptroutinen zu 
programmieren. Nur auf Basis von loop() und millis().

Das klingt vielleicht trivial, aber mach das mal. Glaube mir: Es wird 
lehrreich. Was du dabei lernst, wirst du in allen künftigen Projekten 
brauchen.

Messe die Temperatur mit einem 10k Ohm NTC und einem analogen Eingang. 
Finde heraus, wie man die nicht-linearität des Sensors ausgleicht.

Erst wenn du mit dem Mikrocontroller und den einfachen analogen 
Bauteilen drumherum vertraut bist, halte ich es für angemessen, sich mit 
Modulen/Chips zu beschäftigen, die ein Kommunikationsprotokoll haben.

Beitrag #5709437 wurde vom Autor gelöscht.
von Theor (Gast)


Lesenswert?

Jemand schrieb:
> [...]
> Ja der richtige und Ziel bringende Weg ist es natürlich in kleinen
> Schritten vorzugehen und immer zu versuchen zu verstehen was da jeweils
> im Sketch (des aufbauenden Tutorials bzw. Kurses)gemacht wurde.

Genau!

> Aber genau daran scheitern die meisten Arduino und ganz allgemein µC
> Tutorials (wohl auch in den Ausbildungseinrichtungen?!).
> Es wird [...]

... von Dir nun die verwendete Didaktik verallgemeinert. Was davon auf 
die Situation des TO zutrifft, weiss kein Mensch. Was der Anteil des TO 
an der Situation ist, weiss auch niemand. Der Tenor ist dann, dass 
andere Schuld haben, wenn man nicht weiterkommt. Nur bringt diese 
Feststellung, egal ob sie zutrifft oder nicht, dem TO gar nichts.
Falls sie zutrifft, wäre die vernünftige Frage, wo er denn gute 
strukturierte, didaktisch hochwertige Information in Bezug auf ein 
bestimmtes, umgrenztes Thema findet. Die stellt der TO aber nicht. 
(Siehe Netiquette). Und das ist seine Verantwortung!

> Und jetzt? [...]

Noch mehr Verallgemeinerungen, von denen wieder keiner weiss, was hier 
wirklich zutrifft. Und insgesamt sind wieder Andere schuld.
Die Feststellung, dass es im Internet einen Haufen ungeeignetes Zeug 
gibt, ist nicht neu. Es erfordert schon eine gewisse Kompetenz in der 
Wissensaneignung Darstellung von Information zu bewerten und filtern.
Das Fehlen dieser Kompetenz kann ja ausgeglichen werden, aber dazu muss 
man eben, aufgrund von Selbstbeobachtung gezielte Fragen stellen können. 
Das ist wiederum die Verantwortung des TO selbst.

> [...] und so einiges mehr was einen Anfänger und oder > "Codezusammenwürfeler"
> immer wieder "vor die Wand fahren lässt"
Wenn er blind dem folgt, was man ihm vorsetzt. Wenn er der Illusion - 
oder sagen wir mal der Werbeaussage -, folgt, dass jeder ohne Vorbildung 
programmieren kann.
Wenn ich mir so anschaue, wie viele Leute hier mit Arduino-Problemen 
auftauchen, - warum sind die eigentlich nicht im Arduino-Forum? -, dann 
kann ich vermuten, dass das Versprechen nicht gehalten, die 
Zusammenhänge nicht ausreichend dokumentiert sind, die Gemeinschaft sich 
nicht untereinander helfen kann, weil sie inkompetent ist.
Aber dabei muss man ja nicht stehenbleiben oder den Kram nun in ein 
anderes Forum schleppen, wo dann andere für einen denken sollen.

> Wenn es in der Ausbildung genause bescheiden mit der Wissensvermittlung
> aussieht [...]
Ja, wenn das Wörtchen "wenn" nicht wär', ...

> Wenn es sich [...] um eine "aufgedrückte" Aufgabe
> handeln sollte [...] ist es [...]
> nachvollziehbar das [...]

Schön. Es ist nachvollziehbar. An der Situation ändert das nichts.
Es mangelt uns ja nicht an Vorstellungsvermögen oder Mitgefühl.
Aber wir sind hier moralisch nicht verpflichtet die Mängel des 
Internets, des Bildungssystems oder des TO in genau der Form 
auszugleichen, die der TO nachfragt.

Wenn man (vermutlich) absichtlich ein fachgebundene Schule (FOS) wählt, 
dann muss man die Kröte eben schlucken. An sich sollte es, da man ja 
vorher wählen konnte, gar keine "Kröte" sein, sondern was, was einen aus 
purem Interesse und Leidenschaft antreibt.
Wir können das Problem nicht lösen, falls es darin besteht, dass die 
Wahl falsch war, die Leidenschaft abgekühlt ist oder gar nicht vorhanden 
war.

Um das ein wenig zu relativieren: Es ist ein in den Texten merklicher 
Unterschied, ob jemand wenig Ahnung hat, aber motiviert ist oder ob 
jemand keine Ahnung hat und nur externen Forderungen gerecht werden will 
oder ob jemand sogar nicht mal die allgemeinen, intellektuellen 
Fähigkeiten hat.

Uns muss es überlassen blieben in welchen Fall wir welche Menge an 
Energie stecken und worin unsere "Hilfe zu Selbsthilfe" besteht.

Gerade der letzte Punkt wird hier so oft vergessen oder sogar als 
Argument gegen die Antworter hier verwendet:
Es geht hier um Hilfe zu Selbsthilfe , nicht die Rettung der Welt oder 
Einzelner vor den Realitäten.

von Laß gehen, Elfriede (Gast)


Lesenswert?

Theor schrieb:

> Gerade der letzte Punkt wird hier so oft vergessen oder sogar als
> Argument gegen die Antworter hier verwendet:
> Es geht hier um Hilfe zu Selbsthilfe , nicht die Rettung der Welt oder
> Einzelner vor den Realitäten.

Nein.

In klarer, unmißverständlicher Weise gesagt:

Es geht darum, auch einmal einfach die Fresse und die Pfoten 
stillzuhalten, wenn man dem Fragenden nicht helfen will , oder es 
nicht kann .

Niemandem hilft es, seitenlange Pamphlete mit flammenden Ansprachen 
lesen zu sollen, die nicht einen Funken hilfreich sind, sondern nur den 
Autor in stralendem Licht dastehen lassen sollen.

In diesem Ton mußte die Formulierung erfolgen, da sie sonst von 
Gutmeinenden nicht versatnden werden würde.

Ende der Ansage.

von Rainer V. (a_zip)


Lesenswert?

Auch ohne langes Geschreibsel kann man hier beispielhaft gut sehen, was 
alles passieren kann, wenn ein relativ unbedarfter Kopf die 
Versprechungen aus einer Baukastenwelt "ernst" nimmt. Er nimmt sich vor, 
mal eine Temperatur zu messen. Im Harware-Baukasten findet er diverse 
Module, die passen könnten und dann kopiert er sich noch ein paar 
Softwareschnipsel und dann kann er anschließend die relativ inhaltslose 
Frage stellen: "Funktioniert nicht". Gut, der TO hat hier mit einer 
nicht ganz so inhaltslosen Frage begonnen, aber im Laufe der ganzen 
Diskussion sieht man doch deutlich, welche Abründe an Wissensmangel 
überbrückt werden müssen. Und ich unterstelle dem TO keinenfalls, daß er 
nicht lernwillig ist! Aber die richtigen Fragen muß man sich immer hart 
erarbeiten.

Als Student habe ich Abiturienten Mathe-Nachhilfe gegeben und (fast) 
immer damit anfangen müssen, die simpelsten Grundlagen hoch zu holen. 
Also Grundrechenarten!, Formeln umstellen, Dreisatz...was hier bedeuten 
könnte ohmsches Gesetz, analoge und digitale Grundschaltungen und 
vielleicht auch das Lernen einer Programmiersprache, ohne gleich mit 
einem Controller loszulegen!
Gruß Rainer

von Rainer V. (a_zip)


Lesenswert?

...und wenn der TO den ganzen Krempel jetzt nicht in der Schublade 
verschwinden läßt, dann wird er mit seinem nächsten Projekt deutlich 
mehr Spass haben! Und dazu wünsche ich Spass und Erfolg!
Gruß Rainer

von Jemand (Gast)


Lesenswert?

Hallo

"Nein.

In klarer, unmißverständlicher Weise gesagt:..."

Im vorliegenden Fall kann man aber klar erkennen das auch die 
sogenannten "Ansprachen" wichtig sind.
Es hilft zwar nicht direkt bei der Frage des TO aber hängt diesmal aber 
doch eng damit zusammen und mag so manchen, Fehler bzw. massiv ein 
ungeschicktes Vorgehen von anderen Anfängern zu minimieren.

Außerdem: So etwas ist für ein Forum normal, und trägt deutlich zur 
Attraktivität bei - ein Forum ist auch Unterhaltung und auch mal 
heftigere Diskussion.

jemand

von Wolfgang (Gast)


Lesenswert?

120 Postings, um einen Aufruf von pinMode(), einen Faktor 8 bei der 
Rohdatenskalierung und eine if-Abfrage und auf die Reihe zu kriegen, ist 
schon recordverdächtig ...

von Rainer V. (a_zip)


Lesenswert?

...ist mir trotzdem tausendmal lieber, als einem "faulen" Drittsemester 
seine Klausuraufgabe zu erklären!
Gruß Rainer

von Manfred (Gast)


Lesenswert?

Wolfgang schrieb:
> 120 Postings, ... , ist schon recordverdächtig ...

Da hast Du genug zu beigetragen, aber durchweg am Problem des TO vorbei.

von Wolfgang (Gast)


Lesenswert?

Manfred schrieb:
> Da hast Du genug zu beigetragen, aber durchweg am Problem des TO vorbei.

Wenn auf ganz konkrete Rückfragen keine Reaktion kommt und von anderen 
alle möglichen Nebelgranaten geschmissen werden, geht so ein Thread nun 
mal in die Breite. Ein bißchen Eigeninitiative als Reaktion auf 
Denkanstöße erwarte ich schon.
Ansonsten guck dir den Verlauf des Threads ruhig noch mal von vorne an.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Rainer V. schrieb:
> einem "faulen" Drittsemester

wenn du den Ursprungsposter meinst:

ich vermute mal, das "Helmut" ein alter Name, bzw. eine ältere Person 
ist.
Ich gehe weiterhin von aus, dß Helmut keinen (originalen) 
Computer-Technischen Hintergrund hat.

Helmut hat sich klar, freundlich und Präzise artikuliert, und konnte im 
allgemeinen die gestellten Fragen auch gescheit beantworten (sofern der 
Zusammenhang klar war oder erläutert wurde)

Was soll also das teilweise rüpelhafte Verhalten einiger 
Forenteilnehmer? Freut auch doch eher, das jemand euer Wissen gebrauchen 
kann, und übt euch in der Kunst der Höflichkeit und didaktischer 
Höchstleistungen ...

von Rainer V. (a_zip)


Lesenswert?

Wegstaben V. schrieb:
> ich vermute mal

Hey, anstatt zu Vermuten, hättest du besser mal die Beiträge gelesen! 
Und deine persönliche Meinung um den TO interessiert doch nicht einmal 
den "Bundeskunzler"
Also sag' was Konstruktives!!
Gruß Rainer
PS: oder bist du zufällig im 3. Semester?! :-) mußte sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.