Go Down

Topic: Citrus Freeze Protection (Read 1 time) previous topic - next topic

Papa G

But just incase, how would I use iterative methods to solve the equation?

That's a very general question. The answer would be "with a loop". For example I have seen calculations that work out pi, or the square root of a number, by iterating until the solution arrived this time is either the same as last time, or close enough.

I didn't find the equations that needed to be solved iteratively in the article OP cited. Maybe they are hidden amongst all the tables and charts. I'm curious what they are, just because.


rh*e^(15.22T/(269.3+T))=1.404*e^((15.22T_w)/(269.3+T_w ))+.184(T+T_w)(.000038T_w-1)
Rh= relative humidity from sensor
T = dry-bulb temp from sensor
Tw = wet-bulb temp (what is being solved for)

This is the "correct" way to calculate wet-bulb. The shortcut PapaG gave me will work though.


Ok, I think I've got it all together. This is all so new to me, but I like it and have already ordered my own UNO (can anyone recommend a kit with various components and jumpers?) .

I do have some operand errors in my code I would appreciate some guidance in...

freezeprotection.cpp:42:76: error: invalid digit "9" in octal constant
freezeprotection.cpp: In function 'void loop()':
freezeprotection:38: error: invalid operands of types 'double' and 'double' to binary 'operator^'
freezeprotection:38: error: expected primary-expression before '.' token
freezeprotection:38: error: expected unqualified-id before '(' token
freezeprotection:38: error: invalid operands of types 'float' and 'int' to binary 'operator^'
freezeprotection:40: error: expected `;' before 'if'
freezeprotection:61: error: expected `}' at end of input

Code: [Select]
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

const int critical = -3; //critcal plant freezing temp in degree C
const int relay = 5; //soleniod relay  
float wetbulb = 0;

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor


void setup() {
 Serial.println("DHTxx test!");
pinMode(relay, OUTPUT);

void loop() {
 // Reading temperature or humidity takes about 250 milliseconds!
 // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
 float h = dht.readHumidity();
 float t = dht.readTemperature();

 if (wetbulb <= critical) {
 digitalWrite (relay, HIGH);   //wetbulb below critical trips relay

 // check if returns are valid, if they are NaN (not a number) then something went wrong!
 if (isnan(t) || isnan(h)) {
   Serial.println("Failed to read from DHT");
 } else {
   Serial.print("Humidity: ");
   Serial.print(" %\t");
   Serial.print("Temperature: ");
   Serial.println(" *C");

Papa G

Nov 23, 2012, 01:27 am Last Edit: Nov 23, 2012, 01:30 am by PapaG Reason: 1
First clue: replace the "^" with pow(x,y). Look it up in the reference.
2nd clue: that 2/3 exponent should be 3/2.
Double check your equation.


Nov 24, 2012, 01:32 am Last Edit: Nov 24, 2012, 09:18 am by Coding Badly Reason: 1
Code: [Select]
When a literal constant starts with a 0, the compiler knows that the value is octal (base 8). No digit in an octal value can be greater than 7. Why are the leading 0s there?

Go Up