Growing stuff and doing things

dstroy0

Zeroes and Ones
I have run through enough MC and am done with the company. Nothing they came up with ever matched the original rank ass formula.

With both 1 part and 2 part I see evidence of nutrient excess at the recommended rates, it seems the route more satisified individuals take. The one part, at least the latest version I have, needs Si in veg, Ca and epsom throughout. The 2 part needs Si into flower and a p/k boost in addition to Ca and epsom. Even with that effort the original one part was a better fert and I am still missing something according to Neville's Haze.

I am opposed to edta, I belive it is a persistent organic pollutant. I would also put the other non-essential aminos (dhea, another thats used for iron that icr) in that same group. I didn't want to go with bottles, there seems no other option for dry cheleated ferttilizer, so I am making my own. I am committed to my lab expiriment for the summer.

You can try DPTA. EDDHA and EDTA are both taken up by the plant during Fe absorption. I read a paper where there was sometimes 0.27x more EDDHA than Fe in some plant tissues (not cannabis), but it clearly does not affect cannabis species at all.
 

dstroy0

Zeroes and Ones
I have run through enough MC and am done with the company. Nothing they came up with ever matched the original rank ass formula.

With both 1 part and 2 part I see evidence of nutrient excess at the recommended rates, it seems the route more satisified individuals take. The one part, at least the latest version I have, needs Si in veg, Ca and epsom throughout. The 2 part needs Si into flower and a p/k boost in addition to Ca and epsom. Even with that effort the original one part was a better fert and I am still missing something according to Neville's Haze.

I am opposed to edta, I belive it is a persistent organic pollutant. I would also put the other non-essential aminos (dhea, another thats used for iron that icr) in that same group. I didn't want to go with bottles, there seems no other option for dry cheleated ferttilizer, so I am making my own. I am committed to my lab expiriment for the summer.

For real man, I get upset every time I think about the fact that they knew something was up.
 

Buck5050

Underground Chucker
Thanks SS and D. I appreciate you both and will moving on from MC myself. I am headed towards trying Jacks just so I can have something readily available with a proven market behind it. It'll allow me to stay consistent while I focus on plant comparison in my future pHenohunting adventures and limit inconsistencies in nutrients.
 

dstroy0

Zeroes and Ones
Thanks SS and D. I appreciate you both and will moving on from MC myself. I am headed towards trying Jacks just so I can have something readily available with a proven market behind it. It'll allow me to stay consistent while I focus on plant comparison in my future pHenohunting adventures and limit inconsistencies in nutrients.

Yeah, I need consistency. Can't have this happen again.
 

DopeDaniel

Taste The Spectrum
IPM Forum Moderator
Yeah my lemon royale looked like that.
The ones vegged with 1 part are fairing better.
I am looking for consistancy as well, granted I am putting a lot of faith in custom hydro for properly storing and repackaging most of what I'm using,

I'm not so worried about the chelating agents presence in the plant material per se, but rather that they persist in the environment through plant waste and are recycled in compost. Compared to essential aminos which are used as raw material vs. being contained within.

Pretty sure I ate something with edta in it today. Its one of those chemicals that seems present in many industries.
 

dstroy0

Zeroes and Ones
something bad happens when I try and use vpd_message, I'm running into other memory with something in here, I get ovf for unrelated data. Do you think it's because I'm reinit the pointer array 18 times? I haven't tried a static buffer and reinit every iteration. I've only got 2700 bytes of ram for function variables.

C++:
long float_to_long(float in) {
  return in * 1000L;
}

float vpd_gap_function(long new_, long old_, long UL, long LL, long GAP_ALLOWED, long STEP_SIZE, uint8_t SMOOTH_NUM, uint8_t i) {
  static uint8_t smooth_count[18] = {0};
  long temp = constrain(new_, LL, UL);
  long signed_gap = temp - old_;
  long abs_gap = abs(signed_gap);

  if (abs_gap > GAP_ALLOWED) {
    if (smooth_count[i] >= SMOOTH_NUM) {
      smooth_count[i] = 0;
      float temp_float = float(new_) / 1000.0;
      return temp_float;
    }
    if (signed_gap < 0) {
      smooth_count[i]++;
      temp = old_ - STEP_SIZE;
      float temp_float = float(temp) / 1000.0;
      return temp_float;
    }
    if (signed_gap > 0) {
      smooth_count[i]++;
      temp = old_ + STEP_SIZE;
      float temp_float = float(temp) / 1000.0;
      return temp_float;
    }
  }
  else {
    smooth_count[i] = 0;
    float temp_float = float(new_) / 1000.0;
    return temp_float;
  }
 return 0;
}

