• Welcome to Българска Аквариумна Енциклопедия. Please login or sign up.
 
20.04.2024 00:36

Промяна новините на форума:

Ако все още не сте се запознали с правилата на форума, моля, направете го!


  • Killiman Ltd
  • Професионална поддръжка на аквариуми

Търся помощ от някой с опит с Arduino

Започната от beonedge, 06.11.2013 20:38

« назад - напред »

0 Потребители и 1 Гост преглежда(т) тази тема.

beonedge

Здравейте :)
Колега от форума ми изработи един контролер базиран на Arduino UNO R3 .За съжаление няколко момента  не са ми ясни :
1)идеята е да се димират част от светодиодите , като по този начин се имитира изгрев/залез. В програмата това се прави от тези редове->
if((hour()==12)&&(minute()>=0)&&(minute()<=29))
      {b=b+1;}
    този ред указва че от 12:00 до 12:29 интензитета се увеличава до 100%
if((hour()==22)&&(minute()>=30)&&(minute()<=59))
      {w1=w1-1;}
тук аналогично - изгасяне
Не ми е ясно как мога да направя така че при намаляне на интензитета , да се намали до 30% примерно и да остане така цяла нощ (до настъпване на "изгрева"), на 30% интензитет
2) днес направих опит - 4 диода ги свързах последователно т.е. на всеки диод се пада по 12v / 4= 3V (захранването ми е на 12V , константно напрежение) . Трябва ли в този кръг да включа някакъв резистор (как да намеря стойността му) който да ограничава тока през диодите (700 mA в случая)

Благодаря предварително на всеки решил да помогне със съвет :)
I just finished cycling my tank and everything checks out fine
tmp 80F/nitrate 0/amonia 0/nitrite 0
took a month too.
Is it safe to add the salt now?

petko

Здравей
Да си призная първо не съм се занимавал с Ардуино,но мисля,че на само тези редове определят увеличаването и намалянето на светенето.Мисля,че те определят само времето за това."b" и "w" са променливи някъде трябва да са указани какви стойности да заемат.Педполагам за "b" е указано някъде "255",а"w" - "0".Потърси из програмата.
Какво е захранването ,което ползваш на какъв ток е?Ако дава точно 12V(а не само да го пише),може да минеш и без резистори.Какви са диодите бели,червени,сини?

Чавд

Mоже да опиташ например с :

if((hour()==22)&&(minute()>=30)&&(minute()<=49))
      {w1=w1-1;}

beonedge

Всъщност има 2 линии които се управляват с контроера .Единия кръг са сини (свързвам ги на 3 кръга по 4 диода всеки):
3W Ultra Violet UV 420nm-425nm LED Emitter (DC Forward Voltage: Typical: 3.6V Max: 3.8V//DC Forward Current: 700//
А другите бели (2 кръга по 5 диода понеже ги дават за 2.8V):
Cree XP-G2 XPG2 Neutra White LED 4000K-4250K (Maximum drive current (A) 1.5//Typical forward voltage @ 0.35 A (V) - 2.8//Maximum power (W)-4.9//Light outputUp to 488 lm @ 4.7 W, 85°CLight output
Ето цялата програма, ако някой може да се ориентира  :
#include <Time.h>             
#include <LiquidCrystal.h>     
#include <math.h>             
LiquidCrystal lcd (13, 12, 11, 10, 9, 8);
    int b;           
    int w1;           
    int w2;               
    int ch1=3;   
    int ch2=5;
    byte gradus[8] = {B01000, B10100,B01000, B00000,B00000, B00000,B00000, B00000};
    byte kapka[8] =  {B00000, B00100,B01110, B10111,B11111, B11111,B01110, B00000}; 
  void setup()
{   setTime(11,59,50,22,2,12);   
    lcd.begin(2,16);           
    lcd.clear();               
    pinMode(2,OUTPUT);   // изход за звукова сигнализация
    pinMode(3,OUTPUT);   // изход за осветление кръг 1     
    pinMode(4,OUTPUT);   // изход за реле
    pinMode(5,OUTPUT);   // изход за осветление кръг 2
    b=0;                       
    w1=0;                       
    w2=0;                       
}
void  loop()
{   lcd.clear();
    lcd.setCursor(4,0);
    printDigits();
    lcd.createChar(6,kapka);
    lcd.setCursor(4,1);
    lcd.write(6);
    lcd.createChar(7,gradus);   
    lcd.setCursor(11,1);           
    lcd.write(7);                 
    printTemp();     
    if((hour()==12)&&(minute()>=0)&&(minute()<=29))
      {b=b+1;}
    if((hour()==12)&&(minute()>=30)&&(minute()<=59))
      {w1=w1+1;}     
    if((hour()==22)&&(minute()>=30)&&(minute()<=59))
      {w1=w1-1;}
    if((hour()==22)&&(minute()>=0)&&(minute()<=29))
      {b=b-1;}       
    analogWrite(ch1,0.06*b+0.00004537038*b*b);
    analogWrite(ch2,0.06*w1+0.00004537038*w1*w1);     
    if(analogRead(2)==1023)
    {setTime(hour(),minute()+1,second(),day(),month(),12);}   
    if(analogRead(3)==1023)
    {setTime(hour()+1,minute(),second(),day(),month(),12);}   
    if((analogRead(4)==1023)&&(analogRead(0)<=100))
    {digitalWrite(4, HIGH);}
    else{digitalWrite(4, LOW);}   
    delay(1000);
}
void printDigits()
{   if (hour() < 10)       
       {lcd.print("0");}         
    lcd.print(hour()/1);   
    lcd.print(":"); 
    if (minute() < 10)     
       {lcd.print("0");} 
    lcd.print(minute()/1);
    lcd.print(":"); 
    if (second() < 10)     
       {lcd.print("0");}     
    lcd.print(second()/1);
}
double Thermister(int RawADC)
     {double Temp;
      Temp = log(((10240000/RawADC) - 10000));
      Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
      Temp = Temp - 273.15;           
      return Temp;
     }
void printTemp(void)
{   double fTemp;
    double temp = Thermister(analogRead(1));     
    lcd.setCursor(6,1);           
    lcd.print(temp);               
}
   
   
   

   
Edit: "Mоже да опиташ например с :
if((hour()==22)&&(minute()>=30)&&(minute()<=49))
      {w1=w1-1;} "
По този начин намалявам периода за който става прехода при загасяне , а целта е да задам до каква стойност да е това димиране т.е. да не падат до нула ,а до някаква стойност .
I just finished cycling my tank and everything checks out fine
tmp 80F/nitrate 0/amonia 0/nitrite 0
took a month too.
Is it safe to add the salt now?

petko

b=0;                       
    w1=0;
Едното е за единия канал другото за другия.Задай други числа например 60.

П.С.
analogWrite(ch1,0.06*b+0.00004537038*b*b);
analogWrite(ch2,0.06*w1+0.00004537038*w1*w1);     

todor_kt

 if((hour()==22)&&(minute()>=30)&&(minute()<=59))
      {w1=w1-1;}
    if((hour()==22)&&(minute()>=0)&&(minute()<=29))
      {b=b-1;}

става    
    
if((hour()==22)&&(minute()>=30)&&(minute()<=59)){
   if(w1 > 30%){
      w1=w1-1;
   }
}
   
if((hour()==22)&&(minute()>=0)&&(minute()<=29)){
   if(b > 30%){
      b=b-1;
   }   
}

с 30% съм означил фигуративно, защото не ми се занимава да определя каква е реалната стойност, която отговаря на 30%.   
Aquael Shrimp Set 30:
Neocaridina Heteropoda var. Red Rili
https://aquariumbg.com/forum/proxy.php?request=http%3A%2F%2Fs8.postimg.org%2Fn2l7n7nf5%2F2q0owec.jpg&hash=0514b00eea16e20ef1c13ee69ef905e4d823e5c9

Чавд

Може да пробваш и с :

void setup()
{   setTime(11,59,50,22,2,12);   
    lcd.begin(2,16);           
    lcd.clear();               
    pinMode(2,OUTPUT);   // изход за звукова сигнализация
    pinMode(3,OUTPUT);   // изход за осветление кръг 1     
    pinMode(4,OUTPUT);   // изход за реле
    pinMode(5,OUTPUT);   // изход за осветление кръг 2
    b=0;                       
    w1=29*60*0.3;                       
    w2=0;                       
}

beonedge

Благодаря на всички за идеите :) . В момента изникнаха доста ангажименти и нямам време за проби , но като остане време ще пробвам и ще пиша в темата.
I just finished cycling my tank and everything checks out fine
tmp 80F/nitrate 0/amonia 0/nitrite 0
took a month too.
Is it safe to add the salt now?

Similar topics (5)

59232

Публикации: 19
Прегледи: 8191

49613

Публикации: 6
Прегледи: 3331

13395

Публикации: 13
Прегледи: 6354

59932

Публикации: 2
Прегледи: 1550

54143

Публикации: 0
Прегледи: 2316