Huerto e Invernadero automatizados con web de control remota

Buenas,

No, no tengo acceso a Wifi, en una primera versión no enviare ninguna información a ningún sitio y solo la utilizar para abrir y cerrar las bombas de agua y ademas.

En una segunda iteración tengo pensado poner un modulo gsm que me permita:

  • Enviar datos a un servidor que tengo en casa
  • Recibir ordenes por SMS, como por ejemplo cerrar alguna bomba en caso de alerta
  • Enviar alertas cuando algo funcione mal.

De momento tengo:

Arduino + DHT22 + Luxometro + Modulo de hora + Potenciometro + Controlador de motor funcionando

Ahora estoy centrado en las comunicaciones via radio, de momentos solo quiero ser capaz de enviar y recibir, cuando lo tenga conseguido subir el código y me dais opiniones.

Un saludo y gracias

Buenas,

Una duda que tengo, voy a hacer pruebas de campo con lo que tengo y voy a conectar el arduino a una bateria de coche de 12v, es posible?, cierto ?, mientras mantenga el voltaje no importan los amperios, o si? , no me gustaría quemar el arduino, esta batería también la conectare al easydriver del motor paso a paso

Un saludo

No va a pasar nada en tanto la parte que corresponde a motor no se alimente desde el arduino. Jamás alimentes un motor desde el arduino.

Arduino + DHT22 + Luxometro + Modulo de hora + Potenciometro + Controlador de motor funcionando

Por los sensores no hay problema.

Asi que adelante.

Buenas,

Después de unos dias sin actualizar estoy centrado en la parte del motor paso a paso.
Para ello he comprado un EasyDriver, que conecto de la siguiente forma:

Lo alimento con un transformador de 12v y 1 amperio.

El código que utilizo de momento es muy sencillo, un ejemplo encontrado en la web

#define STEPS 200
#define NUNVUELTAS 100
const int openDirection = STEPS * NUNVUELTAS;
const int closeDirection = STEPS * NUNVUELTAS * -1;

int DIR_PIN = 6; //Direction pin
int STEP_PIN = 7; //Stepper pin

void setup() {
  Serial.begin(9600);

  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
}

void loop() {
   rotate(openDirection, getVelocity());
   delay(2000);

   rotate(closeDirection, getVelocity());
   delay(4000);
}

void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) – (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest – Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);

digitalWrite(DIR_PIN,dir);

float usDelay = (1/speed) * 70;

for(int i=0; i < steps; i++){ 
  digitalWrite(STEP_PIN, HIGH); 
  delayMicroseconds(usDelay); 
  digitalWrite(STEP_PIN, LOW); 
  delayMicroseconds(usDelay); 
  }
}

He detectado los siguientes problemas:

  • El Easydriver se calienta muchísimo, es normal?, creéis que seria mejor poner un rele para cortar la alimentación al EasyDriver cuando no se esta utilizando?

  • No puedo modificar la velocidad, Os adjunto 2 videos, uno a velocidad 1 (Se supone que el máximo) donde el motor funciona correctamente. Luego bajo la velocidad a 0.50 y el motor se comporta erróneamente

Video 1

Video2

Otras dudas que tengo:

  • Quiero poner 6 switch de 3 posiciones con 2 led cada uno, de esta forma puedo abrir/automático/cerrar la válvula del riego de cada sección de forma manual. Como puedo hacer la conexión?, necesito 2 puertos analógicos por switch o 4 sumándo los leds?

  • He comprado un teclado 4x4, quiero utilizarlo para modificar variables insitu sin necesidad de desmontarlo y conectarlo al ordenador. Me gustaría hacerlo con interrupciones, para tener el código mucho mas legible y he visto que puedo hacerlo conviertiendolo para usar el bus I2C con esto:

PCF8574, es viable?

Un saludo y gracias

alguien me puede ayudar??, gracias

Lo de calentarse imagino es porque aunque el motor aun está parado, esta "haciendo fuerza".

Para que lo entiendas, si ese motor fuera de una grúa, cuando para el motor, sigue haciendo fuerza para mantener la carga en el aire, si lo desactivas se relaja y la carga se caería.

Supongo que siempre lo tienes haciendo fuerza y por eso se calienta tanto, es como si estuviera todo el rato girando. Prueba a dejar el motor en estado de reposo cuando no lo utilices, así seguramente no se coja esos calentones.

Buenas,

Despues de las vacaciones vuelvo a darle caña al proyecto, llevo varias cosas en paralelo a ver si me podéis ayudar:

