Ik moest op verschillende posities temperaturen uitlezen. De temperatuur dient geparseerd te worden naar een domotica systeem (Crestron/AMX). De oplossing mag niet te veel kosten. Op deze manier besloot ik om DS18B20-sensoren te gebruiken omdat deze breed verkrijgbaar en redelijk goedkoop zijn. Last but not least, het is een bussysteem.
De sensoren zijn aangesloten op een Arduino Nano. De seriële uitgang van de Arduino (ttl) wordt geconverteerd naar RS232 om deze compatibel te maken met het domotica-systeem.
Om het er allemaal mooi uit te laten zien, heb ik een hoesje ontworpen en geprint op mijn Zortrax M200 3D-printer.
Code
MultiTempSensor v1.0.0Arduino
Arduino Code/*MultiTempSensor code door WT040De sensorcode is gebaseerd op de voorbeelden van Rik Kretzinger en enkele andere fragmenten van codeHistory:v0.1.1 27/11/2016v0.1.5 04/12/2016 pre-release versionv1.0.0 04 /12/2017 release versie*///Include's#include #include //Constants#define SENSOR_PIN 12#define READ_TIMER 10000 //10 seconden//OneWire oneWire(SENSOR_PIN);// Geef onze oneWire-referentie door aan Dallas Temperature.DallasTemperature-sensoren(&oneWire);//Sensoradressen DeviceAddress Sensor1 ={ 0x28, 0xFF, 0x89, 0x0F, 0x61, 0x16, 0x03, 0x40 };DeviceAddress Sensor2 ={ 0x28, 0xFF, 0xE2, 0x0F , 0x61, 0x16, 0x03, 0x21 };DeviceAddress Sensor3 ={ 0x28, 0xFF, 0x38, 0xB3, 0x60, 0x16, 0x03, 0xEA };DeviceAddress Sensor4 ={ 0x28, 0xFF, 0xA4, 0xBE, 0x1, 0x16, 0x1, 0x16 };DeviceAddress Sensor5 ={ 0x28, 0xFF, 0xFE, 0x13, 0x61, 0x16, 0x03, 0x56 };DeviceAddress Sensor6 ={ 0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB };DeviceAddress Sensor, =0xFF, 0xFA, 0xB C, 0x60, 0x16, 0x03, 0xD1 };DeviceAddress Sensor8 ={ 0x28, 0xFF, 0x57, 0xB1, 0x60, 0x16, 0x03, 0x93 };int hoeveelheid sensoren =8;//variabele om het aantal sensoren op de bus één keer per keer te controleren whileint counterCheckBus =0; void setup () { // start seriële poort om resultaten te tonen Serial.begin (9600); //display_Running_Sketch(); printProgramNaam(); Serial.print("Bibliotheekversie voor temperatuurregeling initialiseren"); Serial.println (DALLASTEMPLIBVERSION); Serial.print("Zoeken naar "); Serial.print (aantal sensoren); Serial.println ("sensoren..."); // Initialiseer de temperatuurmeetbibliotheek sensors.begin(); // stel de resolutie in op 10 bit (kan 9 tot 12 bits zijn ... lager is sneller) sensors.setResolution (Sensor1, 10); sensoren.setResolution (Sensor2, 10); sensoren.setResolution (Sensor3, 10); sensoren.setResolution (Sensor4, 10); sensoren.setResolution (Sensor5, 10); sensoren.setResolution (Sensor6, 10); sensoren.setResolution (Sensor7, 10); sensoren.setResolution (Sensor8, 10); getSensorsOnBus(); Serial.println("Systeem geïnitialiseerd");}void loop(){ counterCheckBus++; vertraging (READ_TIMER); Serieel.println(); if (counterCheckBus ==360) { getSensorsOnBus(); counterCheckBus =0; } sensoren.requestTemperatures(); Serial.print("Sensor 1:"); printTemperatuur(Sensor1); Serieel.println(); Serial.print("Sensor 2:"); afdruktemperatuur (sensor2); Serieel.println(); Serial.print("Sensor 3:"); printTemperatuur(Sensor3); Serieel.println(); Serial.print("Sensor 4:"); afdruktemperatuur (sensor4); Serieel.println(); Serial.print("Sensor 5:"); afdruktemperatuur (sensor5); Serieel.println(); Serial.print("Sensor 6:"); afdruktemperatuur (sensor6); Serieel.println(); Serial.print("Sensor 7:"); printTemperatuur(Sensor7); Serieel.println(); Serial.print("Sensor 8:"); afdruktemperatuur (sensor8); Serial.println();}void printTemperature(DeviceAddress deviceAddress){ float tempC =sensors.getTempC(deviceAddress); if (tempC ==-127.00) { Serial.print("Sensorfout!"); } else { Serial.print("C:"); Serial.print(tempC); }} ongeldig printProgramName() { String path =__FILE__; int schuine streep =pad.lastIndexOf('\\'); String programmanaam =pad.substring (slash + 1); int dot =programmanaam.lastIndexOf('.'); programmanaam =programmanaam.substring (0, punt); Serial.print("\nProgrammaversie:"); Serial.println(programmanaam);}void getSensorsOnBus() { Serial.print("Aantal sensoren gevonden op bus:"); Serial.println(sensors.getDeviceCount());}
Aangepaste onderdelen en behuizingen
3D-afdrukbare behuizing - bottom3D-printbare behuizing - top3D-afdrukbare behuizing - sub-d 9-montage Schema's
basisschema, zonder rs232-module