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.
Entonces habría alguna forma de adaptar el programa de forma fácil?
(16-10-2015, 04:14 PM)sergdr escribió: [ -> ]Entonces habría alguna forma de adaptar el programa de forma fácil?

Parece que se perdió la respuesta que escribí ayer.

Hay que cambiar una sola línea del programa. Concretamente un 700 por un 686.
Repasa mi contestación anterior y si necesitas ayuda para entenderlo intentaré explicarlo mejor.
Creo que esa respuesta era para "Agamenon". Seguro que lo tendrá en cuenta O:-) . Mi pregunta era una anterior. De todas formas formas ya he pedido el material que voy a emplear. No voy a usar sonda de pH, Quería tres canales de dimeo en lugar de 4 (aunque si no soy capaz de adaptar el programa pondré 4, y santas pascuas) e intentar regular la salida de un termostato AKO que lo tengo puesto a un cable térmico siliconado ("suelo radiante") poniéndole distintos intervalos y así usar doble protección (y regular este en lugar del ventilador de los leds, ya que son siliconados -aislados- y están sobre una plancha de aluminio, que espero los refrigere).

Mientras tanto me he leído tu libro (aunque voy a necesitar una segunda lectura, no porque no este bien escrito, sino por mi nivel de C), y he estoy leyendo ahora "Arduino Curso Práctico de Formación" de Óscar Torrente.

La pantalla que me he pedido es de 20x4 por temas de compatibilidad del programa. Y los pulsadores, ¿supongo que valen cualquiera de electrónica usando las resistencias que indicas para cada una de ellas?. Uso canales de leds de 12v impermeabilizados con transformadores estabilizados. El arduino que he pedido es el arduino mega. Me he pedido los Tip141 y algunos relés a 5v, entre otras cosas como el rtc, ...

Mi pregunta era para ver si todo esto era viable antes de empezar. "Pero ya me tirado al río". De todas formas ya te preguntaré, si no te importa, de las dudas que me surjan.
Cada uno de los 4 canales de Dimeo viene programado con un comportamiento distinto siempre en función del fotoperiodo.
Si tienes claro el diferente comportamiento de tus tres canales tendrías que intentar aprovechar los tres canales que mejor se adapten a tus necesidades y en todo caso modificar lo que haga falta.
El cuarto canal basta con dejarlo desconectado. Lo mismo digo respecto al sensor de pH. Lo inhabilitas y lo dejas desconectado.

PD:
Cuando estés haciendo referencia a algún comentario, pon una cita para que sepamos a qué te refieres. En caso contrario parecerá que estabas refiriéndote al último mensaje.
if(valorTemp > 35)
{
digitalWrite(Motor, HIGH); // Liga a bomba que circula a agua
}
else
{ digitalWrite(Motor,LOW);


Mas se eu quiser que a bomba liga se a temperatura de valorTemp for maior que 35 e que o valor de temp2 seja abaixo de 28 como faço ? e que a bomba fique ligada por apenas 2 minutos
(18-10-2015, 08:25 PM)gajowebmaster escribió: [ -> ]if(valorTemp > 35)
{
digitalWrite(Motor, HIGH); // Liga a bomba que circula a agua
}
else
{ digitalWrite(Motor,LOW);


Mas se eu quiser que a bomba liga se a temperatura de valorTemp for maior que 35 e que o valor de temp2 seja abaixo de 28 como faço ? e que a bomba fique ligada por apenas 2 minutos
Para entender lo que quiso preguntar he tenido que recurrir a Google translator.

Voy a suponer que lo que quiso preguntar es
"Pero si quiero que la bomba gire a una temperatura (valorTemp) superior a 35 y el valor Temp2 está por debajo de 28 como lo hago? ¿y si quiero que la bomba permanezca encendida durante dos minutos?

Este es un trozo de código que no se de donde sale. No se indica cada cuanto tiempo se ejecuta porque no aparte dentro de un bucle.

Puede que lo que en realidad desee hacer es verificar si hay que cambiar el estado de la bomba solo cada 2 minutos, para optimizar su uso. Eso me lleva a pensar que hablamos de una bomba de agua bastante grande.

Yo intentaré ayudarle, pero use Google translator porque yo no entiendo el Portugués. Háblenos algo de usted y de su proyecto. No parece que sea un pequeño acuario, pero eso a mí no me importa y siento curiosidad.

Quizás lo que está buscando sea algo de este tipo:

void loop(void){
valorTemp=LeerSensorTemp();
if(valorTemp > 38) {
digitalWrite(Motor, HIGH); // Liga a bomba que circula a agua
}
else{
digitalWrite(Motor,LOW);
}
delay (120000); // 12000 miliSeg= 2 minutos
}
Código:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Conectar o pino central dos sensores ao pino 10 do Arduino
#define ONE_WIRE_BUS 10
//Porta ligada ao pino IN1 do modulo
int rele1 = 9;

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Referencias
DallasTemperature sensors(&oneWire);
DeviceAddress termometroSump = { 0x28, 0xFF, 0x11, 0xA3, 0x15, 0x14, 0x00, 0x70 };
DeviceAddress termometroSolar = { 0x28, 0xFF, 0x83, 0x0D, 0x2E, 0x04, 0x00, 0x0B };
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void)
{
   lcd.begin(16, 2);
  // Start up the library
  sensors.begin();
  // set the resolution to 10 bit (good enough?)
  sensors.setResolution(termometroSump, 10);
  sensors.setResolution(termometroSolar, 10);
  
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00)
  {
    lcd.print("Erro ao ler temperatura !");
  }
  else
  {
    lcd.print(tempC, 0);
    lcd.print("C");
     }
}

