Go Down

Topic: adressen 18b20 eenmalig opzoeken (Read 3750 times) previous topic - next topic

probeerder

/*
  Ik wil telkens eenmalig de adressen van de sensoors die ik gebruik voor elk project opzoeken.
  en als er later een extra sensor nodig is gebruik maken van deze schets.
   
  Test_resultaat door eerst een proefopstelling te maken dan de schets uit te proberen met gebruik van
  de seriele monitor .
  Door de temperatuur van de sensors een voor een af te koelen is te zien welk adress er aan
  gekoppeld is.
  Daarna heb ik het kabeltje uit de arduino verwijderd dan dan blijft de monitor aan staan en dan is
  de tekst ctrl_c te copieren en kan deze in een schets te geplaatst worden (er zal wel een betere
  manier zijn)
  b.v.: Topwarmte = (28 EB CE 79 97 12 3 B9,HEX)// nu geen idee hoe dit gadaan moet worden.


3
Model: DS18B20
  aantal sensors: 3
  sensor: 1
 28 EB CE 79 97 12 3 B9
  Temperatuur: 25.69 C
Model: DS18B20
  aantal sensors: 3
  sensor: 2
 28 CF 9B 79 97 11 3 C1
  Temperatuur: 26.87 C
Model: DS18B20
  aantal sensors: 3
  sensor: 3
 28 5F E4 79 97 13 3 E3
  Temperatuur: 26.50 C
*/


#include <DS18B20.h>//deze gebruik ik nu alleen.

DS18B20 ds(2);///aansluiting board

void setup() {
  Serial.begin(9600);
 // Serial.print("  aantal sensors: ");
  //Serial.println(ds.getNumberOfDevices());
 
//  Serial.println(ds.getResolution());
 
}

void loop() {
  int sensoors = (ds.getNumberOfDevices());
   int z;
   int sens = 1 ;
  while (ds.selectNext()) {
    switch (ds.getFamilyCode()) {
      case MODEL_DS18S20:
        Serial.println("Model: DS18S20/DS1820");
        break;
      case MODEL_DS1822:
        Serial.println("Model: DS1822");
        break;
      case MODEL_DS18B20:
        Serial.println("Model: DS18B20");
        break;
      default:
        Serial.println("Unrecognized Device");
        break;
        // dit stuk heb ik gevonden op internet
    }

    uint8_t address[8];
      Serial.print("  aantal sensors: ");
      Serial.println(ds.getNumberOfDevices());
      ds.getAddress(address);
      Serial.print("  sensor: ");
      Serial.println(sens++);
   
    for (uint8_t i = 0; i < 8; i++) {
      Serial.print(" ");z=i;
      Serial.print(address[z],HEX);
       delay(500);
    } 

      Serial.println();
      Serial.print("  Temperatuur: ");
      Serial.print(ds.getTempC());
      Serial.print(" C ");
      Serial.println();Serial.println();
   }
      Serial.println();Serial.println();Serial.println();
      delay(1000);
}

Koepel

Je eerste vraag op dit forum ? Kun je op het volgende letten:

Geef duidelijk aan wat je vraag is. Dat is nu een beetje onduidelijk. Waar is het voor ? Is het een opdracht voor school ?
Gebruik code tags. Boven het tekst-veld is de knop '< / >' voor de code tags. Als je daar binnen je sketch zet, dan is het beter te lezen. Dat is nummer 7 op deze pagina.
Kun je een link geven naar de library die je gebruikt ?

Wij gebruiken de OneWire en de DallasTemperature libraries.
Dit heb ik ooit eens gemaakt: https://forum.arduino.cc/index.php?topic=393653.msg2711178#msg2711178.

probeerder

Ja dit is de eerste keer.

Ik heb tien jaar geleden een zelfbouw boiler op mijn dak geplaatst die doet het goed maar ik wil al die tijd weten wat de opbrengst is.

Is te zien via www.oscartje.nl

Omdat ik nog niet weet of ik welke Arduino ga gebruiken heb ik een printplaatje gemaakt waarop de contacten voor meerdere sensors kunnen worden aangesloten.

Het probleem voor mij  is om de adressen uit te lezen voordat zij in het project worden geplaatst,
deze schets wordt alleen gebruikt als een soort gereedschap om te knippen en plakken.
Ga de schets aanpassen met het volgende format :
{
 { 0x28, 0xFF, 0xF8, 0x20, 0x05, 0x16, 0x03, 0x31 },      
};
en later het tekstgedeelte in de besturingsschets  te plaatsen

Verder heb ik het plan om de gegevens op te slaan op een SD_kaartje.

De library die ik gebruik is <18b20.h> ik ga de OneWire en de DallasTemperature libraries ook uitproberen.


shooter

met een scanner zoals je nu gebruikt zoek je de adressen op, die schrijf je op een sticker en plak die op de sensor.
datzelfde adres kun je dan gebruiken door ze in een array te zetten, als dan het adres hetzelfde is dan heb je dus een sensor te pakken

ongeveer adres [] ={28,34,67 et},{29,56,23 etc}
dus dan krijg je
if sensoradres = adres[1] dan heb je dus sensorwaarde[1]=gemeten waarde
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

probeerder

Op advies van Koepel heb ik de naar de link gekeken en gezien hoe je een bestand kan gebruiken om gegevens op te slaan.

