Taller de Arduino

  • Iniciador del tema Iniciador del tema jmcadsl
  • Fecha de inicio Fecha de inicio
Estado
Cerrado para nuevas respuestas.
Calibra con el tampon de 7 y 10, ya que los pH que tenemos en marino rondan 8.3.
 
Gracias bbq, entonces comprare 7 y 10
Nadie sabe decirme que interface serial necesito para mi pantalla de 4X20???
 
Última edición:
el que compre yo servia tambien para 4x20. es este:


yo lo compre en esa misma tienda. lo que supongo es que habra que cambiar cosas en el codigo si es para 4x20.

aunque por el precio quizás te interese comprar un lcd con el serial ya incluido. (es lo que hice yo al final).
 
Me acaba de llegar el Arduino de honk kong, ya puedo empezar, aunque poco... no tengo ni el reloj ni los sensores de temperatura, ni la placa de relés jajajaja
 
Para calibrar el pH hay que hacerlo siempre 1º a pH 7.0 para fijar el punto medio de la etapa amplificadora y posteriormente hay que emplear una solucion lo mas proxima a el valor de nuestro acuario (da lo mismo si es 10.0 o 8.4) para ajustar la ganancia de nuestro amplificador, para hacerlo realmente bien habria que repetir el proceso reiteradas veces hasta que obtengamos lecturas como las de las soluciones de calibracion.
 
oleeeeeeeeeeeeeeeeeeee ya me llego parte del equipo, recibido relog y los reles que los compre el dia 30 y el arduino i el los termometros del dia 29 aun no jooo:(
 
atencion pregunta de programacion (ya avisé que yo de esto no tengo ni idea)

tengo el arduino con el reloj montado mostrando correctamente la hora y temperatura y viendose todo por el lcd.

digamos que ahora este es mi punto de partida.

he conectado la placa con los 4 relés y funciona correctamente (haciendo el ejemplo de blink, por ejemplo los he ido probando uno a uno, de dos en dos...).

ahora quiero usar 2 relés para encender-apagar las luces.
algo así:
luz1 se enciende a las 11
luz2 se enciende a las 13
luz2 se apaga a las 20
luz1 se apaga a las 22 horas.

lo más basico posible y no me entero jejeje.
 
Bueno, pues sería al principio del loop, conprobar su la hora es la que tu quieras, en pseudocódigo sería:

void loop ()
{
if hora=11 salidadigitalx=high;
if hora=13 salidadigitaly=high;
etc.

}

Por cierto acabo de hacer funcionar una LCD de 4x20 que tenía en un cajón, concretamente una CrystalFontz 634 con conector usb (que he tenido que desoldar) y conexión serie, jeje funciona con sólo 3 cables :-)
 
bbq te lo pongo en codigo para Arduino directamente ok?

Al principio del codigo debes definir luz1 y luz2 con los pines donde tengas conectados los reles, por ejemplo

luz1 = 5;
luz2 = 6;
debes de poner dentro del void loop una linea que llame al programa de luces, por ejemplo
luces();

y fuera del void loop creas un nuevo "subprograma" que debe llamarse igual, en nuesto caso luces y sería algo así.

void luces()
{
if (hour== 11 && minute == 1)
{
digitalWrite(luz1,HIGH);
}
if (hour==12 && minute ==1)
{
digitalWrite(luz2,HIGH);
}
if (hour==20 && minute==1)
{
digitalWrite(luz2,LOW);
}
if (hour==22 && minute==1)
{
digitalWrite(luz1,LOW);
}

}


Lo de minute es para que solo apage/ecienda el rele durante el minuto 1 de cada hora porque sino va a estar actvando/desactivando el rele durante toda la hora, se puede hacer con una variable, pero es más complejo...

Espero haberte ayudado.
 
ok. habia hecho algo similar, pero sin poner el minuto.
voy a ver...
muchas gracias
 
Si meto el código ahora... detecta que hemos pasado las 10 y las 12 y me activa los dos relés o tengo que esperar hasta que el reloj pase por las 10, entonces me enciende el primer rele y luego por las 12 para que me encienda el segundo relé?
no se si me explico, porque he metido el código y los reles no hacen nada.
este es el codigo:

