Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpje.

Arduino specifieke Software
Berichten: 15
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpje.

Berichtdoor frans36 » 20 Mei 2023, 21:03

Beste Heren en Dames,

Ik zal me eerst even voorstellen.
Ik ben Frans en ben 45 jaar oud en woonachtig onder de rook van Zwolle in Dalfsen.

Ik heb vorige week een aantal onderdeeltjes besteld om bezig te gaan met een projectje met een adruino uno.

Het project is om 2 x een DS18B20 aan de adruino uno te maken en dan 2 meetwaarde's op een oled 0.96 schermpje weer te geven.

ik ben vandaag bezig geweest en heb het nu voor elkaar om 1 sensor weer te geven op het oled schermpje.
echter heb ik via serial print ook voor elkaar qua code om het met 2 sensors uit te laten lezen.

Nu loop ik vast hoe ik dus de 2 meetwaarde's op het schemrpje krijg in de code.

Code 1 is 1 sensor op het schermpje. Deze hier onder.

#include <OneWire.h>
#include <DallasTemperature.h>

const int SensorDataPin = 2;

OneWire oneWire(SensorDataPin);

DallasTemperature sensors(&oneWire);

void setup() {

Serial.begin(115200);
sensors.begin();
}

void loop() {
sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
float temperature_Fahrenheit = sensors.getTempFByIndex(0);
Serial.print("Temperature: ");
Serial.print(temperature_Celsius);
Serial.println(" ºC");
Serial.print("Temperature: ");
Serial.print(temperature_Fahrenheit);
Serial.println(" ºF");
Serial.println("");
delay(10000);
}

Code 2 is 2 sensors met uilezing via serial monitor.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

int total_devices;
DeviceAddress sensor_address;

void setup(){
Serial.begin(115200);
sensors.begin();

total_devices = sensors.getDeviceCount();

Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(total_devices, DEC);
Serial.println(" devices.");

for(int i=0;i<total_devices; i++){
if(sensors.getAddress(sensor_address, i)){
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
printAddress(sensor_address);
Serial.println();
} else {
Serial.print("Found device at ");
Serial.print(i, DEC);
Serial.print(" but could not detect address. Check circuit connection!");
}
}
}

void loop(){
sensors.requestTemperatures();

for(int i=0;i<total_devices; i++){

if(sensors.getAddress(sensor_address, i)){

Serial.print("Temperature for device: ");
Serial.println(i,DEC);

float temperature_degreeCelsius = sensors.getTempC(sensor_address);
Serial.print("Temp (degree celsius): ");
Serial.println(temperature_degreeCelsius);

}
}
delay(10000);
}


void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++){
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}

Waar ik eigenlijk op vast loop hoe kan ik deze 2 combineren zodat het 1 code wordt
waardoor dus de beide DS18B20 sensor hun waarde op het oled schermpje weer geven.

Liefst met Sensor1 : de gemeten waarde in graden.
Sensor2 : de gemeten waarde in graden.

Wie wil en kan me hiermee helpen!!
Ik zit nog in de leer fase en ik zie waarschijnlijk de juiste afslag even niet.

Bij voorbaat mijn dank.

Mvg,
Frans36

Advertisement

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor ThHe » 21 Mei 2023, 10:44

Zit de oplossing misschien in de volgende wijziging:

for(int i=0;i<total_devices; i++){
float temperature_Celsius = sensors.getTempCByIndex(i); // ipv 0 de index invullen uit de loop.
float temperature_Fahrenheit = sensors.getTempFByIndex(i);
............

Berichten: 15
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor frans36 » 21 Mei 2023, 20:20

Beste ThHe en andere leden,

Als eerste bedankt voor uw reatcie.

echter zie ik nu dat ik de verkeerde software heb weer gegeven in het topic.

Project bestaat uit.

1 x adruino uno
1 x ssd1306 oled schermpje
2 x ds18b20 sensors
1 x 4.7k ohm weerstand

Deze software die ik hier onder zet is nu deversie die ik gebruik en hier kan ik de meetwaarde van 1 Sensor in het oled schermpje krijgen.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

const int SensorDataPin = 2;

OneWire oneWire(SensorDataPin);
DallasTemperature sensors(&oneWire);

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);

