Здоровяк
post Mar 2 2013, 20:42 
Отправлено #1


Завсегдатай

Сообщений: 432



Итак, вроде не было такой темы.
Предлагаю тут обсуждать различные варианты автоматизации при уходе за аквариумом. В частности на системе Arduino.
Для примера подобных систем


морякам должно особо понравится smile3.gif

Ещё большим стимулом для нас всех должно стать, что среди нас есть люди которые уже собирали подобные системы и могут если что подсказать нам.
Profile CardPM
  0/0  
3 Страницы  1 2 3 >  
Ответить Создать тему

Автоматизация аквариумного хозяйства

Здоровяк
post Feb 28 2013, 23:24 
Отправлено #2


Завсегдатай

Сообщений: 432



Цитата(Excentro_24 @ Feb 28 2013, 23:19)
магкой тряпочкой. сложно это делать просто да и после этого перекалибровывать его приходится....  Ну и зелёные водоросли зачастую только в кислоте отлипают...

А вообще если он ни ни к какой автоматике не привязан то нафиг нафиг нафиг. Лучше обычный индикационный раствор. Хлопот меньше.
*

ну это понятно, в планах аква комп на arduino, но это, с учётом написания софта, скорее ближе к осени.
Profile CardPM
  0/0  
Excentro_24
post Mar 1 2013, 07:13 
Отправлено #3


Активный

Сообщений: 5 573



Цитата(Здоровяк @ Mar 1 2013, 00:24)
ну это понятно, в планах аква комп на arduino, но это, с учётом написания софта, скорее ближе к осени.
*

Хех исходники я уже на этом форуме выкладывал было..
Profile CardPM
  0/0  
Здоровяк
post Mar 1 2013, 10:55 
Отправлено #4


Завсегдатай

Сообщений: 432



Цитата(Excentro_24 @ Mar 1 2013, 08:13)
Хех исходники я уже на этом форуме выкладывал было..
*

Если не в лом ткни пальцем. У тебя работает такая система?
Profile CardPM
  0/0  
Excentro_24
post Mar 1 2013, 15:05 
Отправлено #5


Активный

Сообщений: 5 573



Цитата(Здоровяк @ Mar 1 2013, 11:55)
Если не в лом ткни пальцем. У тебя работает такая система?
*

