Acuariofilia Madrid

Versión completa: Aula Arduino para principiantes.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Si te ajustas a los montajes, siempre puedes coger el código hecho y usarlo

Yo tengo poca idea de c pero me he hecho mi propio gestor

Y si necesitas ayuda... Pregunta sin problema
por briquear no hay problema, mi novia dice que soy manítas jeje

Ayuda necesito toda para su programación pues no se nada del lenguaje.
Esto sería compatible con un Nas Synology?
Que quieres hacer con el nas? Yo tengo un 212j
Ya que estará cerca del acuario, meterle la programación para que ordene encender la luz, atardecer, amanecer, porque los ventiladores irán con su sensor y no hará falta programación. Por wifi o Cable?
Tengo un 112j.
Gosnel... Mira que synology tiene posibilidades pero... No lo veo.
Motivo? Sí tiene posibilidades...por qué no unificarlo?
(07-09-2014, 12:51 PM)Gosnel escribió: [ -> ]Para los que no sabemos nada de lenguaje C, imposible sacarlo adelante, no?

Yo creo que aquí hay gente que no sabe lenguaje C, de electrónica lo justito y con perseverancia lo consiguió.

La necesidad de saber programar en C es obvia si quieres hacer algo demasiado especial. Si lo que quieres hacer es algo normalito, se puede solucionar usando un programa ya hecho.

Adaptar un programa ya hecho puede ser una lotería, porque lo que a un no experto le parece una adaptación trivial, puede no serlo. Haría falta saber en que proyecto estás pensando.

(07-09-2014, 01:05 PM)Gosnel escribió: [ -> ]Ya que estará cerca del acuario, meterle la programación para que ordene encender la luz, atardecer, amanecer, porque los ventiladores irán con su sensor y no hará falta programación. Por wifi o Cable?
Tengo un 112j.

El programa se compila en un ordenador y el código ejecutable se carga en el Arduino.
En principio, el Arduino una vez carga el código no necesita seguir conectado con ningún ordenador, aunque puede hacerse no es algo trivial.
El Arduino no está pensado para comunicar con un disco duro pero puede guardar datos en su memoria EEPROM.

Lo que tu mencionas es un tipo de controlador bastante normalito. No me parece complicado a primera vista, pero no se muy bien que pinta el wifi. Los proyectos que estamos tratando aquí no contemplan por el momento temas de control inalambrico ni remoto a través de Internet.
Hombre lo del wifi más que nada por mandar la orden del Nas al Arduino, aunque si me dices que no puede leer Arduino de un hdd, pues no hay más que decir. Quedará en la memoria eeprom que comentas..
Sería compatible a su vez con alguna app Android? Aunque su tiene su programación, no sería necesario...
Resumiendo, quería meter la programación de la luz y si es viable, los ventiladores y calentador. Supongo que esto es lo básico...
Para cualquier tipo de interfaz en remoto, te la tienes que programar. Seguro que hay librerías para eso, pero cada aplicación Arduino implementa sus propias soluciones a este tipo de requerimientos. Ten en cuenta de que en Arduino no existe nada que se parezca a una BIOS de un PC y mucho menos nada que se parezca a un S.O. Lo más parecido que existe es un firmware para habilitar las comunicaciones por USB y para poder cargar programas y muy poquito más. Arduino no es un ordenador. Por esa razón hay muchos proyectos que consisten en comunicar Arduino con un mini ordenador como el Raspberry Pi, del tamaño de una caja de cigarrillos, y que es capaz de usar ese tipo de elementos que tu comentas.
Tienes que concretar lo que quieres conseguir con tu proyecto y puede que para algunas cosas debas usar Arduino y para otras un Raspberry Pi.
Lo que quiero es encender la luz, amanecer, atardecer y apagar. Encender ventiladores si llegase a una temp y encender calentador si llegase a otra, esto es posible ?
Buenas tardes a todos.

Alberto, acabo de ver la bomba. ¿Las has comprado ya?. Te comento, funcionan a muchas revoluciones, parece una máquina de afeitar. Tengo un par por casa. Si quieres, te regalo una para que hagas pruebas, sin compromiso.

[Imagen: IMG_20140907_191104_zpspnupz0ls.jpg]

Yo hice un montaje con tres bombas como la que te comenté, quedó algo parecido a esto (falta una bomba, llegó defectuosa y me enviaron otra).

[Imagen: P1060660_zps80ee585f.jpg]

[Imagen: P1060655_zps371ceb75.jpg]

Comento el montaje:

Cada bomba perilstática va comentada a una salida de esta placa de mosfets comprada en Ebay:

[Imagen: P1060622_zps7fad820e.jpg]

http://www.emartee.com/product/42102/4%2...Compatible

Esta placa hace tiempo que la compré, hoy no la hubiese comprado, la habría construido yo. Con la placa,
Cada bomba la conecto a un pin analógico del Arduino (mediante la placa anterior), y en la regulo a 150-160 (de 255 que es el máximo PWM).

