NEU! UPGRADE IP 10 verfügbar!
Timberwolf VISU jetzt mit Graphic V Upgrade
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

Arduino als 1-Wire-Slave am Timberwolf

Alles zu 1-Wire im Allgemeinen. Für den Busmaster gibt es ein eigenes Unterforum unter Zubehör
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

Arduino als 1-Wire-Slave am Timberwolf

#1

Beitrag von Advenoni »

Hallo zusammen,

da ich bei mir zur Sicherheit meiner CO2-Flasche gerne den CO2 Gehalt in der Luft messen möchte (VOC fällt raus, da kein CO2 detektiert wird) wollte ich dies über einen Arduino als 1-Wire-Slave lösen. Der Arduino ließt den CO2-Sensor über PWM aus. Dies funktioniert soweit.
Nur die Simulation des Slave will nicht so wie sie soll.
Der Einfachheit halber wollte ich einfach einen DS18B20 simulieren und die Temperatur dann einfach umrechnen.
Als Bibliothek hab ich folgende verwendet: OneWireHub
Der gesamte Code wäre:

Code: Alles auswählen

#include <DS18B20.h>
#include <OneWireHub.h>

volatile unsigned long aktueller_Impuls;
volatile unsigned long letzter_positiver_Impuls;
volatile unsigned long letzter_negativer_Impuls;
volatile unsigned long Impuls_high;
volatile unsigned long Impuls_low;

const unsigned long Aufloesung=5000;
const unsigned long Min_high=2;
const unsigned long Min_low=2;
const int PWM_Eingang=2;

volatile unsigned long CO2_PWM;
unsigned long CO2_PWM_sp;
float CO2_real;

const uint8_t pin_onewire   { 3 };

auto hub    = OneWireHub(pin_onewire);

auto ds18b20 = DS18B20(DS18B20::family_code, 0x00, 0x00, 0xB2, 0x18, 0xDA, 0x00); // DS18B20: 9-12bit, -55 -  +85 degC

void setup() {
  Serial.begin(9600);
  pinMode(PWM_Eingang, INPUT);
  // Interrupt definieren
  attachInterrupt(digitalPinToInterrupt(PWM_Eingang), Zaehlen, CHANGE);
  hub.attach(ds18b20);
  Serial.println("Setup beendet");
}

void Zaehlen() { 
  aktueller_Impuls = millis();
  if (digitalRead(PWM_Eingang)) {
    Impuls_low = aktueller_Impuls - letzter_negativer_Impuls;
    letzter_positiver_Impuls = aktueller_Impuls;
  }
  else {
    Impuls_high = aktueller_Impuls - letzter_positiver_Impuls;
    letzter_negativer_Impuls = aktueller_Impuls;
    if ((Impuls_high > 0 ) && (Impuls_low > 0)) {
      CO2_PWM = Aufloesung * (Impuls_high - Min_high) / (Impuls_high + Impuls_low - Min_high - Min_low);
      Serial.print("CO2: ");
      Serial.println(CO2_PWM);
    }
  }  
}

void loop() {
  // following function must be called periodically
  hub.poll();
  // this part is just for debugging (USE_SERIAL_DEBUG in OneWire.h must be enabled for output)
  if (hub.hasError()) hub.printError();
  if (CO2_PWM_sp!=CO2_PWM) {
    CO2_PWM_sp = CO2_PWM;
    // (CO2_real+55)*36
    CO2_real = (float)CO2_PWM / 36.0 - 55.0;
    ds18b20.setTemperature(CO2_real);
    Serial.println(CO2_real);
  }
}
Ob mein Problem nun am Timberwolf oder Arduino liegt kann ich leider nicht sagen.
Daher wäre meine Frage ob evtl. jemand schon was ähnliches gemacht hat, oder ob es beim Timberwolf ähnlich wie beim WireGate noch die Möglichkeit gibt weitere Infos von den Sensoren anzuzeigen.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9742
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4865 Mal
Danksagung erhalten: 7721 Mal
Kontaktdaten:

#2

Beitrag von StefanW »

Advenoni hat geschrieben: So Dez 23, 2018 10:59 pmOb mein Problem nun am Timberwolf oder Arduino liegt kann ich leider nicht sagen.
Nun, dein Selbstbau wurde nie mit unserer Software getestet da uns unbekannt. Insofern wirklich ein DS18B20 genau emuliert würde, dann würdest Du ihn als solches auch sehen.

Advenoni hat geschrieben: So Dez 23, 2018 10:59 pmoder ob es beim Timberwolf ähnlich wie beim WireGate noch die Möglichkeit gibt weitere Infos von den Sensoren anzuzeigen.
Im Slave-Editor bekommst Du so ziemlich alles was Sinn macht. Mehr gibt es nur aus dem OWFS, das müsstest Dir aber auf einem Raspi oder so selbst installieren. Treiber für unsere Busmaster gibt es dazu, Infos im Software-Handbuch des PBM


lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#3

Beitrag von Advenoni »

Hallo Stefan,

ok, dann muss ich mal weiter suchen.
Erster Test mit Arduino als 1-Wire-Master und echtem DS18B20 ergab:
ROM = 28 8F BD 2A 07 00 00 62
INT = 401431894270098
Chip = DS18B20
Typ = Temperatursensor
Data = 1 6B 1 4B 46 7F FF 5 10 49
CRC = 49
Temperatur = 22.7 Celsius