Да работает. На радуине крутится общий таймер отвечающий за освещение, со2, компрессор и автоматическую регулировку скорости вращения кулеров, контроль за температурой воды с отключением основного света при перегреве. + отключение подачи со2 при его сильном изменении. Датчик PH купил на ебее за 15 зелёных, усилитель к нему собирал сам из того что валялось дома. Блок реле тоже собирал из того что нашлось дома.
ps есть только одна проблема которую не смог победить часы на базе ds1307 переодически останавливаются при отключении ЭМ клапана хоть симисторное управление из-за этого на него ставь(

Искать в ломы но вот исходник.
code

Исходный код

#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

/*

To do:
*  if lights are turned out for one reason or another, extend the photo-period by that amount
*  adjust time for daylight savings

Analog Pin 1 = PH Probe
Analog Pin 2 = **ORP Probe?
Analog Pin 3 =
Analog Pin 4 = SDA for I2C
Analog Pin 5 = SCL for I2C


Digital Pin 0 = RX
Digital Pin 1 = TX
Digital Pin 2 = Temp Sensor
Digital Pin 3 = Relay day light
Digital Pin 4 = Relay moon light
Digital Pin 5 = PWM fan 1
Digital Pin 6 = PWM fan 2
Digital Pin 7 = Relay co2 solenoid
Digital Pin 8 = Relay heater
Digital Pin 9 = Relay air pump
Digital Pin 10 =
Digital Pin 11 =
Digital Pin 12 =
Digital Pin 13 = Alarm?


*/


LiquidCrystal_I2C lcd(0x27,20,4);  //[# of lines on LCD],[address of serial LCD controller on I2C]


int ph_probe = 1;  //PH probe on analog 1
OneWire ds(2);  // Temp Sensor on pin 2
int day_light = 3;
int moon_light = 4;  
int fan_1 = 6;
int fan_2 = 5;
int CO2 = 7;
int heater = 8;  //нагреватель
int air = 9;
int alarm = 13;


int heater_on_temp = 2400;  //Температура включения нагревателя   25,5С = 2550
int heater_off_temp = 2600; //Температура отключения нагревателя

int fan_1_min = 2850;  //Температура включения 1 кулера
int fan_1_max = 3050; //Температура выхода на максимальные обороты 1 кулера

int fan_2_min = 3000;  //Температура включения 2 кулера
int fan_2_max = 4000; //Температура выхода на максимальные обороты 2 кулера

int lights_off_temp = 3200;  //При такой темпераатуре основной свет выключится

int lights_on_time = 1000;  //Время ключения основного света   13:20 = 1320
int lights_off_time = 2200; //Время отключения основного света
int wait_time = 5;         //время задержки включения ламп в случае перегрева
int lights_out = -100;

int moonl_on_time = 2200;  //Время включения ночной подсветки
int moonl_off_time = 700;  //Время выключения ночной подсветки

int air_on_time = 2200;     //Время включения аэратора
int air_off_time =700;      //Время выключения аэратора

int CO2_on_time = 930;     //Время включения подачи CO2
int CO2_off_time =2130;    //Время выключения подачи CO2
int wait_time_CO2 = 5;       //Dремя задержки включения клапана в случае избыточной подачи
int CO2_out = -100;
int CO2_off_PH = 5;        //Значение PH при котором будет прекращена подача газа

#define NUMREADINGS 10
int readings[NUMREADINGS];      // Чтение с аналового входа
int index = 0;        // текущее количество чтений
int total = 0;        // tвсего чтений
int average = 0;      // в среднем


void setup(void) {
 
 Wire.begin();     // Инициализация шины I2C
 lcd.init();       // Инициализация LCD
 lcd.backlight();  // включение подсветки
 
   
 //разкоментить для установки времени
 RTC.stop();
 RTC.set(DS1307_SEC,01);      
 RTC.set(DS1307_MIN,40);    
 RTC.set(DS1307_HR,8);      
 RTC.set(DS1307_DOW,2);      
 RTC.set(DS1307_DATE,14);      
 RTC.set(DS1307_MTH,8);        
 RTC.set(DS1307_YR,12);        
 RTC.start();

 
 //****** Инициализация входов/выходов************************************/
 pinMode(heater, OUTPUT);       // Цифровой выход для нагревателя
 pinMode(day_light, OUTPUT);    // Цифровой выход для основного света
 pinMode(moon_light, OUTPUT);   // Цифровой выход для ночной подсветки
 pinMode(fan_1, OUTPUT);        // Цифровой выход для 1-го кулера
 pinMode(fan_2, OUTPUT);        // Цифровой выход для 2-го кулера
 pinMode(air, OUTPUT);          // Цифровой выход для компрессора
 pinMode(CO2, OUTPUT);          // Цифровой выход для клапана CO2
 pinMode(alarm, OUTPUT);        // Цифровой выход для звукового сигнала
 
 digitalWrite(day_light, LOW);
 
 for (int i = 0; i < NUMREADINGS; i++)
   readings[i] = 0;
 
}

int High = 0;
int Low = 10000;
int on_minute = 1;

void loop(void){
 byte i;
 byte present = 0;
 byte data[12];
 byte addr[8];
 long ph_val;
 int HighByte, LowByte, TReading, SignBit, Tc_100, Tc2_100, Whole, Fract, Whole2, Fract2, minute, hour, second, date, month, year, mil_time, ph_read;
 char buf[12];  //используется для перевода int в string для отображения на дисплее
 
 //Получение времени из DS1307**************************************************************************
********************
 
 hour = RTC.get(DS1307_HR,true);  
 minute = RTC.get(DS1307_MIN,false);
 second = RTC.get(DS1307_SEC,false);
 date = RTC.get(DS1307_DATE,false);
 month = RTC.get(DS1307_MTH,false);
 year = RTC.get(DS1307_YR,false);
 mil_time = (hour * 100) + minute;
 
//получение температуры из DS18B20 ********************************************************************************
*******
  if ( !ds.search(addr)) {
     ds.reset_search();
     return;
 }
 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);         // start conversion, with parasite power on at the end
 present = ds.reset();
 ds.select(addr);    
 ds.write(0xBE);         // Read Scratchpad
 for ( i = 0; i < 12; i++) {           // we need 9 bytes
   data[i] = ds.read();
 }
 LowByte = data[0];
 HighByte = data[1];
 TReading = (HighByte << 8) + LowByte;
 SignBit = TReading & 0x8000;  // test most sig bit
 if (SignBit) // negative
 {
   TReading = (TReading ^ 0xffff) + 1; // 2's comp
 }
 Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
 
 if ( !ds.search(addr)) {
   ds.reset_search();
   return;
 }
 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);         // start conversion, with parasite power on at the end
 present = ds.reset();
 ds.select(addr);    
 ds.write(0xBE);         // Read Scratchpad
 for ( i = 0; i < 9; i++) {           // we need 9 bytes
   data[i] = ds.read();
 }
 LowByte = data[0];
 HighByte = data[1];
 TReading = (HighByte << 8) + LowByte;
 SignBit = TReading & 0x8000;  // test most sig bit
 if (SignBit) // negative
 {
   TReading = (TReading ^ 0xffff) + 1; // 2's comp
 }
 Tc2_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

 //Отображение текущей температуры*********************************************************************