void setup() {
Serial.begin(115200);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);

}

void loop() {
delay(5000);
display.setCursor(0,0);
display.setTextSize(1);
display.clearDisplay();

sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
float temperature_F = sensors.getTempFByIndex(0);
Serial.print("Temperature = "); Serial.print(temperature_Celsius); Serial.println(" *C");
//display.print("Temperature: "); display.print(temperature_Celsius); display.println(" *C");
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,10);
display.print(temperature_Celsius);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");

Serial.println();
display.display();
delay(2000);
}


Met de volgende software krijg ik 2 meetwaarde's te zien via serial monitor.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

int total_devices;
DeviceAddress sensor_address;

void setup(){
Serial.begin(115200);
sensors.begin();

total_devices = sensors.getDeviceCount();

Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(total_devices, DEC);
Serial.println(" devices.");

for(int i=0;i<total_devices; i++){
if(sensors.getAddress(sensor_address, i)){
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
printAddress(sensor_address);
Serial.println();
} else {
Serial.print("Found device at ");
Serial.print(i, DEC);
Serial.print(" but could not detect address. Check circuit connection!");
}
}
}

void loop(){
sensors.requestTemperatures();

for(int i=0;i<total_devices; i++){

if(sensors.getAddress(sensor_address, i)){

Serial.print("Temperature for device: ");
Serial.println(i,DEC);

float temperature_degreeCelsius = sensors.getTempC(sensor_address);
Serial.print("Temp (degree celsius): ");
Serial.println(temperature_degreeCelsius);

}
}
delay(10000);
}


void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++){
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}

Echter hoe krijg ik het voor elkaar in de eerste code dat ook de 2e sensor zijn meetwaarde op het oled schermpje komt.
Ik begrijp de gedachten gang dat beide sensors een eigen adres mogen hebben en dat dit oook in de software gemaakt moet worden het zei met een hele rits aan hex code's per sensor.
en dat er dan een dubbele print opdracht via het oled schemrpje moet komen.

Maar hoe realiseer ik dit?

om in het oled schemrpje het volgende te krijgen.

Active temperature:
Sensor1 : meetwaarde in Deg
sensor2 : meetwaarde in Deg.

Is er een forumlid die mij de code kan posten en een stukje uitleg der bij want ik zoek me rot op internet.
en ik zie ff door de bomen het bos niet meer.

Graag hoor ik van de gene.

Bij voorbaat mijn dank.

Mvg,

Frans36

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor shooter » 22 Mei 2023, 10:07

waar jij serial.print neerzet zet daar ook je display bij wellicht moet je de naam van de variabele anders noemen en de positie veranderen naar regel 1
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor frans36 » 22 Mei 2023, 11:16

Beste Shooter,

Bedankt voor uw reactie.
Net geprobeerd uit te voeren maar zonder goed resultaat.
IDE komt met compiler problemen.

ik heb het idee herstel me graag als ik het fout heb.

Dat in de 1e code nog gekeken mag worden naar beide sensoren zodat deze al gelijk weer worden gegeven.
Maar hoe dat is voor mij nog even een raadsel aangezien ik vrij nieuw ben in de wereld van arduino en het
schrijven van de software.

Mvg,

Frans36

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor ThHe » 22 Mei 2023, 11:24

Waarschijnlijk ben ik niet erg duidelijk geweest en kan het ook niet testen.
Alleen naar het programma kijken zou ik het volgende proberen.
De loop() uit je tweede programma vervangen door de loop() uit het eerste programma en dan wat kleine wijzigen aan brengen.


Code: Alles selecteren
void loop() {
///  delay(5000);        // delay kan vervallen door de 5000 op te tellen bij het einde)
display.setCursor(0,0);
display.setTextSize(1);
display.clearDisplay();

sensors.requestTemperatures();

for(int i=0;i<total_devices; i++){     // Loop over de verschillende devices

float temperature_Celsius = sensors.getTempCByIndex(i);     // lees device index i
float temperature_F = sensors.getTempFByIndex(i);             // lees device index i
Serial.print("Temperature = "); Serial.print(temperature_Celsius); Serial.println(" *C");
//display.print("Temperature: "); display.print(temperature_Celsius); display.println(" *C");
display.setTextSize(1);
display.setCursor(i,0);                 // set cursor op i
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(i,10);               // set cursor op i
display.print(temperature_Celsius);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");

Serial.println();
display.display();

}      // einde loop

delay(7000);           // tel het begin eruitop dan heb je 7 sec pauze
}


