Tester svetelnych zdrojov Arduino potrebovala by som poradit

Nefunguje mi to, chcem radu ako na to...
lucinda
Príspevky: 2
Dátum registrácie: Piatok, 4. Mája 2018, 12:45

Tester svetelnych zdrojov Arduino potrebovala by som poradit

Príspevok od užívateľa lucinda » Piatok, 4. Mája 2018, 12:46

Robím projekt kde mam zhotoviť tester svetelných zdrojov (nizkovýkonových).Tester by mal byť schopný merať intenzitu osvetlenia, teplotu okolitého prostredia, počet zopnutí a vypnutí, celkový čas testovania a na základe týchto meraní sa následne vyhodnotí životnosť svetelného zdroja. Mam tam tri mikrospínače na ktoré potrebujem naprogramovať , každý na iný časový interval zapínania a vypínania relé.Mam na vás tri otázky:
1.Ako naprogramovať Ardito UNO tak aby mi čakalo až na stlačenie tlačidla? a od stalcenia tlacidla aby sa mi spustili stopky (staci počet hodín)?
2.Potrebovala by som programovo ošetriť, že keď dosiahne počas testovania istú hodnotu v luxoch zastaví sa meranie a bude svietiť displej s koncovými nameranými hodnotami (čas,teplota,počet zopnutí a vypnutí)?
3.Taktiež by som chcela aby boli nadmerné hodnoty zobrazené na displeji aj na seriálovom porte?


[ moj zdrojovy kod ktory funguje:
#include <BH1750.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


long day = 86400000; // 86400000 milliseconds in a day
long hour = 3600000; // 3600000 milliseconds in an hour
long minute = 60000; // 60000 milliseconds in a minute
long second = 1000; // 1000 milliseconds in a second



BH1750 lightMeter;
long count = 0;
int rele = 8;
unsigned long time;
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 7

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // Set the LCD I2C address

void setup()
{
sensors.begin();
lcd.begin (20,4); // pre 20 x 4 LCD modul
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);

lcd.home ();
lcd.print("Vyber typ testu ");
delay(300);
lcd.clear();
pinMode(rele, OUTPUT);// connected to S terminal of Relay
}

void loop()
{
sensors.requestTemperatures(); // Send the command to get temperatures
float x=sensors.getTempCByIndex(0);
lcd.setCursor(0,0);
lcd.print("T=");
lcd.setCursor(9,0);
lcd.print((char)223);
lcd.setCursor(10,0);
lcd.print("C");
lcd.setCursor(3,0);
lcd.print(x);


lightMeter.begin();
uint16_t lux = lightMeter.readLightLevel();
lcd.setCursor(0,1);
lcd.print("Int=" + (String)lux + " lux ");

digitalWrite(rele,HIGH);// turn relay ON
delay(5000);// keep it ON for 5 seconds

digitalWrite(rele, LOW);// turn relay OFF
delay(5000);// keep it OFF for 5 seconds

count ++;
lcd.setCursor(0,2);
lcd.print("ZV=");
lcd.setCursor(4,2);
lcd.print(count, DEC);
lcd.setCursor(0,3);
lcd.print("Cas: ");

;//prints time since program started
long timeNow = millis();
int days = timeNow / day ; //number of days
int hours = (timeNow % day) / hour; //the remainder from days division (in milliseconds) divided by hours, this gives the full hours
int minutes = ((timeNow % day) % hour) / minute ; //and so on...
int seconds = (((timeNow % day) % hour) % minute) / second;
lcd.setCursor(5,3);
lcd.print(hours);
}


]
Prílohy
schema.png
schema.png (105.61 KiB) 865 zobrazení

Užívateľov profilový obrázok
arduinoposlovensky
Príspevky: 52
Dátum registrácie: Streda, 22. Novembra 2017, 15:01
Kontaktovať užívateľa:

Re: Tester svetelnych zdrojov Arduino potrebovala by som poradit

Príspevok od užívateľa arduinoposlovensky » Sobota, 5. Mája 2018, 11:09

- z loop() by som riadok lightMeter.begin(); presunul do setup(). Je to inicializácia senzoru BH1750 a to stačí vykonať len raz v setup() a nie opakovane v loop(). Jeho hodnota sa načítava ďalším riadkom uint16_t lux = lightMeter.readLightLevel();

- v loop() treba naprogramovať tak, aby tam nebolo žiadne delay();. Tu sa treba naučiť používanie millis() - napr. inšpirácia ako na to je Blikanie LED bez Delay()

- stopky by som riešil tiež cez millis() podľa toho príkladu, len miesto bliknutia LED sa vykoná to čo treba napr. zap/vyp relátka alebo sa nastaví hodnota nejakej inej premennej alebo sa niečo zobrazí na LCD.

- u tlačítok treba myslieť i na zákmity pri stlačení. Písal som to v článku Ako na ošetrenie spínacích kontaktov – debouncing. Veľmi užitočná je na tlačítka v článku spomínaná knižnica Bounce2.h.

- na vypisovanie hodnôt na sériový port stačí nasledovné: do setup() zadať riadok Serial.begin(9600); a potom v loop() kde je to potrebné (napr. tam kde sa to vypisuje na LCD) zadať Serial.print("T="); . Používa sa to podobne ako lcd.print("T=");.
Arduino za pár drobných na: AliExpress.com, Bangood.com

lucinda
Príspevky: 2
Dátum registrácie: Piatok, 4. Mája 2018, 12:45

Re: Tester svetelnych zdrojov Arduino potrebovala by som poradit

Príspevok od užívateľa lucinda » Nedeľa, 6. Mája 2018, 14:15

Ďakujem ti veľmi pekne, idem vyskúšať :)

Užívateľov profilový obrázok
arduinoposlovensky
Príspevky: 52
Dátum registrácie: Streda, 22. Novembra 2017, 15:01
Kontaktovať užívateľa:

Re: Tester svetelnych zdrojov Arduino potrebovala by som poradit

Príspevok od užívateľa arduinoposlovensky » Pondelok, 7. Mája 2018, 09:51

Vyskúšaj a prípadne sa potom tu podeľ o skúsenosti.
Mne pri tvorbe meteostanici pomohla a zjednodušila program knižnica tasker.h od autora Petra Stehlíka z Čiech, ktorú prezentoval na svojom blogu. Tiež by to mohla byť inšpirácia k programovaniu úloh (bez dealy).
Arduino za pár drobných na: AliExpress.com, Bangood.com

Napísať odpoveď