Однопиксельный сканер на Arduino


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


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение