Ožujak 29, 2024, 13:56:28 poslijepodneNajnoviji Član: [email protected]

Autor Tema: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica  (Posjeta: 7137 vremena)

0 Članova i 1 Gost pregledava ovu temu.

Offline viktori

  • Trade Count: (+4)
  • Punopravni član
  • ****
  • Postova: 744
  • Spol: Muški   Lokacija: Zagreb
Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« u: Siječanj 31, 2014, 20:26:24 poslijepodne »
Pozdrav i sretno! ;)

Viktor


/*
 *
 * Simplest Possible Arduino based Aquarium LED Controller
 *
 * simplest_aquarium_led_controller.ino
 *
 * Copyright (c) 2014, Viktor Ilijašić. All rights reserved.
 *
 * This code is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This code is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * If you did not receive a copy of the GNU Lesser General Public
 * License with this code, you can get it by writing to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA
 *
 * You can also get the GNU LGPL at this link:
 * http://www.gnu.org/licenses/lgpl-2.1.html
 *
 *
 * DISCLAIMER:
 * Author is not responsible and cannot be held responsible for *any* damage whatsoever,
 * directly or indirectly related to this code.
 *
 * Note:
 * This code is far from good arduino code. It's actually a bad way to use your
 * arduino cycles. It is also a quick and simplest solution that gets the job done.
 * Job in this case would be simulating dawn and dusk with arduino PWM.
 *
 */

#define pinToLedDriver 9
#define statusLed 13

void setup() {
  pinMode(statusLed,OUTPUT);
}

void loop(){
 
  // in total these should be 86400, number of seconds in a 24h day
  int rampUpSeconds=7200;             // 7200s  / 60 = 120 min / 60 = 2h
  int fullBrightnessSeconds=25200;    // 25200s / 60 = 420 min / 60 = 7h
  int rampDownSeconds=7200;           // 7200s  / 60 = 120 min / 60 = 2h
  int completeDarknessSeconds=46800;  // 46800s / 60 = 780 min / 60 = 13h
                                      // 2h + 7h + 2h + 13h = 24h
 
  int minPWM=0, maxPWM=255;
  int minInput=0, maxInput=0;
 
 
  maxInput=rampUpSeconds;
  for (int i=1; i<=maxInput; i++) { // slowly increase intensity
    int toWhat = map(i, minInput, maxInput+1, minPWM, maxPWM+1);
    changePWM(toWhat);
    blinkInternalLed(1);
  }
 
  for (int i=1; i<=fullBrightnessSeconds; i++) { // keep power leds on, blink internal led
    blinkInternalLed(0);
  }
 
  maxInput=rampDownSeconds;
  for (int i=maxInput; i>=1; i--) { // slowly decrease intensity
    int pwmValue = map(i, minInput, maxInput+1, minPWM, maxPWM+1);
    changePWM(pwmValue);
    blinkInternalLed(-1);
  }
 
  for (int i=1; i<=completeDarknessSeconds; i++) { //keep power leds off, blink internal led
    blinkInternalLed(0);
  }
 
}

void changePWM(int pwmValue) {
  analogWrite(pinToLedDriver,pwmValue);
}

void blinkInternalLed(int how) {
  switch (how) {
    case 0: // blink like : character on a digital clock
      // in total delays from this point to next break must be 1000
      digitalWrite(statusLed,LOW);
      delay(500);
      digitalWrite(statusLed,HIGH);
      delay(500);
      break;
    case 1:  // small delay, short blink, long blink, to represent ramping up
      // in total delays from this point to next break must be 1000
      digitalWrite(statusLed,LOW);
      delay(250);
      digitalWrite(statusLed,HIGH);
      delay(200);
      digitalWrite(statusLed,LOW);
      delay(50);
      digitalWrite(statusLed,HIGH);
      delay(500);
      digitalWrite(statusLed,LOW);
      break;
    case -1:  // small delay, long blink, short blink, to represent ramping down
      // in total delays from this point to next break must be 1000
      digitalWrite(statusLed,LOW);
      delay(250);
      digitalWrite(statusLed,HIGH);
      delay(500);
      digitalWrite(statusLed,LOW);
      delay(50);
      digitalWrite(statusLed,HIGH);
      delay(200);
      digitalWrite(statusLed,LOW);
      break;
  }
}

« Zadnja izmjena: Veljača 01, 2014, 11:36:17 prijepodne od ZliBrka »

Offline VlatkoZ

  • Trade Count: (0)
  • Punopravni član
  • ***
  • Postova: 406
  • Spol: Muški   Dob: 52
  • Lokacija: Zagreb - Špansko
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #1 u: Siječanj 31, 2014, 21:11:14 poslijepodne »
Super, ovo bi možda trebalo zakačiti na vrh pa da možemo dodavati kodove i opis hardware-a (sklopovlja :D).

Ja sam još uvijek u fazi istraživanja i proučavanja pa mi ovakvi primjeri posluže za "učenje" :)

Nikad nije kasno krenuti u Arduino svijet :) :)

Offline viktori

  • Trade Count: (+4)
  • Punopravni član
  • ****
  • Postova: 744
  • Spol: Muški   Lokacija: Zagreb
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #2 u: Veljača 01, 2014, 11:50:23 prijepodne »
Da malo pojasnim o kakvom programu se radi...

Ovaj program polako pali ledice, drzi ih upaljene na neko vrijeme pa ih polako ugasi.

Intervali su definirani tu:

  // in total these should be 86400, number of seconds in a 24h day
  int rampUpSeconds=7200;             // 7200s  / 60 = 120 min / 60 = 2h
  int fullBrightnessSeconds=25200;    // 25200s / 60 = 420 min / 60 = 7h
  int rampDownSeconds=7200;           // 7200s  / 60 = 120 min / 60 = 2h
  int completeDarknessSeconds=46800;  // 46800s / 60 = 780 min / 60 = 13h
                                      // 2h + 7h + 2h + 13h = 24h


Tko god ima arduino i moze ga isprogramirati, moze ovaj program ucitati, i arduino pin 9 mu postaje izlaz iz arduina koji treba spojiti na PWM ulaz drivera. Pin je definiran tu:

#define pinToLedDriver 9


Sad, tu nastaje potencijalni problem. Ground, zemlja, nula na arduinu bi trebala biti spojena na zemlju PWM ulaza u driver. Potencijalni problem bi mogao biti to da se to driveru (ovisno o driveru) nece svidjeti, i moze se desiti svasta, od toga da samo ne radi, preko toga da ce raditi neko vrijeme i onda ce nesto krepati, pa do toga da ce se isti cas nesto zapaliti ili eksplodirati.

Prije spajanja, trebalo bi prouciti sklopovlje drivera, tj. uvjeriti se da driver prima PWM input od 3.3-5V i ground. Ne bi bilo lose niti napajati arduino i driver sa istog napajanja, uz stavljanje stabilizatora od 5V izmedju napajanja i arduina.


Ogranicavanje odgovornosti:
Sve sto radite je u potpunosti na vasu odgovornost. Ja nisam odgovoran za apsolutno nikakvu stetu direktno ili indirektno vezanu za ove informacije, kod, sklopovlje, fizicke objekte, struju, zrak, vodu, zemlju niti vatru koji se nalaze u krugu od 100km od trenutka citanja ove niti poruka (thread), do 120 godina nakon trenutka citanja.


Ako se ne razumijete u elektroniku i struju, umjesto da radite sami, radije zovite nekoga tko se razumije u ta podrucja da ovo odradi za vas.

Pozdrav,
Viktor

Offline zox0007

  • Trade Count: (+2)
  • Punopravni član
  • ***
  • Postova: 155
  • Spol: Muški   Dob: 37
  • Lokacija: Opatija-Volosko
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #3 u: Veljača 01, 2014, 11:55:49 prijepodne »
Čekaj, meni jedna stvar nije jasna, ti još misliš živjet 120 godina??? -? :o
-Borba za mir je isto što i jebanje za nevinost!!!
-Ako želite saznati kako je biti biker,sjednite na motor i nemojte stajat sve dok ne saznate odgovor...
-Tanka kožna jakna dobro izgleda medju zenama,ali vas ne spasava od trenja pri padu sa motora...

Offline viktori

  • Trade Count: (+4)
  • Punopravni član
  • ****
  • Postova: 744
  • Spol: Muški   Lokacija: Zagreb
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #4 u: Veljača 01, 2014, 12:06:10 poslijepodne »
Čekaj, meni jedna stvar nije jasna, ti još misliš živjet 120 godina??? -? :o

Ne planiram, ali ... safety first, treba pokriti sve baze, bolje puhati na hladno nego se opeci, a treba misliti i na djecu koja mozda nadrljaju zbog mene. :)


Imam jos jedan zgodan dodatak objasnjenju koji radi izvrsno u praksi..

Ako tempirate paljenje rasvjete preko postojeceg tajmera, onda spajate napajanje drivera i arduina preko timera, a kraj postepenog gasenja preko arduina sa gasenjem timera. Posljedica toga je da ce tajmer upaliti napajanje, arduino ce postepeno upaliti svjetlo (ona 2 sata iz koda), drzati ga upaljenim (7 sati iz koda), postepeno ugasiti svjetlo (2 sata iz koda), i u tom trenutku ce vam timer ugasiti napajanje arduina i drivera.

Drugim rijecima, vanjski timer kontrolira kad se napajanje pali i gasi, a arduino samo kontrolira da se svjetlost polako upali i polako ugasi.

Naravno, ima ovo i svojih mana i prednosti.

Mana: sa ovim programom se ne moze upaliti svjetlost do maksimuma po zelji, ali mozda se moze ako fizicki iskopcate PWM signal.
Prednost: prisiljava vas da prckate po akvariju dok je u akvariju "dan" i da ne remetite ciklus flori i fauni. :)

Offline zox0007

  • Trade Count: (+2)
  • Punopravni član
  • ***
  • Postova: 155
  • Spol: Muški   Dob: 37
  • Lokacija: Opatija-Volosko
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #5 u: Veljača 01, 2014, 12:10:38 poslijepodne »
Ako je ovo bilo upućeno meni, ja sam samo pročitao, odnosno skuzio: bla bla bla, bla, bla, bla, flori i fauni... :D :D :D
-Borba za mir je isto što i jebanje za nevinost!!!
-Ako želite saznati kako je biti biker,sjednite na motor i nemojte stajat sve dok ne saznate odgovor...
-Tanka kožna jakna dobro izgleda medju zenama,ali vas ne spasava od trenja pri padu sa motora...

Offline Otto

  • Trade Count: (0)
  • Punopravni član
  • ***
  • Postova: 141
  • Spol: Muški   Dob: 46
  • Lokacija: Sisak
  • Homo Delphinus is not just a concept!
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #6 u: Veljača 01, 2014, 19:34:46 poslijepodne »
Ne vidim baš razlog da se koristi timer i arduino zajedno, kad se za malo novaca može nabavit "real time clock" za arduino.

Offline VlatkoZ

  • Trade Count: (0)
  • Punopravni član
  • ***
  • Postova: 406
  • Spol: Muški   Dob: 52
  • Lokacija: Zagreb - Špansko
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #7 u: Veljača 01, 2014, 20:18:33 poslijepodne »
Ajmo za početak definirati što treba od hardwarea kupiti.
Ja sam gledao kineze, prvenstveno zbog cijene.
Evo jedan jeftin komplet:
http://www.ebay.com/itm/290903516320

Mene zanima što treba nadokupiti za pokretanje i PWM kontrolu ledica, koji driver i što još s njime te kako se to spaja sa vanjskim napajanjem, npr. sa PC napajanjem (pozdrav Stašilu :D)

Led displej će doći kasnije na red kao i još neki drugi dodaci.

Offline VlatkoZ

  • Trade Count: (0)
  • Punopravni član
  • ***
  • Postova: 406
  • Spol: Muški   Dob: 52
  • Lokacija: Zagreb - Špansko
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #8 u: Veljača 01, 2014, 21:58:16 poslijepodne »
Ako netko treba Arduino literaturu za otkrivanje novih horizonta evo linka sa 30-tak pdf-ova (samo da nisam prekršio neko pravilo foruma sa ovim linkom :kap:).

http://it-ebooks.info/tag/arduino/

Offline viktori

  • Trade Count: (+4)
  • Punopravni član
  • ****
  • Postova: 744
  • Spol: Muški   Lokacija: Zagreb
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #9 u: Veljača 02, 2014, 02:14:10 prijepodne »
Evo i par fotki kontrolera sa malom varijacijom ovog istog koda.