void loop(void)
{
  
  delay(10000);
  lcd.clear();
    
  lcd.setCursor(0, 0);
  lcd.print("Solar ");
  printTemperature(termometroSolar);

  sensors.requestTemperatures();
  lcd.setCursor(0, 1);
  lcd.print("Sump  ");
  printTemperature(termometroSump);
  
   if (termometroSolar > 35 && termometroSump < 28)
{
digitalWrite(rele1 , HIGH);
delay(120000);
digitalWrite(rele1 , LOW);
}
else
{
digitalWrite(rele1 ,LOW);
}
}
Código:
Programa_Principal.ino: In function 'void loop()':
Programa_Principal:59: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Programa_Principal:59: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
ISO C++ forbids comparison between pointer and integer [-fpermissive]
¿Hace ahora lo que deseas?

La temperatura la verifica cada 10 segundos y si supera los 35, activa el rele1 durante 2 minutos. Lo que ocurre es que así durante 2 minutos de activación del rele1, el sensor no hará lecturas y supongo que sería interesante continuar leyendo la temperatura. Comprueba esto:

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Conectar o pino central dos sensores ao pino 10 do Arduino
#define ONE_WIRE_BUS 10
//Porta ligada ao pino IN1 do modulo
int rele1 = 9;

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Referencias
DallasTemperature sensors(&oneWire);
DeviceAddress termometroSump = { 0x28, 0xFF, 0x11, 0xA3, 0x15, 0x14, 0x00, 0x70 };
DeviceAddress termometroSolar = { 0x28, 0xFF, 0x83, 0x0D, 0x2E, 0x04, 0x00, 0x0B };
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void)
{
lcd.begin(16, 2);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(termometroSump, 10);
sensors.setResolution(termometroSolar, 10);

}

void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
lcd.print("Erro ao ler temperatura !");
}
else
{
lcd.print(tempC, 0);
lcd.print("C");
}
}


void RefreshMonitor()
{
delay(10000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Solar ");
printTemperature(termometroSolar);
sensors.requestTemperatures();
lcd.setCursor(0, 1);
lcd.print("Sump ");
printTemperature(termometroSump);
}


void loop(void)
{
RefreshMonitor();
if (termometroSolar > 35 && termometroSump < 28)
{
unsigned long ini = millis();
digitalWrite(rele1 , HIGH);
while ( (millis()-ini) < 120000) RefreshMonitor(); // RefreshMonitor() until 2 minutes
digitalWrite(rele1 , LOW);
}
else
{
digitalWrite(rele1 ,LOW);
}
}
Hola a todos!!

Se que sale un poco del ritmo del hilo, pero hoy en día hay muchos cursos gratuitos en la RED, sobre en ingles y de universidades americanas, pero también en español (a través de universidades (UNED, etc), o webs como udemy.com, devcode.la, alumn-e.com, coursera.org, etc). Y he encontrado un curso sobre iniciacion a los circuitos electricos y ARDUINO que creo que puede venir bien a cualquiera que quiera intentar un proyecto con ARDUINO (y no tenga ni papa) o simplemente tenga curiosidad por este mundillo.

https://www.coursera.org/learn/electrones-en-accion

Este otro es sobre fundamentos básicos de programación:

https://www.udemy.com/introduccion-a-la-...-practico/

Espero que os sirvan (si estáis interesados) y que valgan de ayuda para aumentar los conocimientos de este aula de Arduino (sin sobrecargar de trabajo a Antonio Castro Big Grin).

Un saludo!!!

P.D: Una gran iniciativa Antonio, +1 mil veces jajaja
Ya me llegó todo para montar el medidor de ph. Pero hay problemas y no se si el sensor de cyber plant no funciona bien o es la sonda la que no lo está. No es capaz de fijar la temperatura. Meto la sonda en una solución tampón de 7 o en la de 4 y está continuamente variando, es imposible fijarlo de forma que no hay quien lo calibre. Probando en CAO y en el programa de prueba del sensor, no hay forma de que se quede en un valor fijo. Tras 10 minutos metido en el mismo líquido empieza a variar menos, pero lo cambio a otro líquido con otro ph y nada, ni mide bien el valor ni es capaz de fijarse en muuucho tiempo.

Es la sonda me imagino no? qué experiencias habéis tenido con este sensor, el de cyberplant?
Nadie puede confirmarme el problema del que hablo?
Por la experiencia que yo he tenido con las mías se trata de un problema muy típico de las sondas de Ph en mal estado. Las sondas que terminan fallando hacen eso y yo las he verificado no solo en CAO sino en medidores de pH comerciales. Una de las que me hizo eso la compré en una tienda madrileña de acuariofilia cuyo nombre no mencionaré.

La punta de una sonda es muy delicada. Si no se guarda bien o si se guarda durante mucho tiempo se estropean. Deben estar permanente mente húmedas.

El comportamiento al que te refieres ocurre más fácilmente en un acuario con agua blanda que en una solución tamponada. Donde el tiempo de estabilización de la sonda es mucho menor. Yo, creo que esa sonda está inservible. Undecided
Agamenon, un dato que no mencionas es si esa sonda ha funcionado bien en alguna de las pruebas vez desde que la compraste. Lo digo porque según mi experiencia incluso marcas y modelos muy utilizados y con gran reputación, pueden venir mal.
Las pruebas que he hecho con la sonda son justo estas. Montar el sensor de cyberplant, sacar la sonda de la caja y conectarla, probar con el programa de la página de cyberplant para ver que coge el sensor y recibe valores, y luego adaptar CAO y ya intentar calibrar la sonda ahí.
Espero equivocarme, pero yo no creo que esos problemas sean ni del software ni del sensor. Yo nunca conseguí recuperar una sonda que funcionara mal, pero puede que no esté todo perdido. He encontrado esto: ¿Qué debo hacer si el electrodo de pH está lento, errático y difícil de calibrar?