Készítettem egy akvárium világítás vezérlést, ahol PWM-el szabályzom (IRF510-en keresztül) a LED szalagokat.
Fehéret, pirosat, kéket. A célom az volt, hogy ne egyszerűen csak be-, vagy kikapcsoljanak a fények, hanem megfelelően dimmelve szimulálja a beesteledést, és a pirkadatot.
Teljesen jól működik, de valamiért az egész zavaróan vibrál....
Tettem kondenzátorokat a kimenetekre, - és a bejövő tápra is, - valamelyest javult, de még mindig látni vélem a vibrálást....
Van rá valamilyen ötletetek? Találkoztatok ilyesmivel? Lehet, hogy a negyfrekvenciás terhelést nem szereti a táp?
Itt a kód is, a piros és kék szineken van egy 0.75-ös szorzó, mert nem kell a teljes fénye, valamint a kék éjszakára 50-es értéken marad.
void setup() { rtc.stopRTC(); //stop the RTC rtc.setTime(20,40,0); //set the time here rtc.setDate(2,1,2018); //set the date here rtc.startRTC(); //start the RTC }
void loop() { hr = rtc.getHours(); mins = rtc.getMinutes();
//Set White if (hr <= 6) PWM = 0; if (hr == 7) PWM = Value[59 - mins]; if (hr >= 8 && hr <= 20) PWM = 255; if (hr == 21) PWM = Value[mins]; if (hr >= 22) PWM = 0; analogWrite(WhitePin, PWM);
//Set Red if (hr <= 5) PWM = 0; if (hr == 6) PWM = Value[59 - mins] * 0.75; if (hr >= 7 && hr <= 21) PWM = 255 * 0.75; if (hr == 22)PWM = Value[mins] * 0.75; if (hr >= 23) PWM = 0; analogWrite(RedPin, PWM);
//Set Blue if (hr <= 5) PWM = 0; if (hr == 6) PWM = Value[59 - mins] * 0.75; if (hr >= 7 && hr <= 21) PWM = 255 * 0.75; if (hr == 22)PWM = Value[mins] * 0.75; if (hr >= 23) PWM = 0; if (PWM < 50) PWM = 50; analogWrite(BluePin, 50);
int Relay0 = 13; int Relay1 = 5; int Relay2 = 6; int Relay3 = 10;
DS3231 rtc(SDA, SCL); Time t;
const int OnHour0 = 17; const int OnMin0 = 30; const int OffHour0 = 17; const int OffMin0 = 31; const int OnHour1 = 12; const int OnMin1 = 26; const int OffHour1 = 12; const int OffMin1 = 27;
Üdv,össze raktam magamnak egy kódot, de nem kapcsol rendesen, segítsetek kijavítani, köszönöm.
#include <Wire.h> #include <RTClib.h> #include <Time.h> #include <TimeAlarms.h> RTC_DS1307 RTC; // Start Time Light 1 int sHour = 06; int sMinute = 40; int sSecond = 0;
// Start Time Light 2 int s2Hour = 07; int s2Minute = 00; int s2Second = 00;
// Start Time Light 3 int s3Hour = 07; int s3Minute = 20; int s3Second = 00;
// Start Time Light 4 int s4Hour = 07; int s4Minute = 40; int s4Second = 00;
// Start Time Light 5 int s5Hour = 07; int s5Minute = 00; int s5Second = 00;
// Start Time Light 6 int s6Hour = 07; int s6Minute = 20; int s6Second = 24;
// End Time Light 1 int eHour = 17; int eMinute = 40; int eSecond = 00;
// End Time Light 2 int e2Hour = 18; int e2Minute = 00; int e2Second = 00;
// End Time Light 3 int e3Hour = 18; int e3Minute = 20; int e3Second = 00;
// End Time Light 4 int e4Hour = 18; int e4Minute = 40; int e4Second = 00;
// End Time Light 5 int e5Hour = 19; int e5Minute = 00; int e5Second = 00;
// End Time Light 6 int e6Hour = 19; int e6Minute = 20; int e6Second = 00; int lightRelay1 = 9; int lightRelay2 = 2; int lightRelay3 = 3; int lightRelay4 = 4; int lightRelay5 = 5; int lightRelay6 = 6;
void setup() { // Set the relay to off immediately digitalWrite(lightRelay1, HIGH); digitalWrite(lightRelay2, HIGH); digitalWrite(lightRelay3, HIGH); digitalWrite(lightRelay4, HIGH); digitalWrite(lightRelay5, HIGH); digitalWrite(lightRelay6, HIGH); Serial.begin(9600); Wire.begin(); RTC.begin(); // Set the pinmode pinMode(lightRelay1, OUTPUT); pinMode(lightRelay2, OUTPUT); pinMode(lightRelay3, OUTPUT); pinMode(lightRelay4, OUTPUT); pinMode(lightRelay5, OUTPUT); pinMode(lightRelay6, OUTPUT); // Notify if the RTC isn't running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); } // Get time from RTC DateTime current = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); } // Use RTC time to set the start time1 setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year()); time_t s = now(); // Use RTC time to set the start time2 setTime(s2Hour, s2Minute, s2Second, current.day(), current.month(), current.year()); time_t s2 = now(); // Use RTC time to set the start time3 setTime(s3Hour, s3Minute, s3Second, current.day(), current.month(), current.year()); time_t s3 = now(); // Use RTC time to set the start time4 setTime(s4Hour, s4Minute, s4Second, current.day(), current.month(), current.year()); time_t s4 = now(); // Use RTC time to set the start time5 setTime(s5Hour, s5Minute, s5Second, current.day(), current.month(), current.year()); time_t s5 = now(); // Use RTC time to set the start time6 setTime(s6Hour, s6Minute, s6Second, current.day(), current.month(), current.year()); time_t s6 = now(); // Use RTC time to set the end time1 setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year()); time_t e = now(); // Use RTC time to set the end time2 setTime(e2Hour, e2Minute, e2Second, current.day(), current.month(), current.year()); time_t e2 = now(); // Use RTC time to set the end time3 setTime(e3Hour, e3Minute, e3Second, current.day(), current.month(), current.year()); time_t e3 = now(); // Use RTC time to set the end time4 setTime(e4Hour, e4Minute, e4Second, current.day(), current.month(), current.year()); time_t e4 = now(); // Use RTC time to set the end time5 setTime(e5Hour, e5Minute, e5Second, current.day(), current.month(), current.year()); time_t e5 = now(); // Use RTC time to set the end time6 setTime(e6Hour, e6Minute, e6Second, current.day(), current.month(), current.year()); time_t e6 = now(); // Use RTC time to set the current time setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year()); time_t n = now(); // Test if grow light should be on if (s <= n && n <= e) { digitalWrite(lightRelay1, LOW); // Sets the grow light "on" } if (s2 <= n && n <= e2) { digitalWrite(lightRelay2, LOW); // Sets the grow light "on" } if (s3 <= n && n <= e3) { digitalWrite(lightRelay3, LOW); // Sets the grow light "on" } if (s4 <= n && n <= e4) { digitalWrite(lightRelay4, LOW); // Sets the grow light "on" } if (s5 <= n && n <= e5) { digitalWrite(lightRelay5, LOW); // Sets the grow light "on" } if (s6 <= n && n <= e6) { digitalWrite(lightRelay6, LOW); // Sets the grow light "on" } Alarm.alarmRepeat(sHour, sMinute, sSecond, Light1On); Alarm.alarmRepeat(eHour, eMinute, eSecond, Light1Off); Alarm.alarmRepeat(s2Hour, s2Minute, s2Second, Light2On); Alarm.alarmRepeat(e2Hour, e2Minute, e2Second, Light2Off); Alarm.alarmRepeat(s3Hour, s3Minute, s3Second, Light3On); Alarm.alarmRepeat(e3Hour, e3Minute, e3Second, Light3Off); Alarm.alarmRepeat(s4Hour, s4Minute, s4Second, Light4On); Alarm.alarmRepeat(e4Hour, e4Minute, e4Second, Light4Off); Alarm.alarmRepeat(s5Hour, s5Minute, s5Second, Light5On); Alarm.alarmRepeat(e5Hour, e5Minute, e5Second, Light5Off); Alarm.alarmRepeat(s6Hour, s6Minute, s6Second, Light6On); Alarm.alarmRepeat(e6Hour, e6Minute, e6Second, Light6Off); } void loop() { DateTime now = RTC.now(); setTime(now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); Serial.print("Current time: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.println(); Alarm.delay(600000); } void Light1On() { Serial.println("Turning Light 1 On"); digitalWrite(lightRelay1, LOW); } void Light1Off() { Serial.println("Turning Light 1 Off"); digitalWrite(lightRelay1, HIGH); } void Light2On() { Serial.println("Turning Light 2 On"); digitalWrite(lightRelay2, LOW); } void Light2Off() { Serial.println("Turning Light 2 Off"); digitalWrite(lightRelay2, HIGH); } void Light3On() { Serial.println("Turning Light 3 On"); digitalWrite(lightRelay3, LOW); } void Light3Off() { Serial.println("Turning Light 3 Off"); digitalWrite(lightRelay3, HIGH); } void Light4On() { Serial.println("Turning Light 4 On"); digitalWrite(lightRelay4, LOW); } void Light4Off() { Serial.println("Turning Light 4 Off"); digitalWrite(lightRelay4, HIGH); } void Light5On() { Serial.println("Turning Light 5 On"); digitalWrite(lightRelay5, LOW); } void Light5Off() { Serial.println("Turning Light 5 Off"); digitalWrite(lightRelay5, HIGH); } void Light6On() { Serial.println("Turning Light 6 On"); digitalWrite(lightRelay6, LOW); } void Light6Off() { Serial.println("Turning Light 6 Off"); digitalWrite(lightRelay6, HIGH); }
int Relay0 = 4; int Relay1 = 5; int Relay2 = 6; int Relay3 = 13;
DS3231 rtc(SDA, SCL); Time t;
const int OnHour0 = 12; const int OnMin0 = 24; const int OffHour0 = 12; const int OffMin0 = 25; const int OnHour1 = 12; const int OnMin1 = 26; const int OffHour1 = 12; const int OffMin1 = 27;
// relay8_Demo // Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved // web: http://www.RinkyDinkElectronics.com/ // // A quick demo of most of the library functions. //
// Include our library :) #include <relay8.h>
// Declare what pins our relays are connected to. // relay8 supports from 1 to 8 relays. relay8 relay(2, 3, 4, 5, 6, 7, 8, 9);
void setup() { // Nothing special is needed here }
void loop() { // Switch the first relay on and off a couple of times for (int t=0; t<3; t++) { relay.on(1); delay(500); relay.off(1); delay(500); }
// Switch the last relay on and off a couple of times for (int t=0; t<3; t++) { relay.on(relay.numberOfRelays()); delay(500); relay.off(relay.numberOfRelays()); delay(500); }
// Switch all relays on and off a couple of times for (int t=0; t<3; t++) { relay.allOn(); delay(500); relay.allOff(); delay(500); }
// Cycle through all relays slowly from the first to the last // then a little faster back down again for (int t=0; t<3; t++) { relay.cycleUp(); relay.cycleDown(100); }
// Switch on all relays in sequence then switch then all off // again a little faster for (int t=0; t<3; t++) { relay.chaseUpOn(500); relay.chaseUpOff(); }
// Switch on all relays in sequence then switch then all off // again a little faster. This time in the opposite direction for (int t=0; t<3; t++) { relay.chaseDownOn(); relay.chaseDownOff(100); } }
Üdv, köszönöm a segítséget, de úgy szeretném megoldani hogy mind a 6db relé külön adott időben be és ki kapcsolni ahogy a példa programban is van 1db relével.
Esetleg tudsz abban még segíteni hogy ez hogy nézne ki kész program formájában?
Üdv, valaki tudna segíteni nekem? Ezt a programot szeretném használni de úgy hogy 6 db relét tudjak egyesével időre kapcsolni, lényegében 6 relére kéne kibővíteni. Eggyel működik gond nélkül.
// Date and time functions using a DS3231 RTC connected via I2C and Wire Lib
// Start Time int sHour = 11; int sMinute =30; int sSecond = 0;
// End Time int eHour = 11; int eMinute = 30; int eSecond = 4;
int lightRelay = 2;
void setup() { // Set the relay to off immediately digitalWrite(lightRelay, HIGH);
Serial.begin(9600); Wire.begin(); RTC.begin();
// Set the pinmode pinMode(lightRelay, OUTPUT);
// Notify if the RTC isn't running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); }
// Get time from RTC DateTime current = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); }
// Use RTC time to set the start time setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year()); time_t s = now();
// Use RTC time to set the end time setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year()); time_t e = now();
// Use RTC time to set the current time setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year()); time_t n = now();
// Test if grow light should be on if (s <= n && n <= e) { digitalWrite(lightRelay, LOW); // Sets the grow light "on" }
Warning comparisons like 'X<=Y<=Z' do not have their mathematical meaning
Tehát ez neked hülyeség, hiába helyes C programkód.
Ezt jelenti: Először kiértékeli ezt: 1 < kaka, ennek az eredménye egy bool lesz (true vagy false). Utána pedig megvizsgálja, hogy a kapott bool kisebb-e, mint 2, ami definíció szerint mindig true.
Helyette ez az alak használatos:
else if (1 < kaka && kaka < 2) {
De szép változóneved van...
> Mivel a switch-case-t egyáltalán nem tudtam működésre bírni (ahogy olvastam nem igazán működik az arduinon)
első project, egy plotterről leolvasott értéket duplázva (0-10) szeretném megoldani, h az 5 ledem közül felvillanjon az értéknek megfelelő számú (0-2-ig 1, 2-4-ig 2 stb..), és az érték(kerekítvenyilván) megjelenjen egy 7szegmensű kijelzőn. Ennek ugye egyszerű az emélete, mégsem jön össze. Külön külön minden tökéletesen működik, de nem tudom összehozni az egészet egyszerre. Nem a hivatalos arduino-m van, hanem vmi copy (ebayen az első ha rákeresel h arduino uno).
Mivel a switch-case-t egyáltalán nem tudtam működésre bírni (ahogy olvastam nem igazán működik az arduinon), elkezdtem az if-eket. 0 és 1 tökéletesen működik, prímán meg is jelenik a kis kijelzőn, ég a megfelelő LED, alles gut, but onnantól az istenért se menne tovább. A kód külön működik, de valamiért nem akar a program belépni oda ahová kellene...
int pinA = 6; int pinB = 5; int pinC = 2; int pinD = 3; int pinE = 4; int pinF = 7; int pinG = 8;
Ha az "else if (2<kaka<3)"-at átírom sima "if (2<kaka<3)"-ra akkor abba lép be, megjelenik a 2-es a kijelnzőn és ég a 2 led az értéktől függetlenül. A képen látjátok h jól működik a plotter, ha a fent leírt kód fut akkor 0 és 1 között tud váltani, aztán nemtom, elfogy a tudomány ha tovább kéne állni. A programozás terén IS kezdő vagyok de azért szerintem itt nem ejtettem olyan nagy hibát.
Mit csinálok rosszul ? Előre is köszi (L)
ui.: kusza a kapcsolás, de külön letesztelve minden működik...
WARNING: Category '' in library EEPROM is not valid. Setting to 'Uncategorized' WARNING: Category '' in library SPI is not valid. Setting to 'Uncategorized' WARNING: Category '' in library SoftwareSerial is not valid. Setting to 'Uncategorized' WARNING: Category '' in library Wire is not valid. Setting to 'Uncategorized' Warning: platform.txt from core 'Arduino AVR Boards' contains deprecated recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/{archive_file}" "{object_file}", automatically converted to recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}". Consider upgrading this core. signal: bad system call (core dumped) Error compiling for board Arduino Uno.
This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
Kérem valaki világosítson fel mit csinálok rosszul?