********

 lcd.setCursor(0,0);
 
 Whole = (Tc_100 / 100);  // separate off the whole and fractional portions
 Fract = (Tc_100 % 100);

   lcd.print("Tw=");
   lcd.print(itoa(Whole, buf, 10));
   lcd.print(".");
   if (Fract < 10)
 {
    lcd.print("0");
 }
   lcd.print(itoa(Fract, buf, 10));
   lcd.print("C");
   
   
   lcd.setCursor(0,1);
 
 Whole2 = (Tc2_100 / 100);  // separate off the whole and fractional portions
 Fract2 = (Tc2_100 % 100);

   lcd.print("Ta=");
   lcd.print(itoa(Whole2, buf, 10));
   lcd.print(".");
   if (Fract2 < 10)
 {
    lcd.print("0");
 }
   lcd.print(itoa(Fract2, buf, 10));
   lcd.print("C");  
 
   //Отображение времени*************************************************************************
*****************
   lcd.setCursor(12,0);
   
   if(hour < 10){
       lcd.print(" ");
     }
   
     lcd.print(itoa(hour, buf, 10));
 
   lcd.print(":");
   if(minute < 10){
     lcd.print("0");
   }
   lcd.print(itoa(minute, buf, 10));
   lcd.print(":");
   if(second < 10){
     lcd.print("0");
   }
   lcd.print(itoa(second, buf, 10));
       
/*
 //*********************** Управление рэле *****************************************************************
 
 //**************** Нагреватель *********************************************************************
 if(Tc_100 < heater_on_temp){    
   digitalWrite(heater, HIGH);
 }  
 if(Tc_100 > heater_off_temp){    
  digitalWrite(heater, LOW);
 }
 
 //**************** Основной свет ****************************************************************************
 
  if((lights_off_temp < Tc_100 && digitalRead(day_light) == HIGH) || (digitalRead(day_light) == LOW && on_minute == 1)){
    lights_out = (minute + wait_time) % 60;
  }
 
  if((lights_out == minute) || (lights_on_time > mil_time  || lights_off_time <= mil_time)){
   lights_out = -100;
  }
 
  if(lights_out == -100 && lights_off_temp > Tc_100 && lights_on_time <= mil_time  && lights_off_time > mil_time){
    digitalWrite(day_light, HIGH);
  }
  else{
    digitalWrite(day_light, LOW);    
  }
 
 //**************** Ночная подсветка *******************************************************************************
 if(moonl_on_time <= mil_time  || moonl_off_time > mil_time){
   digitalWrite(moon_light, HIGH);
 }
 else{
   digitalWrite(moon_light, LOW);
 }
 
   //**************** Компрессор ********************************************************************************


 if(air_on_time <= mil_time  || air_off_time > mil_time){
   digitalWrite(air, HIGH);
 }
 else{
   digitalWrite(air, LOW);
 }
 
 */
// ********************** Управление кулерами **********************
//**************** Кулер 1 ********************************************************************************
**********
   
  float h = (Tc_100 - fan_1_min);
  float j = (fan_1_max - fan_1_min);
  int q = (h/j)*100;
  int hgf = q*2.55;

  if(Tc_100 < fan_1_min){    
    analogWrite(fan_1, 0);
  }
  if (Tc_100 > fan_1_max){
    analogWrite(fan_1,254);
  }
  if (Tc_100 > fan_1_min && Tc_100 < fan_1_max) {
    analogWrite(fan_1,hgf);
  }
   
   //**************** Кулер 2 ********************************************************************************