Nu heb ik mijn scanner,  zoals shooter hem terecht noemt, aangepast met het volgende resultaat:

Code: [Select]

  {  0x28 0xEB 0xCE 0x79 0x97 0x12 0x03 0xB9   } sensor: 0  Temperatuur: 23.56 C
  {  0x28 0xCF 0x9B 0x79 0x97 0x11 0x03 0xC1   } sensor: 1  Temperatuur: 25.00 C
  {  0x28 0x5F 0xE4 0x79 0x97 0x13 0x03 0xE3   } sensor: 2  Temperatuur: 24.56 C
Code: [Select]


Nu wil ik dit resultaat gebruiken in de schets voor mijn boiler_besturing

Het lukt mij nu wel maar met een lastige omweg.

Het liefst zou ik een nieuwe schets openen dan de scanner starten en het resultaat in de nieuwe schets te plaatsen.

Wat mij veel zou helpen dat gegevens in een soort kladblok_bestand gekoppeld aan de arduino programmatuur geplaatst kan worden.
Code: [Select]

Koepel

#5
Apr 25, 2020, 01:02 am Last Edit: Apr 25, 2020, 01:03 am by Koepel
Als je een sketch hebt die de nummers zoekt en een sketch waar die nummers in een tabel staan, is dat dan niet voldoende ?

Die sketch van mij gebruikt een #define ENABLE_SEARCH_ADDRESS om ze te zoeken. Dan zie je die in de seriële monitor en kun je ze met kopiëren en plakken in de sketch zetten.
Door die regel weg te commentariëren wordt het zoeken uitgezet:
Code: [Select]
// #define ENABLE_SEARCH_ADDRESS

Denk je dat ze stuk gaan en ze vaak vervangen moeten worden ?
Als ze goed gebruikt worden gaan ze niet zomaar stuk. Ze blijven heel tot 125°C. Als de temperatuur daar soms boven komt, dan heb je een andere temperatuursensor nodig. Elektrische piekpulsen kun je voorkomen met een afgeschermde kabel.

Wat wel kan, is bijvoorbeeld met een knop het zoeken starten, en dan de getallen van de sensoren in EEPROM opslaan. De sketch zou dan alle sensoren kunnen gebruiken die in EEPROM staan. Dan hoef je niet meer de sketch te wijzigen.
Als je dat op die manier automatisch zou willen, dan is er snel verwarring welke sensor dat dan precies is.
Wanneer je telkens een andere proefopstelling hebt, met andere DS18B20 sensoren, dan kan dat handig zijn.

In jouw situatie lijkt het me veel eenvoudiger om met kopiëren en plakken die cijfers in de sketch te zetten. Wat shooter schreef over een sticker met die cijfers op de sensor plakken voorkomt ook heel wat problemen.

shooter

dat scannen kun je ook in de setup doen, en dan in de array gebruiken, maar ik wou het stukje bij beetje aangeven.
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

photoncatcher

Beste probeerder,

Ik had te maken met een soortgelijke situatie, namelijk het meten, displayen en loggen van temperaturen in lussen van de vloerverwarming, en het meten/displayen/loggen van temperaturen in cv aanvoer- en retourbuizen. De vloerverwarming heeft vier lussen, dus daar hangen op plekken waar de lussen de vloer in/uit gaan aan in totaal 8 stuks DS18B20 aan. Bovendien heb ik op de aanvoer en de retour van de verdeler ook een DS18B20 geplakt. Bij elkaar 10 sensors te bemeteren. Dat gaat overigens heel goed.

Ik heb het adres van elke afzonderlijke DS18B20 gedetecteerd met een adres-zoek-sketch en dat adres daarna op een labeletje opgeschreven, en toen het labeltje op de kabel van de DS18B20 geplakt. Ik kan dus met m'n ogen checken welk adres bij welke DS18B20 hoort. Dat scheelt een heleboel werk bij opzoeken als er een de fout in gaat (en dat gebeurde ook prompt een keertje).
Een en ander is gedocumenteerd op mijn Arduino projecten pagina. Take your pick!  :)

probeerder

Omdat ik mij alleen gericht had de 18b20 had ik niet door dat het voor meer schetsjes bruikbaar is.

Eigenlijk wil ik de mogelijk hebben om de keus maken om de tekst van de seriële monitor wel of niet
in een bestand op te slaan.

Als nu een wijziging in mijn schets gemaakt wordt ben ik de gegevens van de vorige seriële monitor kwijt.

probeerder

Ik heb gevonden door uitproberen hoe ik de tekst uit de Seriële monitor kan kopiëren.
In de schets zorg ik ervoor dat de gegevens die ik wil kopiëren eenmalig getoond worden door middel van een variabele.
Als de laatste op het scherm geplaatst is staat het scherm stil.Dit is nodig anders kan ik niet markeren.
Nu kan ik met de linker muisknop markeren wat er staat, van onder naar boven.
Als ik nu zonder de knop los te laten naar de verzendbalk erboven ga en de knop los laat en dan de rechter knop indruk kan ik kiezen voor kopiëren en het in plaknotities plakken.

In een andere schets kan ik dan hiervan gebruik maken en hoef ik niet van alles te controleren

Het lukt mij niet om in mijn eerste schets Opgelost te zetten.

shooter

je kunt de gevonden addressen toch in een kleine array zetten dan houd je de adressen vast en kun je ze gebruiken om de data te koppelen met je adressen.
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

Go Up