1- Despues de varias propuestas me decidí por un Attiny85 para las balizas, ahora que ya tengo la protoboard montada he encontrado varios problemas:

  • Conecto un modulo de Radio 3 pin
  • Conecto 2 sensores de humedad 2 pin
  • Quiero otro pin libre para medir el voltaje de la pila 1pin

Esto significa que debo cambiar los fuses del pin reset o me falta un pin. He leído por ahí que si cambio los fuses no se puede reprogramar el attiny y en la fase en la que estoy lo veo un poco arriesgado.

Otro problema es que al meter las librerías de radio y Mesh + el ejemplo mas básico ya me ocupa el 98% de los 8kb disponibles, entonces estoy barajando otras opciones:

He visto el Attiny167, tiene 16kb de flash y el doble de patillas, pero me da miedo por la falta de ejemplos que hay por la web.

Que me recomendais?
o me tiro por un clon chino de un Arduino nano?, de precio andan prácticamente igual, sobre los 3 - 4 Eruos

Por otro lado sigo liado con el motor, por mas que hago ejemplos básicos no consigo que no se caliente el EasyDriver, de hecho ahora en verano tengo que hacer pruebas super cortas.

Un saludo

Empecemos por el motor, verificaste que corriente y voltaje necesita, también si sabes esto ajustaste la corriente que le suministra el driver al motor?.
Yo te recomendaria el arduino.

Hola,

No, no ajuste nada, el motor es un nema17, como puedo ajustarla?

Pues lo recomendado seria saber la corriente que soporta tu motor ya que hay motores nema 17 que soportan 2,5A, 1A etc según esto hay una fórmula para calcular la corriente que es suministrado.
Pero también como dice en la página de Guía de conexión de Easy Driver:(traductor de Google)

Potenciómetro
El potenciómetro a bordo está incluido para permitir a los usuarios la capacidad de seleccionar la corriente máxima proporcionada al motor. Va desde 150mA hasta 750mA. Esto requerirá que sepa qué rango de corriente puede manejar su motor: consulte la hoja de datos del motor para conocer la configuración actual.

Si no puede encontrar esta información, no tenga miedo; aún puede encontrar la configuración adecuada para el potenciómetro. Primero, ajústelo a la configuración más baja del potenciómetro. Tenga en cuenta que el potenciómetro es delicado, así que tenga cuidado de no forzar el potenciómetro más allá de los topes mecánicos al girarlo. Una vez que tenga el motor en marcha a una velocidad lenta pero constante, gire lentamente el potenciómetro y preste atención al comportamiento del motor. Debería encontrar un punto dulce donde el motor no saltee ni sacuda entre pasos.

Aplica esto a tu motor con mucho cuidado de no dañar el potenciómetro.

Buenas,

Vengo con alguna duda mas. Las balizas las voy a equipar con clones de Arduino pro minis quitándole el led y el convertidor de voltaje para minimizar el consumo.

Este Arduino se alimentara con 1 pila 18650 que ademas tendra una placa solar de 6V 1W. Para controlar la carga de la pila he comprado estos 2 elementos que veis en la imagen:

Mi idea era montarlo según se ve en la imagen y conectar el Arduino a la salida del DD05CVSA que entrega 5V y que el arduino pro mini puede soportar sin convertidor. cierto?

El problema viene ahora, tengo pensado montar un medidor de voltaje para poder analizar el comportamiento de la pila, de esta forma puedo controlar de forma remota el nivel de cada batería al igual que controlo la humedad, pero claro si pongo el medidor de voltaje detrás DD05CVSA este siempre me entregara 5V y no podre medirlo, cierto?

Luego he pensado utilizar el DD05CVSA solo para cargar, y conectar el Arduino directamente a la salida del DD04CPMA, pero claro esta salida también es la entrada de la placa solar, podría quemar el Arduino?

Si lo hago así, podría tener las funcionalidades que busco?

1 - Medir el voltaje de la bateria
2 -Tener un controlador de carga de la batería con protección contra la descarga / sobrecarga / picos de tension etc
3 - Si tengo las placa solar conectada cargando la batería, como puedo leer el voltaje de la batería?, si es de día y a pleno sol la lectura seria siempre del 100% por que estaría cargado y el voltaje que seria seria el que le entra a la bateria, cierto?

Un saludo y mil gracias

PD: Esto cada vez lo estoy complicando mas

Buenas,

Alguien me puede ayudar con los temas del ultimo post?, llevo varias semanas dandole vueltas y no se como desatascarlo

Mil gracias

Haz una lectura con el multimetro y dime respecto del GND con el que alimentes el arduino, que lees en cada borde de la pila/batería?

Hola,

Esto es lo que obtengo:

Pila sola 4,26v
Salida stand-up al arduino 5,23v
Gnd arduino positivo pila 4,25v
Gnd arduino gnd arduino 0,00v
Gnd pila a positivo arduino 5,22v
Salida Placa solar 4,30v

Un saludo y mil gracias

Venía todo bien hasta que leí esto

Gnd arduino gnd arduino 0,00v

No te abrás confundido y es

Gnd del step-up al gnd del arduino?

Si es asi parecen todos los GND estar como comunes y por lo que se lee

4.26 contra 4.25 me da que fueron momentos diferentes y puede tranquilamente considerarse como la misma tensión de batería .
Hablo de la medida entre

Gnd arduino positivo pila 4,25v

Pareciera entonces que simplemente conectando el positivio de la bateria a la entrada A0 por ejemplo estarías leyendo los 4.25V

Porque no lo intentas?

Lo que no me cierra es por donde alimentas al arduino con 5.25? Es directo a la salida +5V porque 5.25 no son suficientes para entrar por Vin.

Buenas

El arduino en un pro mini de 3,3v, lo alimento por la entrada raw.

Lo que me ha dado 0v, es el GND de la pila contra en GND del arduino?, esto podría dar un valor distinto de 0?

Entonces entiendo que podría conectar el positivo de la pila a un par de resistencias y a un pin analógico, cierto?

Que valor de resistencias debo usar?

Gracias y un saludo

Si la verdad que salio mejor de lo que esperaba.
Asi que puedes conectar un divisor resistivo y medir la tensión de la batería considerando tus 3.3V de referencia.

Buenas de nuevo,

Siento ser tan pesado pero esto me esta costando más de lo que creía, de nuevo volvemos con las balizas.

Estoy mirando cómo poner el Arduino pro mini en modo sleep, he visto varias librerías, como Low Power, Watchdog, etc, pero todas ellas limitan el tiempo en el que esta dormido a 8 segundos. He leído que se puede meter en un bucle y hacer que este segundo por x veces con lo cual podría llegar a la media hora que me gustaría que estuviera durmiendo, cierto?

por otro lado tengo conectados 2 sensores de humedad, que están directamente conectados a la salida de 3,3v del Arduino, entiendo que cuando el Arduino entra en modo sleep se corta el voltaje en esta salida, es así?

Lo comento porque he leído que solo debo alimentar los sensores de humedad mientras estoy leyendo, para evitar que se oxiden.

Mi idea es leer la humedad cada media hora y si la humedad en menor a un % leer cada 5 minutos, es decir que mediante lógica necesito cambiar el tiempo que esta dormido el Arduino.

Me recomendáis otra forma de hacerlo???,lo hago con el bucle de 8 segundo?

He leído que para reducir el consumo puedo eliminar los 2 les y el regulador de voltaje, mi duda es si puedo eliminar el regulador de voltaje, alimento el Arduino con 5V y el Arduino es de 3,3.

Entiendo que no puedo eliminarlo a no ser que lo alimentara con 3.3 directamente, cierto?

Un saludo y gracias

Si a todo, es así como dices.

A pesar que la respuesta de @Daniel_Arg es mas que contundente y correcta solo haré algunas menciones.

he visto varias librerías, como Low Power, Watchdog, etc, pero todas ellas limitan el tiempo en el que esta dormido a 8 segundos.

Low power es lo que tu necesitas.
Watchdog es cuando no quieres que tu arduino se cuelgue y si eso pasa, entonces la rutina lo reinicia cada X segundos.

Lo comento porque he leído que solo debo alimentar los sensores de humedad mientras estoy leyendo, para evitar que se oxiden.

Es el modo que tienes de preservar los sensoes aunque hace unos dias se dijo que aún asi no se evita el deterioro del sensor lo retardas bastante.

Mi idea es leer la humedad cada media hora y si la humedad en menor a un % leer cada 5 minutos, es decir que mediante lógica necesito cambiar el tiempo que esta dormido el Arduino.

La humedad de suelo no te va a cambiar cada 30min puedes incluso aumentar ese tiempo.
Ahora cuando estas regando tranquilamente podrias medir mas seguido para no derrochar agua.