Kalibrace¤
Dříve, než začneme se senzory měřit, musíme je zkalibrovat. Kalibrace nám poskytne hodnoty v rozsahu 0-1
, které jsou upravené tak, aby samé nuly odpovídaly černé a samé jedničky odpovídaly bílé. Hodnoty tak budou více odpovídat skutečné barvě povrchu pod senzorem.
Tato jsou funkce, které ke kalibraci použijeme.
const sensor = new ZSCS2016C(I2C1, ADDR_BIT);
// zahájí kalibrační cyklus pro senzor a aplikuje kalibrační hodnoty
await sensor.runCalibration();
// perzistentně uloží kalibrační hodnoty pod zadaným klíčem
sensor.saveCalibration("KEY");
// načte kalibrační hodnoty z paměti pod zadaným klíčem
sensor.loadCalibration("KEY");
Kalibrační program využívající tyto funkce pak vypadá takto. Tento program nám vypíše kalibrační hodnoty pro náš senzor za současných podmínek. Procesem kalibrace nás program provede zprávami v terminálu.
import { I2C1 } from "i2c";
import { ZSCS2016C } from "./libs/zscs2016c.js";
import { createRobutek } from "./libs/robutek.js"
import { SmartLed, LED_WS2812B } from "smartled";
const robutek = createRobutek("V2");
I2C1.setup({ sda: robutek.Pins.SDA, scl: robutek.Pins.SCL, bitrate: 400000 });
const sensor = new ZSCS2016C(I2C1, true);
const ledStrip = new SmartLed(robutek.Pins.ILED, 7, LED_WS2812B);
ledStrip.set(1, { r: 255, g: 255, b: 255 });
ledStrip.set(2, { r: 255, g: 255, b: 255 });
ledStrip.show();
sensor.enable();
async function main() {
// spustí se kalibrační proces
await sensor.runCalibration();
console.log(`Calibration data: ${JSON.stringify(sensor.getCalibration())}`);
// uloží současné kalibrační hodnoty pod klíčem 'default'
sensor.saveCalibration("default");
}
main().catch(console.error);
Takto může vypadat objekt s kalibračními hodnotami
{
mins: [3426,7332,4844,529,15877],
maxs: [62644,65535,65535,13320,65535]
}
Kalibraci je nutné provádět pouze jednou. Poté se perzestentně ukládají paměti pod zadaným klíčem. Stejným pomocí stejného klíče je pak možné kalibraci znovu načíst a použít. Je také možné uložit více kalibrací pod různými klíči a podle potřeby je přepínat.
Robůtek disponuje dvěma RGB senzory, kalibraci je třeba provést pro každý z nich zvlášt. Kalibrační soubory si můžeme pojmenovat například external
pro vnější senzor a internal
pro vestavěný senzor.
import { I2C1 } from "i2c";
import { ZSCS2016C } from "./libs/zscs2016c.js";
import { createRobutek } from "./libs/robutek.js"
import { SmartLed, LED_WS2812B } from "smartled";
const robutek = createRobutek("V2");
I2C1.setup({ sda: robutek.Pins.SDA, scl: robutek.Pins.SCL, bitrate: 400000 });
const sensor = new ZSCS2016C(I2C1, true);
const ledStrip = new SmartLed(robutek.Pins.ILED, 7, LED_WS2812B);
ledStrip.set(1, { r: 255, g: 255, b: 255 });
ledStrip.set(2, { r: 255, g: 255, b: 255 });
ledStrip.show();
sensor.enable();
sensor.loadCalibration("default");
setInterval(() => {
console.log(`${JSON.stringify(sensor.readRGB())}`);
}, 1000);
POZOR
Kalibrace probíhá pro specifické podmínky, jako třeba množství světla či vzdálenost od měřeného povrchu. Pokud například provedete kalibraci se senzorem 1cm od povrchu a měření 2cm od povrchu, měřené data nebudou odpovídat dané barvě.