Die gleiche Ausgabe mit meinem simulierten DS18B20:
ROM = 28 00 00 B2 18 DA 00 58
INT = 400017824218088
Chip = DS18B20
Typ = Temperatursensor
Data = 1 90 FE 4B 46 7F FF 0 10 78
CRC = 78
Temperatur = -23.0 Celsius

Wird also vom Arduino erkannt, warum derzeit noch nicht vom Timberwolf wird sich sicher noch rausstellen :-)

Gruß,
Martin

Hinzugefügt nach 2 Stunden 10 Minuten 4 Sekunden:
Hm,

will am TWS irgendwie nicht funktionieren.
Über Versorgung vom PBM und separat probiert.
Naja, jetzt ist erst Mal Weihnachten und irgendwann wird dann weiter nach der Ursache gesucht.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9742
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4865 Mal
Danksagung erhalten: 7721 Mal
Kontaktdaten:

#4

Beitrag von StefanW »

Hallo Martin,

kann ich jetzt so auch nicht viel beitragen. Oft sind es die übersehen Kleinigkeiten wir Chipmaske usw.

Möglich wäre auch, dass er auf den BusSearch (der komplex ist) nicht richtig funktioniert?

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#5

Beitrag von Advenoni »

Hallo Stefan,

ich werde das ganze einfach mal noch mit anderen Bibliotheken probieren. evtl. geht ja dann eine :D
hab ehrlich gesagt auch keine Ahnung wie der auf den Scan reagiert :?:

Aber was anderes:
Was machst du am Heilig Abend um halb 9 am PC und bist nicht bei deiner Familie? :naughty: :naughty: :naughty:

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#6

Beitrag von Advenoni »

So,
Kommunikation mit TWS geht nun.
Andere Bibliotheken brachten keine Besserung, aber die gingen nicht mal an meinem Arduino als Master.
Ausschlaggebende Änderung:
Man musste in der"OneWireHub_config.h" den Eintrag "#define OVERDRIVE_ENABLE" auf 1 setzen.
Nur funktioniert leider mein PWM auslesen des Sensors nicht mehr :roll:
Ausweg wäre hier das Analogsignal, aber das ist von der Auflösung her leider mäßig... (Differenz von 1,6V für 0-5000 ppm)

Naja, irgendwie wird das Problem schon noch zu lösen sein.

Was mir hier noch auffiel:
Ich kann bei den 1-Wire-Geräten ja einen Offset vorgeben. Ist es eigentlich irgendwie auch möglich mit einer Formel ?
Ich müsste in meinem Fall für die Umrechnung +55*28 rechnen... Oder nur über die Logik machbar?

Gruß,
Martin
Zuletzt geändert von Advenoni am Mi Dez 26, 2018 3:34 pm, insgesamt 1-mal geändert.
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9742
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4865 Mal
Danksagung erhalten: 7721 Mal
Kontaktdaten:

#7

Beitrag von StefanW »

Hallo Martin,
Advenoni hat geschrieben: Mi Dez 26, 2018 3:31 pmIst es eigentlich irgendwie auch möglich mit einer Formel ?
Ich müsste in meinem Fall für die Umrechnung +55*28 rechnen...
im MOment sind komplexere Formeln im 1-Wire Geräteeditor nicht geplant, weil das vom Aufwand / Nutzenverhältnis keine gute Verwendung der Kunden-Budgets wäre. Aber mit der Logik geht es dann, weil da ein Baustein mit einer Polynomformel vorgesehen ist, mit dem Du dann fast alles machen kannst.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#8

Beitrag von Advenoni »

Hallo Stefan,

danke für die Rückmeldung noch. Hab jetzt einfach die Umrechnung im Arduino geändert, dann geht es zwar nicht ganz so genau, aber mit einfacher Formel :-)
Kommunikation über 1-Wire sowie Auswertung über PWM funktionieren nun soweit problemlos (kann zwar bis zu einer Minute dauern, bis ein neuer Wert ausgewertet werden kann, aber für meine Anwendung ausreichend) und es ist interessant den Unterschied in der Auswertung zwischen dem CO2-Sensor und einem VOC-Sensor von euch zu sehen.
Bild
Die zum Teil kurzen Anstiege sind glaub vom Schaltschrank öffnen (da hängen die Sensoren gerade zum Test).
Gestern der Anstieg bei hauptsächlich CO2 weiß ich gerade nicht wo er herkommt, heute Abend der Anstieg vom VOC war eindeutig das Käse-Fondue :D

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9742
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4865 Mal
Danksagung erhalten: 7721 Mal
Kontaktdaten:

#9

Beitrag von StefanW »

Jep. sehr schön.

Und wie man sieht, der VOC sieht mehr und bekommt im großen und ganzen auch die CO2 Ereignisse mit (die er nicht detektieren kann) weil es bei solchen Ereignissen meist auch genug begleitende VOCs gibt. Beides zusammen ist natürlich unschlagbar.

Es macht Freude diese sehr feinen Diagramme zu sehen, die durch die Möglichkeiten der einstellbaren Auflösungen beim Speichern der Werte ermöglicht werden. Das war immer ein Kritikpunkt beim WireGate Server, bei dem der kleinste Intervall 5 Minuten war in der (nur schwer abzuändernden) Default-Einstellung.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Antworten

Zurück zu „1-Wire“