Moj timer se pali u 12:00.

12:17


12:32


12:50


14:59



Naravno da nema potrebe za vanjskim timerom, ali ovo gore je kod za najjednostavniju mogucu verziju, a vjerojatno 99,5% svih akvarista vec ima vanjski timer koji vec koriste za rasvjetu. RTC clock za arduino kosta stvarno sitnu lovu, ali programiranje u tom slucaju vise nije toliko jednostavno.

Ja sam slagao svoj driver i koristio ga sa PC (ATX) napajanjem, stvarno nemam iskustva sa driverima koji se mogu kupiti s e-baya, pa na zalost ne mogu komentirati koji bi bio dobar. Znam samo da izlaz iz arduina ima 5V, i driver bi trebao primiti dvopolni PWM ulaz sa zemljom i 5V.

Takodjer, kod mene je sve to spojeno na 12V ATX napajanje, koje je samo po sebi izvrsno napajanje (pozdrav strasilu! ;) ), ali naravno kod mene je izmedju napajanja i ledica driver koji ce obuzdati napajanje na *tocno* ono sto ja zelim, i isporuciti *tocno to* ledicama.


Ovo je shematski prikaz spajanja svega ovoga opisanog od 220V struje do ledica, sa vanjskim timerom.



12V->5V stabilizator nije nikakva magija, to je jedan tranzistor LM7805 i dva kondenzatora (takorec bilo sto izmedju 10uF i 100uF), od kojih je jedan na ulazu a drugi na izlazu tranzistora.
Evo jedan prikaz stabilizatora.

Offline vjeko0801

  • Trade Count: (+1)
  • Punopravni član
  • **
  • Postova: 90
  • Spol: Muški   Dob: 41
  • Lokacija: Požega
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #10 u: Veljača 02, 2014, 12:27:47 poslijepodne »
super projekt, odlična realizacija  :klap:, jel možeš opisati driver i staviti shemu kako si napravio

Offline Kwan

  • Trade Count: (+1)
  • Punopravni član
  • ***
  • Postova: 462
  • Spol: Muški   Dob: 37
  • Lokacija: Ravnice
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #11 u: Veljača 02, 2014, 12:41:59 poslijepodne »
da i mene bi zanimalo kakav si driver složio.
Ja sam radio sa fetovima, no problem je da kod ovog pwm-a tek nakon određenog koraka fet otvori i ledice zasvijetle određenim intenzitetom.
isto tako premala je rezolucija ovog atmela da bi se dobio lijepi fade in i fade out, tako da je prvih par koraka očito


Offline vjeko0801

  • Trade Count: (+1)
  • Punopravni član
  • **
  • Postova: 90
  • Spol: Muški   Dob: 41
  • Lokacija: Požega
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #12 u: Veljača 02, 2014, 13:24:03 poslijepodne »
Ja sam slžio sa dimmerima (kineski) ne znam koliko su pouzdani, kad ih otvorim na 50% ferit u napajanju počme
dosta pištati, neugodan zvuk za dnevni boravak.
Problem sam riješio tako da sam smanjio napon na izlazu, tako da ledice ne moram puno dimmati.
Vidim da je Viktor viša klasa od nas, pa bi volio znati kakav je slozio driver.

Offline viktori

  • Trade Count: (+4)
  • Punopravni član
  • ****
  • Postova: 744
  • Spol: Muški   Lokacija: Zagreb
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #13 u: Veljača 03, 2014, 01:04:33 prijepodne »
Evo, objavio sam novu temu sa DIY driverima: https://www.akvarij.net/forum/index.php?topic=93003.0

Tamo je opisano sto koristim, da ne idem u offtopic u ovoj temi.

Offline H3m3roid

  • Trade Count: (0)
  • Punopravni član
  • ***
  • Postova: 247
  • Spol: Muški   Dob: 42
  • Lokacija: Zagreb
Odg: Najjednostavniji moguci Arduino kod za kontrolu zore i sumraka LEDica
« Odgovori #14 u: Svibanj 20, 2014, 15:40:14 poslijepodne »
 :up: pratim