Опыты с оптическим терменвоксом проведённые в рамках подготовки школьной исследовательской работы привели меня к вопросу: Как преобразовать свет в звук? Первую серию опытов я провёл с оптическим терменвоксом. Обнаруженная зависимость между световой и звуковой волной с подвига меня на создание прототипа машинного зрения.
Установка состоит из двух плат 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); }