Пример простого однопиксельного сканера на контроллере Arduino.
В качестве RGB-сенсора используется TCS34725, показания которого в текстовом виде передаются в последовательный порт.
Код сканера
#include <Wire.h>
#include "Adafruit_TCS34725.h"
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_154MS, TCS34725_GAIN_4X);
int imageSize = 128;
int stepSize = 4096 / imageSize;
void setup(void) {
Serial.begin(9600);
analogWriteResolution(12);
delay(500);
if (tcs.begin()) {
Serial.println("Start>>");
runScan();
} else {
Serial.println("TCS34725 not detected");
}
}
void runScan()
{
uint16_t r,g,b,c;
int x,y;
for (x=0; x< 4096; x+=stepSize) {
analogWrite(DAC0,x);
delay(500);
for (y=0; y< 4096; y+=stepSize) {
analogWrite(DAC1,y);
delay(10);
tcs.getRawData(&r, &g, &b, &c);
Serial.print(r);Serial.print(", ");
Serial.print(g);Serial.print(", ");
Serial.print(b);Serial.print(", ");
}
Serial.println();
}
}
void loop(void) {
}
Для превращения полученных значений в картинку - они сохраняются в txt-файл, который затем обрабатывается простым Matlab-овским скриптом:
ftoread = 'img.txt';
fid = fopen(ftoread);
M = textscan(fid, '%f', 'Delimiter',',');
fclose(fid);
rawImg = M{1};
r1 = (rawImg - min(rawImg))./max(rawImg)*3;
R=r1(1:3:length(r1));
G=r1(2:3:length(r1));
B=r1(3:3:length(r1));
r=reshape(R, [128, 128]);
g=reshape(G, [128, 128]);
b=reshape(B, [128, 128]);
rgbImg=cat(3, r, g, b);
imshow(rgbImg);
Ссылки
Building a Single Pixel Scanner
По теме
Самодельный датчик цвета
Датчик цвета из RGB-светодиода и фотоэлемента - реальная фотошоповская пипетка
Лазерный сканирующий микроскоп на Arduino
Gado - робот-сканер на Arduino
Сортировщик конфет M&Ms по цвету при помощи Arduino
ЧПУ для сада Дзэн на Arduino
Сортировщик огурцов на Arduino, Raspberry Pi 3 и TensorFlow
Простой ЧПУ под управлением Arduino
Arduino
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
