Пример простого однопиксельного сканера на контроллере 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, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)