Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Modbus RTU common parameters, the Master MUST use the same parameters */
- enum {
- MB_SLAVE = 1, /* modbus slave id */
- };
- /* slave registers example */
- enum {
- MB_REG1,
- MB_REG2,
- MB_REGS /* total number of registers on slave */
- };
- // Pino onde o Termistor esta conectado
- #define PINOTERMISTOR A0
- // Valor do termistor na temperatura nominal
- #define TERMISTORNOMINAL 10000
- // Temp. nominal descrita no Manual
- #define TEMPERATURENOMINAL 25
- // Número de amostragens para
- #define NUMAMOSTRAS 5
- // Beta do nosso Termistor
- #define BCOEFFICIENT 3950
- // valor do resistor em série
- #define SERIESRESISTOR 10000
- int amostra[NUMAMOSTRAS];
- int i;
- int valor;
- int DS18S20_Pin = A1;
- int sensorValue = 0;
- OneWire ds(DS18S20_Pin);
- int regs[MB_REGS]; /* this is the slave's modbus data map */
- void setup()
- {
- /* Modbus setup example, the master must use the same COM parameters */
- /* 115200 bps, 8N1, two-device network */
- configure_mb_slave(9600, 'n', 0);
- analogReference(EXTERNAL);
- /*Serial.begin(9600); */
- }
- void loop() {
- /* This is all for the Modbus slave */
- update_mb_slave(MB_SLAVE, regs, MB_REGS);
- /* your code goes here */
- regs[1] = getTemp();
- regs[2] = valor;
- //analogRead(DS18S20_Pin);
- }
- float temperature = getTemp();
- /* Serial.println(temperature); */
- float getTemp(){
- //returns the temperature from one DS18S20 in DEG Celsius
- byte data[12];
- byte addr[8];
- if ( !ds.search(addr)) {
- //no more sensors on chain, reset search
- ds.reset_search();
- return -1000;
- }
- if ( OneWire::crc8( addr, 7) != addr[7]) {
- /* Serial.println("CRC is not valid!"); */
- return -1000;
- }
- if ( addr[0] != 0x10 && addr[0] != 0x28) {
- /* Serial.print("Device is not recognized"); */
- return -1000;
- }
- ds.reset();
- ds.select(addr);
- ds.write(0x44,1); // start conversion, with parasite power on at the end
- byte present = ds.reset();
- ds.select(addr);
- ds.write(0xBE); // Read Scratchpad
- for (int i = 0; i < 9; i++) { // we need 9 bytes
- data[i] = ds.read();
- }
- ds.reset_search();
- byte MSB = data[1];
- byte LSB = data[0];
- float tempRead = ((MSB << 8) | LSB); //using two's compliment
- float TemperatureSum = tempRead / 16;
- return TemperatureSum;
- float temperatura;
- float media;
- for (i=0; i< NUMAMOSTRAS; i++) {
- amostra[i] = analogRead(PINOTERMISTOR);
- //delay(10);
- }
- media = 0;
- for (i=0; i< NUMAMOSTRAS; i++) {
- media += amostra[i];
- }
- media /= NUMAMOSTRAS;
- // Converte o valor da tensão em resistência
- media = 1023 / media - 1;
- media = SERIESRESISTOR / media;
- //Faz o cálculo pela fórmula do Fator Beta
- temperatura = media / TERMISTORNOMINAL; // (R/Ro)
- temperatura = log(temperatura); // ln(R/Ro)
- temperatura /= BCOEFFICIENT; // 1/B * ln(R/Ro)
- temperatura += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
- temperatura = 1.0 / temperatura; // Inverte o valor
- temperatura -= 273.15;
- valor = temperatura;
- // Converte para Celsius
- /*Serial.print("Temperatura no Sensor eh: ");
- Serial.print(temperatura);
- Serial.println(" *C");
- delay(1000);*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement