Necesitaba leer las temperaturas en varias posiciones. La temperatura debe analizarse en un sistema de domótica (Crestron / AMX). La solución no debería costar demasiado. De esta manera, decidí usar sensores DS18B20 porque están ampliamente disponibles y son bastante baratos. Por último, pero no menos importante, es un sistema de autobuses.
Los sensores están conectados a un Arduino Nano. La salida serial del Arduino (ttl) se convierte a RS232 para hacerlo compatible con el sistema domotica.
Para que todo se viera bien, diseñé una carcasa y la imprimí en mi impresora 3D Zortrax M200.
Código
MultiTempSensor v1.0.0 Arduino
Código Arduino / * Código MultiTempSensor de WT040 El código del sensor se basa en los ejemplos de Rik Kretzinger y algunos otros fragmentos de código Historia:v0.1.1 27/11 / 2016v0.1.5 04/12/2016 versión preliminar v1.0.0 04 / 12/2017 versión de lanzamiento * /// Incluir # incluye #include // Constantes # define SENSOR_PIN 12 # define READ_TIMER 10000 // 10 segundos // OneWire oneWire (SENSOR_PIN); // Pase nuestra referencia oneWire a Dallas Temperature.DallasTemperature sensores (&oneWire); // Direcciones de sensores 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, 0x60, 0x03, 0x16, 0xBE }; DeviceAddress Sensor5 ={0x28, 0xFF, 0xFE, 0x13, 0x61, 0x16, 0x03, 0x56}; DeviceAddress Sensor6 ={0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB}; DeviceAx28 Sensor7 ={0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB}; DeviceAx28 Sensor7 ={0x28 0xFF, 0xFA, 0xB C, 0x60, 0x16, 0x03, 0xD1}; DeviceAddress Sensor8 ={0x28, 0xFF, 0x57, 0xB1, 0x60, 0x16, 0x03, 0x93}; int amountOfSensors =8; // variable para comprobar la cantidad de sensores en el bus una vez en una whileint counterCheckBus =0; void setup () {// iniciar el puerto serie para mostrar los resultados Serial.begin (9600); // display_Running_Sketch (); printProgramName (); Serial.print ("Inicialización de la versión de la biblioteca de control de temperatura"); Serial.println (DALLASTEMPLIBVERSION); Serial.print ("Buscando"); Serial.print (amountOfSensors); Serial.println ("sensores ..."); // Inicializar la biblioteca de medidas de temperatura sensores.begin (); // establece la resolución en 10 bits (puede ser de 9 a 12 bits ... más bajo es más rápido) sensores.setResolution (Sensor1, 10); Sensores.setResolution (Sensor2, 10); Sensores.setResolution (Sensor3, 10); Sensores.setResolution (Sensor4, 10); Sensores.setResolution (Sensor5, 10); Sensores.setResolution (Sensor6, 10); Sensores.setResolution (Sensor7, 10); Sensores.setResolution (Sensor8, 10); getSensorsOnBus (); Serial.println ("Sistema inicializado");} bucle vacío () {counterCheckBus ++; retraso (READ_TIMER); Serial.println (); if (counterCheckBus ==360) {getSensorsOnBus (); counterCheckBus =0; } sensores.requestTemperatures (); Serial.print ("Sensor 1:"); printTemperature (Sensor1); Serial.println (); Serial.print ("Sensor 2:"); printTemperature (Sensor2); Serial.println (); Serial.print ("Sensor 3:"); printTemperature (Sensor3); Serial.println (); Serial.print ("Sensor 4:"); printTemperature (Sensor4); Serial.println (); Serial.print ("Sensor 5:"); printTemperature (Sensor5); Serial.println (); Serial.print ("Sensor 6:"); printTemperature (Sensor6); Serial.println (); Serial.print ("Sensor 7:"); printTemperature (Sensor7); Serial.println (); Serial.print ("Sensor 8:"); printTemperature (Sensor8); Serial.println ();} void printTemperature (DeviceAddress deviceAddress) {float tempC =sensors.getTempC (deviceAddress); if (tempC ==-127.00) {Serial.print ("¡Error del sensor!"); } else {Serial.print ("C:"); Serial.print (tempC); }} void printProgramName () {Ruta de la cadena =__FILE__; barra oblicua int =path.lastIndexOf ('\\'); Cadena nombreprograma =ruta.subcadena (barra + 1); int dot =programName.lastIndexOf ('.'); programName =programName.substring (0, dot); Serial.print ("\ nVersión del programa:"); Serial.println (programName);} void getSensorsOnBus () {Serial.print ("Número de sensores encontrados en el bus:"); Serial.println (sensores.getDeviceCount ());}
Piezas y carcasas personalizadas
Carcasa imprimible en 3D - Carcasa inferior imprimible en 3D - Carcasa imprimible en top3D - Montura sub-d 9 Esquemas
esquema básico, sin módulo rs232