Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

Las semillas necesitan tener condiciones propicias para germinar y una de ellas es la temperatura, por eso si queremos adelantar la época de siembra para adelantar los cultivos unos meses será necesario proporcionar la temperatura adecuada.  
Un semillero de cama caliente no es mas que un semillero al cual le estamos añadiendo un componente que haga que suba la temperatura ambiente y así nuestra semilla pueda germinar, casos como por ejemplo los tomates o los pimientos son plantas que sin una temperatura de unos 20ºC o 25ºC no germinarían.
Con este proyecto podemos construir semillero de cama caliente con un costo muy económico. 
Para esto solo necesitaremos una bandeja de plástico algo gruesa no muy profunda, un cable calefactor, un poco de arena, piedra sanitaria para gatos y un poco de electrónica.

Caja de plástico con el cable calefactor instalado.

En el fondo de la caja colocamos un colchón de arena para que el cable no este en contacto directo con la caja de plástico, luego cubrimos la arena con una fina capa de piedras sanitarias para gatos, esto por si algo de agua de las bandejas de germinación se filtra al sustrato.

Piedras sanitarias sobre la capa de arena.

Para contener la electrónica se usó una caja estanca que se adosó a la caja que contiene las bandejas de cultivo.

Caja conteniendo toda la electrónica.

El sistema de control está compuesto por un Arduino NANO que ejecuta un programa PID para controlar un contactor de estado solido opto-acoplado.
La caja de control se comunica mediante un enlace Bluetooth a un móvil donde envía la temperatura del sustrato y la potencia aplicada al cable calefactor. (Se puede usar cualquier aplicación para visualizar los datos enviados).
El código para Arduino es el siguiente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*********************************************************************************
   Descripción: Ejemplo para PID usando las bibliotecas de Arduino
                El objetivo es mantener la temperatura dentro de una
                caja de acuerdo al valor de un Set Point.
                El sensor usado es un DS18B20 conectado en el pin 10 
                y la salida para el control PID en el pin 3 (PWM).
                El envío de datos se hace mediante un enlace Bluetooth
                Kp, Ki y Kd se ajustan de manera experimental.
 
   Placa Arduino: NANO
   Arduino IDE: 1.8.13
   www.firtec.com.ar
************************************************************************************/
#include <PID_v1.h>
#include <OneWire.h>
#include <avr/wdt.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#define ledPin 13   
#define alarma 14   
SoftwareSerial mySerial(11, 12); 
 
OneWire UnWire(10);
DallasTemperature sensor(&UnWire);
byte retardo = 0;   // Usado para enviar datos por Bluetooth cada 5 segundos
int salidaPWM = 3;  					// Salida de señal PWM
double temp, error, Setpoint, Output; 	// Variables del PID
double Kp = 7, Ki = 8.5, Kd = 4.5; 		// Ajustes empírico del PID
byte potencia;
char buffer[10] = "";
volatile bool flag_txt = false;
PID myPID(&temp, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
 
long map(long x, long in_min, long in_max, long out_min, long out_max){
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(alarma, OUTPUT);
  digitalWrite(alarma, LOW); 
  noInterrupts(); 
  TCCR1A = 0;                // El registro de control A queda todo en 0
  TCCR1B = 0;                // limpia registrador
  TCNT1  = 0;                // Inicialíza el temporizador
  OCR1A = 0x3D09;            // Carga el registrador de comparación: 16MHz/1024/1Hz = 15625 = 0X3D09
  TCCR1B |= (1 << WGM12)|(1<<CS10)|(1 << CS12);   // Modo CTC, prescaler de 1024: CS12 = 1 e CS10 = 1  
  TIMSK1 |= (1 << OCIE1A);  // Habilita interrupción por igualdad de comparación
  TIMSK1 |= (1 << TOIE1);   
  interrupts();             
  mySerial.begin(9600);
  pinMode(salidaPWM, OUTPUT);  
  Setpoint = 30;
  myPID.SetMode(AUTOMATIC); // Configura y activa PID
  myPID.SetOutputLimits(0, 255);
  wdt_disable();
  wdt_enable(WDTO_4S);
 
}
void loop() {
  wdt_reset(); // Borra el contador del wachdog
  sensor.requestTemperatures();
  temp = sensor.getTempCByIndex(0);
  myPID.Compute(); // Calcula salida PWM
  analogWrite(salidaPWM, Output);
  dtostrf(temp, 2, 1, buffer);
  if((temp < 28) | (temp > 32)) // Alarma por debajo de 28 o superior a 32
    digitalWrite(alarma, HIGH); 
  else
    digitalWrite(alarma, LOW); 
  potencia = map(Output, 0, 255, 0, 100); // Escala la potencia del calefator
  if(flag_txt == true){
    retardo++;
    if(retardo == 5){   // Enviar datos por Bluetooth?
      mySerial.print("Temperatura Sustrato: ");
      mySerial.println(buffer);
      mySerial.print("Calefactor al ");
      mySerial.print(potencia);
      mySerial.println("%");
      retardo = 0;
      wdt_reset(); 		// Borra el contador del wachdog
    }
    wdt_reset(); 		// Borra el contador del wachdog
    flag_txt = false; 	// Borra bandera de INTE
  }
 
}
 
ISR(TIMER1_COMPA_vect) // Interrupción por igualdad de de comparación en TIMER1
{
   flag_txt = true;    // Bandera para controlar el Bluetooth
}

Placa Arduino montada en la caja estanca.

El sensor de temperatura es un DS18B20 conectado al pin 10 de Arduino, el sensor se coloca en algún punto alejado del cable calefactor para tener una medición mas exacta de la temperatura de todo el sustrato.
Para el control PID se utiliza una biblioteca que resuelve todos los enredos matemáticos del PID.
Para el control de potencia podemos usar un relay de estado sólido o un Triac y un opto-acoplador con detección de cruce por cero.


Relay de estado sólido usado en el ejemplo.

Con un sistema como el propuesto podemos realizar siembras de tomates, morrones, berenjenas, etc a mediados de Julio para tener plantines listo para el trasplante a fines de Septiembre y cosechar los primeros frutos al inicio de Diciembre.

También se puede agregar una iluminación adecuada para el crecimiento de plantas.

El funcionamiento del proyecto tiene un resultado excelente, probado en climas de Argentina.
Material extraído del libro "PROYECTOS CON ELECTRÓNICA".