Los pulsadores los puse en cada bomba para de vez en cuando, testar la cantidad de abono que sale de cada bomba; los segundos de abonado coinciden tanto en manual como automático.

El código:

Código:
/////////  XAVI LOPEZ 15 ENERO 2014
/////////  PROYECTO ABONADOR 3 BOMBAS
/////////  ACUARIO DULCE

#include "Wire.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <TimeAlarms.h>
#include <Time.h>
#include <DS1307RTC.h>
//////////////////////////////////
///    DEFINICION DE PINES    ////
//////////////////////////////////
int motorMacros  =            10;       //  BOMBA MACROS
int motorHierro  =             9;       //  BOMBA HIERRO
int motorMicros  =             3;       //  BOMBA MICROS
int Aireador =                 5;       //  AIREADOR PARA MOVER LAS MEZCLAS
const int buttonMacros =       8;       //  PULSADOR BOMBA MACROS
const int buttonHierro =       4;       //  PULSADOR BOMBA HIERRO
const int buttonMicros =       7;       //  PULSADOR BOMBA MICROS
int buttonStateHierro =        0;        
int buttonStateMicros =        0;
int buttonStateMacros =        0;
///////////////////////////////////
int tiempoMacros=           2000;       //  TIEMPO    ABONADO MACROS
int tiempoMicros=           2000;       //  TIEMPO    ABONADO MICROS
int tiempoHierro=           2000;       //  TIEMPO    ABONADO HIERRO
///////////////////////////////////
int horMacros               =  14;      //  HORA      ABONADO MACROS  
int minMacros               =  30;      //  MINUTOS   ABOMADO MACROS
int segMacros               =  10;      //  SEGUNDOS  ABONADO MACROS
///////////////////////////////////
int horMicros               =  14;      //  HORA      ABONADO MICROS  
int minMicros               =  31;      //  MINUTOS   ABOMADO MICROS
int segMicros               =  10;      //  SEGUNDOS  ABONADO MICROS
///////////////////////////////////
int horHierro              =  14;      //  HORA      ABONADO HIERRO
int minHierro              =  32;      //  MINUTOS   ABONADO HIERRO
int segHierro              =  10;      //  SEGUNDOS  ABONADO HIERRO      
//////////////////////////////////
///        VOID SETUP         ////
//////////////////////////////////
void setup()
{
Wire.begin();
setSyncProvider(RTC.get);
pinMode(motorMacros, OUTPUT);
pinMode(motorHierro, OUTPUT);
pinMode(motorMicros, OUTPUT);
pinMode(Aireador,    OUTPUT);
pinMode(buttonHierro, INPUT);  
pinMode(buttonMicros, INPUT);
pinMode(buttonMacros, INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
}
//////////////////////////////////
///        VOID LOOP          ////
//////////////////////////////////
void loop()
{
/////////////////////////////////////////////////////////////
/////////    ALARMAS BOMBAS    /////////////////////////////
//////  dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday
//////////////////////////////////////////////////////////////////////////////////
Alarm.alarmRepeat(dowMonday,horMacros,minMacros,segMacros,BombaMacros);       ////   ABONO MACROS 3 VECES A LA SEMANA
Alarm.alarmRepeat(dowWednesday,horMacros,minMacros,segMacros,BombaMacros);    ////   LUNES, MIERCOLES Y VIERNES
Alarm.alarmRepeat(dowFriday,horMacros,minMacros,segMacros,BombaMacros);
//////////////////////////////////////////////////////////////////////////////////
Alarm.alarmRepeat(dowSaturday,horMicros,minMicros,segMicros,BombaMicros);     ////   ABONO MICROS 1 DIA A LA SEMANA, SABADO
//////////////////////////////////////////////////////////////////////////////////
Alarm.alarmRepeat(dowTuesday,horHierro,minHierro,segHierro,BombaHierro);     /////   ABONO HIERRO 2 VECES A LA SEMANA
Alarm.alarmRepeat(dowThursday,horHierro,minHierro,segHierro,BombaHierro);    /////   MARTES Y JUEVES  
//////////////////////////////////////////////////////////////////////////////////
Pantalla();
Alarm.delay(1000);
Abonado_Manual();
}
//////////////////////////////////
///   VOID ABONADO_MANUAL     ////
//////////////////////////////////
void Abonado_Manual()
{
buttonStateHierro = digitalRead(buttonHierro);
buttonStateMicros = digitalRead(buttonMicros);
buttonStateMacros = digitalRead(buttonMacros);
/////////////////////////////////////////////////
///  HIERRO
if (buttonStateHierro == HIGH)
{
BombaHierro();
}
/////////////////////////////////////////////////
////  MICROELEMENTOS
if (buttonStateMicros == HIGH)
{
BombaMicros();
}
/////////////////////////////////////////////////
//    MACROELEMENTOS  =  MEZCLA POTASIO/NITRATO/FOSFATO
if (buttonStateMacros == HIGH)
{
BombaMacros();
}
}
//////////////////////////////////
///      VOID PANTALLA        ////
//////////////////////////////////
void Pantalla()
{
  lcd.setCursor(4,0);
  if (hour() < 10) lcd.print("0");
  lcd.print(hour());
  printDigits(minute());
  printDigits(second());
  lcd.print(" ");
  lcd.setCursor(3,1);
  if (day() < 10) lcd.print("0");
  lcd.print(day());
  lcd.print(" ");
  if (month() < 10) lcd.print("0");
  lcd.print(month());
  lcd.print(" ");
  lcd.print(year());
}
void printDigits(int digits)
{
  lcd.print(":");
  if(digits < 10)
  lcd.print("0");
  lcd.print(digits);
}
/////////////////////////////////////////////
///////////    VOID BOMBAS        ///////////
////////////////////////////////////////////
void BombaHierro()
{
lcd.setCursor(0,1);
lcd.print("ABONANDO  HIERRO");
//analogWrite(Aireador, 50);
//delay(5000);
//analogWrite(Aireador, 0);
//delay(1000);
analogWrite(motorHierro, 170);
delay(tiempoHierro);
analogWrite(motorHierro, 0);
delay (1000);
lcd.setCursor(0,1);
lcd.print("                ");
}
////////////////////////////////////////////
void BombaMicros()
{
lcd.setCursor(0,1);
lcd.print("ABONANDO  MICROS");  
//analogWrite(Aireador, 50);
//delay(5000);
//analogWrite(Aireador, 0);
//delay(5000);
analogWrite(motorMicros, 170);
delay(tiempoMicros);
analogWrite(motorMicros, 0);
delay (1000);
lcd.setCursor(0,1);
lcd.print("                ");
}
////////////////////////////////////////////
void BombaMacros()
{
lcd.setCursor(0,1);
lcd.print("ABONANDO  MACROS");  
//analogWrite(Aireador, 50);
//delay(5000);
//analogWrite(Aireador, 0);
//delay(5000);
analogWrite(motorMacros, 160);
delay(tiempoMacros);
analogWrite(motorMacros, 0);
delay (1000);
lcd.setCursor(0,1);
lcd.print("                ");
}
////////////////////////////////////////////


Estoy seguro que el código se puede modificar. Medina, otro apasionado de los acuarios y Arduíno, me hizo ver que la botonera no responde correctamente, pero para el uso que le doy, ya me va bien.

Se me olvidaba, para mover las mezclas antes de abonar, desmonté un aireador a pilas y utilicé su motor:

[Imagen: P1060628_zpsf9fbdd50.jpg]

Va conectado a los tres recipientes de abono.

Como comenté, no tengo formación en temas electrónica-programación, y el código es un copia-pega de varios ejemplos que corren por la red.

Saludos y que la comunidad Arduinera siga creciendo.
(06-09-2014, 04:59 PM)xavi escribió: [ -> ]Alberto, no veo la bomba. Debe ser mi telefonía.

La bomba que te he puesto funciona muy bien. El tubo mantiene en su interior el abono, sin descebarse.

Juanma, lo primero es la salud.

Saludos.
Gracias xavi.
(07-09-2014, 12:51 PM)Gosnel escribió: [ -> ]Para los que no sabemos nada de lenguaje C, imposible sacarlo adelante, no?

Yo de C no tengo ni idea, estoy leyendo mucho y mirando ejemplos en internet y asi voy adaptandolo a mis necesidades, de electronica estoy igual, soldar se, llevo muchos años que por mi trabajo tengo que hacerlo pero de componentes electronicos ni idea, pero con internet es facil llevar a acabo cualquier proyecto.

Lo que tu comentas que quieres hacer es mas o menos lo mismo que estoy haciendo yo, ya tengo mi pantalla acabada y mi codigo casi listo, falta pulir algunas cosillas, seguro que se podria hacer mejor, pero funciona, y para mi es lo importante.

De todas formas aqui encontraras ayuda, yo si quieres sin mucha idea puedo ayudarte, seguro que entre todos llegamos a hacerlo. A mi alprincipio me daba respeto el tema Arduino y su programacion, pero una vez que te pones le vas cogiendo el hilo y no estan complicado.

Un saludo.
(07-09-2014, 08:30 PM)Gosnel escribió: [ -> ]Lo que quiero es encender la luz, amanecer, atardecer y apagar. Encender ventiladores si llegase a una temp y encender calentador si llegase a otra, esto es posible ?

En efecto, todo eso lo puedes hacer con mi software CAO1. Necesita un Arduino Mega 2560.

¿Te planteas una iluminación LED dimeable? o solo encender y apagar una iluminación normal.
Hombre si puedo hacer el amanecer y atardecer...perfecto. si no, me conformaré con el apagar y encender