**********
   
  float g = (Tc2_100 - fan_2_min);
  float f = (fan_2_max - fan_2_min);
  int w = (g/f)*100;
  int fgh = w*2.55;
  if(Tc2_100 < fan_2_min){    
    analogWrite(fan_2, 0);
  }
  if (Tc2_100 > fan_2_max){
    analogWrite(fan_2,254);
  }
  if (Tc2_100 > fan_2_min && Tc2_100 < fan_2_max) {
    analogWrite(fan_2,fgh);
  }


 
 //*********** PH ********************************************************************************
**************
 // Для калибровки электрода опустить электрод в раствор 7ph, установить напряжение 2В. В растворе 10PH выставить напряжение 1В.
 
 total -= readings[index];     // subtract the last reading
 readings[index] = analogRead(ph_probe); // read from the sensor
 total += readings[index];     // add the reading to the total
 index = (index + 1);     // advance to the next index

 if (index >= NUMREADINGS)     // if we're at the end of the array...
   index = 0;        // ...wrap around to the beginning

 average = total / NUMREADINGS;     // calculate the average
 
   ph_val = (-1.47 * average + 1300);  //ph is stored 100 times value
 
   Whole = (ph_val / 100);  // separate off the whole and fractional portions
   Fract = (ph_val % 100);
   
   lcd.setCursor(12,1);
   lcd.print("PH=");
    if (Whole < 10){
    lcd.print(" ");
    }
   lcd.print(itoa(Whole, buf, 10));
   lcd.print(".");
   if (Fract < 10){
    lcd.print("0");
    }
   lcd.print(itoa(Fract, buf, 10));
   
  //**************** CO2 ********************************************************************************


 if((CO2_off_PH > Whole && digitalRead(CO2) == HIGH) || (digitalRead(CO2) == LOW && on_minute == 1)){
    CO2_out = (minute + wait_time_CO2) % 60;
  }
 
  if((CO2_out == minute) || (CO2_on_time > mil_time  || CO2_off_time <= mil_time)){
   CO2_out = -100;
  }
 
  if(CO2_out == -100 && CO2_off_PH < Whole && CO2_on_time <= mil_time  && CO2_off_time > mil_time){
    digitalWrite(CO2, HIGH);
  }
  else{
    digitalWrite(CO2, LOW);    
  }


  //********************** Отображение какие реле включены ************************************************************
 lcd.setCursor(0,3);
 if(digitalRead(heater) == HIGH){lcd.print("H1 ");}
   else{lcd.print("H0 ");}
 if(digitalRead(day_light) == HIGH){lcd.print("L1 ");}
   else{lcd.print("L0 ");}  
 if(digitalRead(moon_light) == HIGH){lcd.print("M1 ");}
   else{lcd.print("M0 ");}  
if(digitalRead(air) == HIGH){lcd.print("A1 ");}
   else{lcd.print("A0 ");}
 if(digitalRead(CO2) == HIGH) {lcd.print("C1 ");}
   else{lcd.print("C0 ");}

// *************************** Показ скорости вращения кулеров **********************************************************
 
 
 lcd.setCursor (0,2);
 if (q > 99) {lcd.print ("Fan1 MAX");}
 if (q < 1)  {lcd.print ("Fan1 OFF ");}
 if (q < 100 && q > 9) {
   lcd.print ("Fan1 ");
   lcd.print (q);
   lcd.print ("%");
  }
 if (q < 10 && q > 0) {
   lcd.print ("Fan1 0");
   lcd.print (q);
   lcd.print ("%");
  }
 
 lcd.setCursor (12,2);
 if (w > 99) {lcd.print ("Fan2 MAX");}
 if (w < 1)  {lcd.print ("Fan2 OFF");}
 if (w < 100 && w > 9) {
   lcd.print ("Fan2 ");
   lcd.print (w);
   lcd.print ("%");
  }
 if (w < 10 && w > 0) {
   lcd.print ("Fan2 0");
   lcd.print (w);
   lcd.print ("%");
  }

 
 //******************** Сколько осталось до нормального функционирования ***********************************************************
 
if(lights_out != -100){
   lcd.setCursor(15,3);
   lcd.print("L");  
   lcd.print(itoa((lights_out - (minute - 60)) % 60, buf, 10));  //время до включения света
 }
   else{
   lcd.setCursor(15,3);
   lcd.print("  ");
   
 }
/*  if((lights_out - (minute - 60)) % 60 < 10){
     lcd.setCursor(17,3);
     lcd.print ("  ");
   }
*/
 if(CO2_out != -100){
   lcd.setCursor(18,3);
   lcd.print("C");
   lcd.print(itoa((CO2_out - (minute - 60)) % 60, buf, 10));  //time until pumps turn on
 }
   else{
   lcd.setCursor(18,3);
   lcd.print("  ");
 }
/* if((CO2_out - (minute - 60)) % 60 < 10){
     lcd.setCursor(19,3);
     lcd.print (" ");
   }
 
 */
 
 on_minute = 0;  //signals that the program has been run once
} //end loop

Profile CardPM
  0/+4  
Здоровяк
post Mar 2 2013, 15:11 
Отправлено #6


Завсегдатай

Сообщений: 432



Цитата(Excentro_24 @ Mar 1 2013, 16:05)
Да работает. На радуине крутится общий таймер отвечающий за освещение, со2, компрессор и автоматическую регулировку скорости вращения кулеров, контроль за температурой воды с отключением основного света при перегреве. + отключение подачи со2 при его сильном изменении. Датчик PH купил на ебее за 15 зелёных, усилитель к нему собирал сам из того что валялось дома. Блок реле тоже собирал из того что нашлось дома.
ps есть только одна проблема которую не смог победить часы на базе ds1307 переодически останавливаются при отключении ЭМ клапана хоть симисторное управление из-за этого на него ставь(

Искать в ломы но вот исходник.

Спасибо. Плюсанул. Сразу пару вопросов, а для датчика зачем усилитель? Я в этом не сильно силён, знакомый обещал помочь, разве нельзя датчик к аналоговому входу прикрутить и всё? Как решал вопрос с вентиляторами? Ну в смысле как регулировал скорость? Желательно подробно, я по прикидкам думал разделить вентиляторы на 3 разных блока и включать каждый из них в зависимости от температуры, но теоретически можно же PWM вентиляторы использовать, но я не разбирался как там реально управление происходит, да и дороже они. В общем подробнее про них. А не хочешь тему отдельную создать, с подробным описанием как у тебя всё устроено? Я думаю тебя бы плюсами закидали, я бы кстати за реальную помощь в наладке системы готов даже денЮшку тебе подкинуть good.gif, я думаю и ещё желающие будут не самим ковыряться, а деньгами тебя отблагодарить, морякам так вообще сам бог велел, я смотрел там народ полный цикл освещения собирал из ардуино и светодиодов, вплоть до фаз луны biggrin.gif во фанатики rofl.gif

Я с DX.com заказал вот это
118059

LCD Keypad Shield for Arduino Duemilanove & LCD 1602
USD$ 6.90

DS1307 I2C RTC DS1307 24C32 Real Time Clock Module for Arduino - Blue
USD$ 4.80

DIY DS18B20 Stainless Steel Temperature Sensor Probe - Black
USD$ 5.90

Mega 2560 R3 Development Board w/ USB Cable for Arduino
USD$ 28.70

5V 4 Channel High Level Trigger Relay Module for Arduino - Red
USD$ 7.70

Датчик РН пока не заказывал. Не подскажешь что ещё заказать нужно? Может что то не учтено мною?

Сообщение отредактировал Здоровяк - Mar 2 2013, 15:19
Profile CardPM
  0/0  
Excentro_24
post Mar 2 2013, 16:17 
Отправлено #7


Активный

Сообщений: 5 573



Цитата(Здоровяк @ Mar 2 2013, 16:11)
Спасибо. Плюсанул. Сразу пару вопросов, а для датчика зачем усилитель? Я в этом не сильно силён, знакомый обещал помочь, разве нельзя датчик к аналоговому входу прикрутить и всё? Как решал вопрос с вентиляторами? Ну в смысле как регулировал скорость? Желательно подробно, я по прикидкам думал разделить вентиляторы на 3 разных блока и включать каждый из них в зависимости от температуры, но теоретически можно же PWM вентиляторы использовать, но я не разбирался как там реально управление происходит, да и дороже они. В общем подробнее про них. А не хочешь тему отдельную создать, с подробным описанием как у тебя всё устроено? Я думаю тебя бы плюсами закидали, я бы кстати за реальную помощь в наладке системы готов даже денЮшку тебе подкинуть  good.gif, я думаю и ещё желающие будут не самим ковыряться, а деньгами тебя отблагодарить, морякам так вообще сам бог велел, я смотрел там народ полный цикл освещения собирал из ардуино и светодиодов, вплоть до фаз луны  biggrin.gif  во фанатики  rofl.gif

Я с DX.com заказал вот это
118059 

LCD Keypad Shield for Arduino Duemilanove & LCD 1602
USD$ 6.90

DS1307 I2C RTC DS1307 24C32 Real Time Clock Module for Arduino - Blue
USD$ 4.80 

DIY DS18B20 Stainless Steel Temperature Sensor Probe - Black
USD$ 5.90

Mega 2560 R3 Development Board w/ USB Cable for Arduino
USD$ 28.70

5V 4 Channel High Level Trigger Relay Module for Arduino - Red
USD$ 7.70

Датчик РН пока не заказывал. Не подскажешь что ещё заказать нужно? Может что то не учтено мною?
*

Сразу лучше закажи блок реле на 8 каналов т.к. штука увлекающая и со временем может не хватить.

Дальше зря ты экран шилдовый заказал надо было i2c иначе пинов остаётся очень мало свободных или ардуину мегу только заказывать придётся. Да и 2 строки в 16 символов чертовски мало....

усилитель для электрода жизнено необходим т.к. сигнал с электрода очень слабы и ардуина его не распознаёт.

PWM регулировку я сделал топорным способом на транзисторе кт819б на 3 кулера в крышку. И кт815а на 1 кулер обдувающий воду. На кулера идёт уже отрегулированное напряжение.

Температурных датчика у меня 2. 1-й мерит температуру воды второй воздуха под крышкой. соответсвенно при включении света раскручиваются сначала кулера в крышке держа температуру в крышке 35 градусов. При достижении температуры воды в 27,5 включается кулер обдувающий воду. при 28 градусах в воде кулера в крышке включаются на полную. при температуре воды больше 30 градусов отключается основной свет + подача со2.

ps в версии кода которую выложил нет последних 4-х фичей)

pss вот такое безобразие твориться у меня на экране 20*4
опубликованное пользователем изображение
psss
H1 нагреватель включён
L1 общий свет включён
М0 ночная подсветка выключена
А0 компрессор отключен
С1 подача со2 включена
2 пустых места в конце это под время оставшегося до включения со2 и основного света в случае если 1 из параметров выходит из под контроля.

Сообщение отредактировал Excentro_24 - Mar 2 2013, 16:24
Profile CardPM
  0/0  
Excentro_24
post Mar 2 2013, 16:25 
Отправлено #8


Активный

Сообщений: 5 573



Ps если есть возможность то действительно лучше отделить тему и назвать аквариумная автоматика.
Profile CardPM
  0/0  
GOBLЇN
post Mar 2 2013, 16:47 
Отправлено #9


Эксперт

Сообщений: 833



если от начала до конца прям от мелочей до мелочей + работа мастера smile3.gif = во сколько встанет в рублях такая конструкция?
Profile CardPM
  0/0  
Excentro_24
post Mar 2 2013, 17:40 
Отправлено #10


Активный

Сообщений: 5 573



Цитата(GOBLЇN @ Mar 2 2013, 17:47)
если от начала до конца прям от мелочей до мелочей + работа мастера smile3.gif  = во сколько встанет в рублях такая конструкция?
*

3-5к
Profile CardPM
  0/0  
Здоровяк
post Mar 2 2013, 21:27 
Отправлено #11


Завсегдатай

Сообщений: 432



Что касается меня. Задумался об ардуино, не столько для реального упрощения жизни, сколько для того что люблю я это дело (автоматизация, электроника и т.п.). Ну и для пресноводной банки с растениями у меня получился примерно такой план.
1)Включение основного света по таймеру, возможно постепенное включение, ну и ночная подсветка.
2)Контроль температуры в аквариуме если ниже заданной то включается обогреватель если выше то вентиляторы, желательно чтобы вентиляторы работали с регулировкой мощности в зависимости от температуры.
3)Подача СО2 в зависимости от показаний датчика РН.
Это основное пока
Еще можно задуматься
4)Авто система подмены воды при ручном режиме включения данной опции, ну например сначала помпа сливает воду с банки, потом заливает из резервуара для отстаивания, ну и заливает в резервуар из крана, это не продуманно, просто мысли.
5)Авто подача удобрений т.к. таймер позволяет делать задержки в секундах, а не только в минутах то проблем со специальными помпами быть не должно, пока отпугивает только цена подобных помп.
Ну и т.д. и т.п.

Для основных функций необходимо примерно такое железо (это только для справки, надо уточнять моменты)
Сам контроллер Mega 2560 R3 Development Board w/ USB Cable for Arduino
Присоединённое изображение
Реле для переключений 5V 4 Channel High Level Trigger Relay Module for Arduino
Присоединённое изображение
Модуль времени DS1307 I2C RTC DS1307 24C32 Real Time Clock Module for Arduino
Присоединённое изображение
датчик температуры DIY DS18B20 Stainless Steel Temperature Sensor Probe
Присоединённое изображение
LCD панель вывода информации с кнопками управления LCD Keypad Shield for Arduino Duemilanove
Присоединённое изображение
Обратите внимание эта панель слишком проста и её в списке заменю как разберусь какая будет лучше и оптимальна по цена - качество.

Ещё нужен датчик РН с ебей он выйдет ориентировочно 15 долларов
Итого по минимуму на железо необходимо около 60-80 долларов.
Profile CardPM
  0/0  
Здоровяк
post Mar 2 2013, 21:42 
Отправлено #12


Завсегдатай

Сообщений: 432



Цитата(Excentro_24 @ Mar 2 2013, 17:17)
Сразу лучше закажи блок реле на 8 каналов т.к. штука увлекающая и со временем может не хватить.

Дальше зря ты экран шилдовый заказал надо было i2c иначе пинов остаётся очень мало свободных или ардуину мегу только заказывать придётся. Да и 2 строки в 16 символов чертовски мало....


Да там толком не написано сколько строк, да и я руководствовался тем что на этом дисплее кнопки управления есть, а ты получается ничего поменять не можешь? Только через перепрошивку? Или как параметры меняешь?

По реле я сначала хотел 8 взять, а потом посмотрел а там двойные реле (2 канала пока один работает второй отключён, как сработает меняется местами), подумал что таких для начала и 4-х хватит :-)
Profile CardPM
  0/0  
GOBLЇN
post Mar 2 2013, 21:47 
Отправлено #13


Эксперт

Сообщений: 833



после всего увиденного чет тоже такую штукенцию замутить захотелось... но самому все это я думаю мне не осилить...
а все оборудование ну примерно естественно какой обьем занимает? чет по количеству плат, там целый короб под все это надо чтоб спрятать.. wacko2.gif
Profile CardPM
  0/0  
Здоровяк
post Mar 2 2013, 22:15 
Отправлено #14


Завсегдатай

Сообщений: 432



Цитата(GOBLЇN @ Mar 2 2013, 22:47)
после всего увиденного чет тоже такую штукенцию замутить захотелось... но самому все это я думаю мне не осилить...
а все оборудование ну примерно естественно какой обьем занимает? чет по количеству плат, там целый короб под все это надо чтоб спрятать..  wacko2.gif
*

да не платы мелкие, контролер допустим примерно 5х10 см, всё остальное меньших размеров, там ещё куча проводов будет и как это аккуратно сделать, это будет целая история :-)
Profile CardPM
  0/0  
Excentro_24
post Mar 3 2013, 07:42 
Отправлено #15


Активный

Сообщений: 5 573



Цитата(Здоровяк @ Mar 2 2013, 22:42)
Да там толком не написано сколько строк, да и я руководствовался тем что на этом дисплее кнопки управления есть, а ты получается ничего поменять не можешь? Только через перепрошивку? Или как параметры меняешь?

По реле я сначала хотел 8 взять, а потом посмотрел а там двойные реле (2 канала пока один работает второй отключён, как сработает меняется местами), подумал что таких для начала и 4-х хватит :-)
*

С клавиатурой мне проще. Мне её только подключить к i2c шине и всё. Но придётся очень сильно перелопачивать код...

Profile CardPM
  0/0  

3 Страницы  1 2 3 >
ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
Быстрый ответ
Кнопки кодов
 Расширенный режим
 Нормальный режим
    Закрыть все тэги


Открытых тэгов: 
Введите сообщение
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
         
Показать все

Опции сообщения