Опыты с оптическим терменвоксом проведённые в рамках подготовки школьной исследовательской работы привели меня к вопросу: Как преобразовать свет в звук? Первую серию опытов я провёл с оптическим терменвоксом. Обнаруженная зависимость между световой и звуковой волной с подвига меня на создание прототипа машинного зрения.
Установка состоит из двух плат Arduino Uno.
Первая работает как оптический терменвокс. Вторая служит управлением LED экраном и отображает информацию о уровне освещённости.

Опыты с разной освещённостью.


Сейчас была реализована способность установки различать различные цвета.
http://www.youtube.com/watch?v=mHP-fk9ooFM
На первом этапе было решено научить машину отличать тёмное от светлого, сейчас же идёт работа по созданию прототипа робота, который смог бы отличать свет светофора и в зависимости от цвета, ехал на зелёный или останавливался на красный.
// Плата LED
#define LDR_PIN0 A0
// #define LDR_PIN1 A1
// #define LDR_PIN2 A2
#include <LiquidCrystal.h>
// Работа с экраном
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
void setup()
{
}
void loop()
{
int val0, val1, val2, sum;
// Считываем показатель с фоторезистрора и записываем его в переенную
val0 = analogRead(LDR_PIN0);
val1 = analogRead(LDR_PIN1);
val2 = analogRead(LDR_PIN2);
sum = val0 + val1 + val2;
// Устанавливаем длину строки и записываем переменную в первую строку
lcd.begin(16, 2);
lcd.print(sum);
// Проверяем только когда датчик в подходящем окружении
if (sum > 100 && sum < 1000)
{
// Если показатель входит в интервал, значит горят все светодиоды
if (sum > 367 && sum < 400)
{
lcd.setCursor(0, 1);
lcd.print("RGB");
}
// Если показатель входит в интервал, значит горит R светодиод
if (sum > 545 && sum < 585)
{
lcd.setCursor(0, 1);
lcd.print("R");
}
// Если показатель входит в интервал, значит горит G светодиод
if (sum > 586 && sum < 620)
{
lcd.setCursor(0, 1);
lcd.print("G");
}
// Если показатель входит в интервал, значит горит B светодиод
if (sum > 621 && sum < 680)
{
lcd.setCursor(0, 1);
lcd.print("B");
}
// Если показатель входит в интервал, значит горят BG светодиоды
if (sum > 480 && sum < 520)
{
lcd.setCursor(0, 1);
lcd.print("BG");
}
// Если показатель входит в интервал, значит горят RB светодиоды
if (sum > 434 && sum < 441)
{
lcd.setCursor(0, 1);
lcd.print("RB");
}
// Если показатель входит в интервал, значит горят GB светодиоды
if (sum > 442 && sum < 460)
{
lcd.setCursor(0, 1);
lcd.print("GB");
}
}
delay(1000);
}