#include <OneWire.h> //temperatura
#include <DallasTemperature.h>//temperatura
#define ONE_WIRE_BUS 7//temperatura, pin de entrada
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensors(&oneWire);//temperatura
#include <Wire.h> //libreria para el reloj
#define DS1307_I2C_ADDRESS 0x68//reloj
#include <SLCD.h> //LCD
#define numRows 2 //LCD
#define numCols 16 //LCD
SLCD lcd = SLCD(numRows, numCols); //LCD
int Rele1 = 3; //rele1, luces1.
int Rele2 = 4; //rele2, luces2.
int Rele3 = 5; //rele3, libre.
int Rele4 = 6; //rele4, libre.
byte decToBcd(byte val)//RELOJ
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;//RELOJ


//El setup:

void setup()
{
pinMode(Rele1, OUTPUT);
pinMode(Rele2, OUTPUT);
pinMode(Rele3, OUTPUT);
pinMode(Rele4, OUTPUT);
Wire.begin(); //RELOJ
lcd.init(); //LCD
Serial.begin(9600); //LCD
sensors.begin();//Temperatura
}

//funciones secundarias
//Iniciar LCD

void Lcdini ()
{
lcd.brightness(99);
lcd.displayOn();
lcd.clear();
}

//Apagar LCD
void lcdoff()
{
lcd.displayOff();
lcd.brightness(0);
}

// Pausa 3 segundos
void p ()
{
delay (3000);
}
//control de las luces segun la hora:
void Luces()
{

if(hour == 10 && minute == 1)
{
digitalWrite (Rele1, HIGH);
}
if(hour == 12 && minute == 1)
{
digitalWrite (Rele2, HIGH);
}
if(hour == 20 && minute == 1)
{
digitalWrite (Rele2, LOW);
}
if(hour == 22 && minute == 1)
{
digitalWrite (Rele1, LOW);
}

}


//El loop:

void loop ()
{
lcdoff();
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // LEEMOS LA HORA
InfoLcd();
if (second < 10)//asi lo comprueba 1 vez por minuto en el bucle.
{
Luces();
}
}


// reloj. no se toca nada. si hay que poner en hora ir al sketch del reloj solo.
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);


*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}


// INOFORMACION EN PANTALLA LCD
void InfoLcd ()
{

//Nombre proyecto
Lcdini();
lcd.print(" KICO'S REEF ", 0, 2);
lcd.print(" VER 1.0", 1, 4);

p();


// ahora para mostrar fecha y hora
p();
Lcdini();
lcd.print("Hora:",0,1);
if (hour < 10) Serial.print("0");
Serial.print(hour, DEC);
Serial.print(":");
if (minute < 10) Serial.print("0");
Serial.print(minute, DEC);
Serial.print(":");
if (second < 10) Serial.print("0");
Serial.print(second, DEC);

switch (dayOfWeek)
{
case 1:
lcd.print("Lun , ",1,0);
break;
case 2:
lcd.print("Mar , ",1,0);
break;
case 3:
lcd.print("Mie , ",1,0);
break;
case 4:
lcd.print("Jue , ",1,0);
break;
case 5:
lcd.print("Vie , ",1,0);
break;
case 6:
lcd.print("Sab , ",1,0);
break;
case 7:
lcd.print("Dom , ",1,0);
break;
}
Serial.print(dayOfMonth, DEC);
Serial.print("/");
if (month < 10) Serial.print("0");
Serial.print(month, DEC);
Serial.print("/");
Serial.print("20");
if (year < 10) Serial.print("0");
Serial.print(year, DEC);

p();
Lcdini();
sensors.requestTemperatures();
lcd.print("Temp. Acuario: ",0,1);
Serial.print(sensors.getTempCByIndex(0));
p();
//FadeLcd();
Lcdini();
lcd.print("Temp. Ambiente: ",0,0);
Serial.print(sensors.getTempCByIndex(1));
p();
lcdoff();
}
 
algo ha pasao, eran las 19:50 y he puesto que se encendiera el relé 1 a las 19:52. se ha encendido, pero ahora el lcd no muestra la hora, y ha perdido todo el contraste.¿?
 
joer que lio, los relés si que se encienden y apagan, pero es como si al encenderse el lcd no funcionara, se ve pero sin contraste ninguno y cuando debe mostrar la hora sale 00:00:00 jajaja
luego cuando se apagan los reles el lcd vuelve a mostrar la hora correcta y se ve con la intensidad correcta tambien.
 
La placa de reles que utilizas necesita alimentacion? Si es así, es la misma que para Arduino?
Tienes las tierras de ambos conectadas?
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba