1xpwm arduino 48W

Tym razem belka o wymiarach 80x16cm o mocy 48W.  Sterowana jest ona za pomocą arduino nano oraz driverem z wejściem pwm.

Zasilana jest za pomocą zasilacza 12V 5A.  Driver ustawiony jest na 4375mA (krzyżyk na schemacie poniżej oznacza rozlutowaną ścieżkę i obniżona natężenie na wyjściu drivera o 625mA).

Diody na belce podzielone zostały na 16 szeregów po 3 diody.

Do projektu użyte zostały diody na chipie 45mil. Temperatury barwowe zostały opisane poniżej

  • 4- 4500k
  • 6 – 6500k
  • 8 – 8500k
  • F – full spectrum

Poniższy schemat oraz skrypt są kompletne. W połączeniu z innymi z działu z programami można uzyskać w pełni funkcjonalny komputer akwariowy. Do prawidłowego działania programu potrzebne są biblioteki oraz program do obsługi zegara. Wszystkie te rzeczy można pobrać tutaj.

 

_16x80cm_48W_1pwm_schemat

Skrypt do pobrania

#include <DS1307.h>    //użyte biblioteki
#include <Wire.h>    //użyte biblioteki
#define DS1307_ADDRESS 0x68    //zegar
byte zero = 0x00;    //zegar

//***********************opis wyjść*************************

int LED1 = 11;    //diody 1
int GODZ;    //Godzina
int MIN;    //Minuta
int SEC;    //Sekundy
int dzienG = 10;    //początek dnia - godziny
int dzienM = 00;    //początek dnia - minuty
int nocG = 21;    //początek nocy - godziny
int nocM = 00;    //początek nocy - minuty
int maxD1 = 60;    //maksymalna moc kanału LED1
int ZMIANA = 60;    //długość trwania rozjaśniania
int STEP = 1;    //długość trwania jednego kroku

void setup()
  {
    Wire.begin();
    pinMode(LED1, OUTPUT);    //diody
    Serial.begin(9600);    //serial port
  }

void loop()
  {
    int CZAS = (GODZ*60+MIN);    //aktualna godzina
    int czas1 = (dzienG*60+dzienM);    //początek dnia
    int czas2 = (nocG*60+nocM);    //początek nocy

    GODZ = (RTC.get(DS1307_HR,true));    //godzina pobierana z RTC
    MIN = (RTC.get(DS1307_MIN,true));    //minuta pobierana z RTC
    SEC = (RTC.get(DS1307_SEC,true));    //sekundy pobierana z RTC

    static int D1;    //stopień rozjaśniania LED1

    int mocD1[61] =    //stopień rozjaśniania LED1
      {
        255,230,220,210,200,195,190,185,180,175,
        170,165,160,155,150,145,140,135,130,125,
        120,115,110,105,100,95,90,85,80,75,
        70,65,60,55,50,45,40,35,30,25,
        20,19,18,17,16,15,14,13,12,11,
        10,9,8,7,6,5,4,3,2,1,0
      };

    if (CZAS<czas1)    //noc
      {
        D1=0; //digitalWrite(LED1, LOW);
        Serial.print("noc ");
      }
    if ((czas1<=CZAS)&&(CZAS<(czas1+ZMIANA)))    //poranek
      {
        D1=((CZAS-czas1)/STEP);
        Serial.print("swit ");
      }
        if (((czas1+ZMIANA)<=CZAS)&&(CZAS<(czas2-ZMIANA)))    //dzień
      {
        D1=maxD1;
        Serial.print("dzien ");
      }
    if(((czas2-ZMIANA)<=CZAS)&&(CZAS<czas2))    //zmrok
      {
        D1=((czas2-CZAS)/STEP);
        Serial.print("zmrok ");
      }
    if(czas2<=CZAS)    //noc
      {
        D1=0; //digitalWrite(LED1, LOW);
        Serial.print("noc ");
      }

   analogWrite(LED1, mocD1[D1]);

/*************************** serial monitor **************/
    Serial.print("LED:");
    Serial.print((D1*100)/maxD1);
    Serial.print(" ");
    Serial.print(GODZ);
    Serial.print(":");
    Serial.print(MIN);
    Serial.print(":");
    Serial.print(SEC);
    Serial.println(" MN-Tech.pl _1pwm ");
    delay (1000);
  }