Succes!!!

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor babbelkwebbel » 22 Mei 2023, 20:11

Ik heb even een stuk uit een sketch van me geknipt, waarschijnlijk is het dan duidelijker voor je.

Succes ermee
babbel


#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 4 // Data wire is connected to GPIO15
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with a OneWire device
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor

DeviceAddress sensor_enviroment = { 0x28, 0x89, 0x84, 0x5F, 0x0, 0x1, 0xFF, 0xFF };
DeviceAddress sensor_condensor = { 0x28, 0x2B, 0x69, 0x96, 0xF0, 0x1, 0x3C, 0xE };
DeviceAddress sensor_outlet = { 0x28, 0x1F, 0x2A, 0x96, 0xF0, 0x1, 0x3C, 0x98 };

uint16_t sensor_tempratures [4] = {sensor_enviroment, sensor_condensor, sensor_outlet};

int8_t fan_inlet = 5;
int8_t fan_outlet = 6;

bool wifi_update_sensor_tempratures = false;


void setup()
{
Serial.begin(115200);
sensors.begin();

pinMode(fan_inlet, OUTPUT);
pinMode(fan_outlet, OUTPUT);

analogWrite(fan_inlet, 5);
analogWrite(fan_outlet, 5);
}


void sensor_values()
{
sensors.requestTemperatures(); // Send the command to get temperatures
sensor_tempratures [0] = sensor_enviroment;
sensor_tempratures [1] = sensor_condensor;
sensor_tempratures [2] = sensor_outlet;

Serial.println(sensors.getTempC(sensor_tempratures [0] ));
Serial.println(sensors.getTempC(sensor_tempratures [1] ));
Serial.println(sensors.getTempC(sensor_tempratures [2] ));
Serial.println("");
}


void loop()
{
sensor_values();
delay(3000);


}[code][/code]

Berichten: 15
Geregistreerd: 05 Mei 2023, 10:13
Woonplaats: Dalfsen

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor frans36 » 22 Mei 2023, 22:05

Beste Heren,

Bedankt voor jullie input.

@ThHe,
ik heb de codes bij elkaar gevoegd maar helaas geen goed resultaat.
Allemaal compiler foutjes.

@babbel,

Bedankt voor uw stukje code.
Is het mss mogelijk als het niet te veel gevraag is om deze gehele code compleet te maken voor een SSD1306 oled 0.96 screen in yellow/blue en dan met 2 sensors.
zodat ik kan zien wat ik nu eigelijk fout doe met de 2 codes samen voegen als die ik heb.
ik zie trouwens wel dat ik voor de 2 sensors een HEX scan mag doen op mijn bord voor de adressen. dat komt goed.

bij voorbaat mijn dank.

Mvg,
Frans

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor babbelkwebbel » 23 Mei 2023, 20:57

Hallo Frans,

Helaas dat zal niet gaan om de simpele reden dat ik geen Oled schermpje heb, zelf werk ik meestal met 3.5 inch TFT displays.

Maar begin u eerst eens met die twee sensor, en print de waardes naar je serial monitor.

Dat staat is de sketch van mij, dus dat is wat knippen en plakken.

Als u dat klaar heb kunt u het verder brijen naar de Oled display.

Tevens nog een puntje, bedenk dat de sensors via de one wire protocol erg traag zijn, dit hoeft geen probleem te zijn, maar bij mij was het wel de oorzaak van
timing problemen.

Groet
Babbel

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Adruino uno met 2 x DS18B20 sensor en OLed 0.96 schemrpj

Berichtdoor ThHe » 24 Mei 2023, 00:22

Jammer ik had deze code binnen 10 min compiler vrij. (het ophalen van de h files kostte de meeste tijd)
Maar dan nog kan ik niet testen of de uitvoering werkt.
Volgende keer beter en succes verder.

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ekaqitoquhu, RussellAlets en 30 gasten