void vpd_message(char *strings[], uint8_t tokens) {
  if (tokens > 18)
  {
    return;
  }

  long float_to_long_arr[18] = {0};
  long current_vpd_long_arr[18] = {0};

  //convert everything to long
  for (int i = 0; i < 18; i++) {
    char *buf[20] = {NULL};
    *buf = strings[i + 1];
    float temp = atof(*buf);
    float_to_long_arr[i] = float_to_long(temp);
    //Serial.println(float_to_long_arr[i]);
  }

  const long vpd_UL = 2500;
  const long vpd_LL = 500;
  const long vpd_STEP_SIZE = 5;
  const long vpd_SMOOTH_NUM = 15;
  const long vpd_GAP_ALLOWED = 20;
  const long temp_UL = 30000;
  const long temp_LL = 15000;
  const long temp_STEP_SIZE = 5;
  const long temp_SMOOTH_NUM = 15;
  const long temp_GAP_ALLOWED = 20;

  current_vpd_long_arr[8] = float_to_long(AreaOne.vapor_pressure_deficit);
  current_vpd_long_arr[13] = float_to_long(AreaTwo.vapor_pressure_deficit);
  for (int i = 0; i < 4; i++) {
    current_vpd_long_arr[i] = float_to_long(AreaOne.leaf_temperature[i]);
    current_vpd_long_arr[i + 4] = float_to_long(AreaTwo.leaf_temperature[i]);
    current_vpd_long_arr[i + 9] = float_to_long(AreaOne.leaf_vapor_pressure_deficit[i]);
    current_vpd_long_arr[i + 14] = float_to_long(AreaTwo.leaf_vapor_pressure_deficit[i]);
  }

  AreaOne.vapor_pressure_deficit = vpd_gap_function(float_to_long_arr[8], current_vpd_long_arr[8], vpd_UL, vpd_LL, vpd_GAP_ALLOWED, vpd_STEP_SIZE, vpd_SMOOTH_NUM, 8);
  AreaTwo.vapor_pressure_deficit = vpd_gap_function(float_to_long_arr[13], current_vpd_long_arr[13], vpd_UL, vpd_LL, vpd_GAP_ALLOWED, vpd_STEP_SIZE, vpd_SMOOTH_NUM, 13);
  for (int i = 0; i < 4; i++) {
    AreaOne.leaf_temperature[i] = vpd_gap_function(float_to_long_arr[i], current_vpd_long_arr[i], temp_UL, temp_LL, temp_GAP_ALLOWED, temp_STEP_SIZE, temp_SMOOTH_NUM, i);
    AreaTwo.leaf_temperature[i + 4] = vpd_gap_function(float_to_long_arr[i + 4], current_vpd_long_arr[i + 4], temp_UL, temp_LL, temp_GAP_ALLOWED, temp_STEP_SIZE, temp_SMOOTH_NUM, (i + 4));
    AreaOne.leaf_vapor_pressure_deficit[i + 9] = vpd_gap_function(float_to_long_arr[i + 9], current_vpd_long_arr[i + 9], vpd_UL, vpd_LL, vpd_GAP_ALLOWED, vpd_STEP_SIZE, vpd_SMOOTH_NUM, (i + 9));
    AreaTwo.leaf_vapor_pressure_deficit[i + 14] = vpd_gap_function(float_to_long_arr[i + 14], current_vpd_long_arr[i + 14], vpd_UL, vpd_LL, vpd_GAP_ALLOWED, vpd_STEP_SIZE, vpd_SMOOTH_NUM, (i + 14));
  }
}
 

dstroy0

Zeroes and Ones
I should just use an exponential filter for VPD/leaf temperatures, instead of a running average because it will use less memory.

Every time you provide a new value (xn), the exponential filter updates a smoothed value (yn):
yn = w × xn + (1 – w) × yn – 1
Here:
  • yn is the output of the filter at a moment in time n
  • xn is the new input value at a moment in time n
  • yn – 1 is the previous output value of the filter
  • w is the weighting factor in the range [0, 100].
The filter slows down the response to rapid changes (such as noise) in the input signal.


1615734775758.png

1615734802429.png
 
Top Bottom