Přeskočit obsah

Měření¤

Pro měření využejeme funkce readCalRGB(). Tato funkce nám vráti kalibrované data v rozsahu 0-1. Hodnoty v rozsahu 0-1 však nemusejí být pro nás ideální. Nejedná se totiž o standardní formát, takže z něj nedokážeme přímo vyčíst barvu. Proto chceme většinou hodnoty upravit na klasický formát RGB. K tomu využijeme funkci sensorDataToRGB(SENSOR_DATA) z knihovny colors. S formátem RGB už můžeme pracovat pohodlně.

// vyčteme kalibrované data, funkce vrací pole se 3 hodnotami 0-1
const sensorData = sensor.readCalRGB();

// funkce nám upraví rozsah 0-1 na rozsah 0-255, tedy standardní RGB formát; vrátí nám objekt typu Rgb
const rgb = colors.sensorDataToRGB(sensorData);

/*
takto může vypadat objekt rgb (toto je fialová barva)
{
    r: 255,
    g: 0,
    b: 255,
}

*/

Další funkce

Knihovna umožňuje také měření jednotlivých barevných kanálu: readCalRed(), readCalGreen(), readCalBlue(), readCalIR(), readCalClear().

Příklad 1¤

Příklad 2¤

Udělejte program, mění barvu LED na desce na barvu, kterou měří senzor. Pokud používáme vestavěný senzor, není vhodné měnit barvu ledek, kterou jsou přímo vedle něj.

Řešení
import * as colors from "./libs/colors.js";
import { I2C1 } from "i2c";
import { ZSCS2016C, Calibration } from "./libs/zscs2016c.js";
import { LED_WS2812B, SmartLed } from "smartled";
import { createRobutek } from "./libs/robutek.js";

const robutek = createRobutek("V2");

I2C1.setup({ sda: robutek.Pins.SDA, scl: robutek.Pins.SCL, bitrate: 400000 });
const sensor = new ZSCS2016C(I2C1, false);
sensor.enable();

const ledStrip = new SmartLed(robutek.Pins.ILED, 7, LED_WS2812B);

// zde si musíme doplnit kalibrační údaje, které jsme si naměřili
const calib: Calibration = {
    mins: [3426, 7332, 4844, 529, 15877],
    maxs: [62644, 65535, 65535, 13320, 6555],
};
sensor.setCalibration(calib);
ledStrip.clear();
ledStrip.show();
setInterval(() => {
    const calData = sensor.readCalRGB();
    const rgb: colors.Rgb = colors.sensorDataToRGB(calData);
    ledStrip.set(1, rgb);
    ledStrip.show();
}, 50);

Možné pokračování¤

  • Udělej program, který bude měřit barvu předmětu před senzorem a "pozná", o jakou barvu se jedná. Pokud před něj dáme zelený předmět, vypíše nám do konzole "zelená" atd...