Konverze výstupu jednotek
Úvodní stránka › Fórum › Hardware › Senzory › Konverze výstupu jednotek
Označeno štítky: přepočet jednotek
- Toto téma obsahuje celkem 7 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel
cingelroman a poslední změna proběhla před 9 roky a 3 měsíci.
-
AutorPříspěvky
-
4.11.2015 v 11:43 #5041
azmaluk
Účastníkzdravím,
potřeboval bych poradit / nakopnout správným směrem, jak převést výstupnou veličinu z mW/cm^2 na W//m^2.
int UVOUT = A0; //Output from the sensor int REF_3V3 = A1; //3.3V power on the Arduino board void setup() { Serial.begin(9600); pinMode(UVOUT, INPUT); pinMode(REF_3V3, INPUT); Serial.println("ML8511 example"); } void loop() { int uvLevel = averageAnalogRead(UVOUT); int refLevel = averageAnalogRead(REF_3V3); //Use the 3.3V power pin as a reference to get a very accurate output value from sensor float outputVoltage = 3.32 / refLevel * uvLevel; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); //Convert the voltage to a UV intensity level Serial.print("output: "); Serial.print(refLevel); Serial.print("ML8511 output: "); Serial.print(uvLevel); Serial.print(" / ML8511 voltage: "); Serial.print(outputVoltage); Serial.print(" / UV Intensity (mW/cm^2): "); Serial.print(uvIntensity); Serial.println(); delay(3000); } //Takes an average of readings on a given pin //Returns the average int averageAnalogRead(int pinToRead) { byte numberOfReadings = 8; unsigned int runningValue = 0; for(int x = 0 ; x < numberOfReadings ; x++) runningValue += analogRead(pinToRead); runningValue /= numberOfReadings; return(runningValue); } //The Arduino Map function but for floats //From: https://forum.arduino.cc/index.php?topic=3922.0 float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) //int value = analogRead(pin); //Serial.print( map(value, 0,1023,0,1000) / 100.0); { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }děkuji
5.11.2015 v 18:33 #5045Zbyšek Voda
ÚčastníkDobrý den,
přijímáte-li data v mW/cm^2 a chcete je převést na na W/m^2, je přepočet následující:
W = 1000 mW m^2 = 10 000 cm^2 W/m^2 = (1000 mW) / (10 000 cm^2) W/m^2 = mW / (10 cm^2)Dá přepočet se dá tedy vyjádřit funkcí
float mWcm2toWm2(float mWcm2){ //uznávám, že název funkce je opravdu ošklivý :) float Wm2 = mWcm2 / 10; return Wm2; }Snad jsem se nikde nesekl 🙂
5.11.2015 v 20:01 #5046Aleš
Účastník„Začátek máte dobře Kroupo. Ale ten výsledek, ten výsledek“ 🙂
W/m^2 = (1000 mW) / (10 000 cm^2)
1000 / 10 000 = 0.1
W/m^2 = mW/cm^2 / 0.1takže:
float Wm2 = mWcm2 / 0.1;
nebo
float Wm2 = mWcm2 * 10;🙂
6.11.2015 v 15:20 #5050Zbyšek Voda
ÚčastníkNesouhlasím s vámi. Vaše úvaha je chybná.
7.11.2015 v 19:50 #5059Aleš
ÚčastníkZkuste si to zadat třeba sem:
http://www.endmemo.com/sconvert/w_m2mw_cm2.php8.11.2015 v 16:04 #5073Zbyšek Voda
ÚčastníkDobrý den, každý jsme měl pravdu v něčem.
Váš převod jednotek je zapsán chybně, můj je dobře, jen jsem si výsledek špatně interpretoval (bral jsem jednotky v posledním vzorci úpravy jako proměnné, což nelze). Vaše převodní funkce je správná, moje byla špatná.Tedy přiznávám svoji chybu. Řešení:
float mWcm2toWm2(float vstup){ float vystup = vstup * 10; return vystup; }Shodneme se?
10.11.2015 v 21:45 #5101Aleš
ÚčastníkJá nejsem programátor, vyznám se spíš v hardware. Takže to byla spíš náhoda, že jsem si té chyby všiml. Praštilo mě do očí, že když je plocha větší, tak by měla být i energie která dopadá na tuto plochu větší 🙂
24.7.2016 v 14:16 #7775cingelroman
ÚčastníkDobry den, myslim si ze graf pro ml8511 ma chybne popisky. Hodnota od 0 do 15 neni intenzita v mW/cm^2 ale UV index a to neni to same. 1 mW/cm^2 se nerovna 1 UV index. Podle ruznych servru je 1 UV index = 25mW/m^2 coz je vlastne 0.0025 mW/cm^2
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.
