помогите , с созданием умного света на фоторезисторах
- Войдите на сайт для отправки комментариев
Чт, 12/01/2017 - 19:24
Есть проект создания умного света на фоторезюках , попробовал сделать код на ифах , работает только в случае с одним из датчиков:
int sensor =0;
int sensor1 =1;
int y;
int x;
int summ;
int Led = 11;
int brightness =0;
void setup(void){
pinMode(Led,OUTPUT);
}
void loop( )
{
y = analogRead(sensor1);
x = analogRead(sensor);
summ = x+y;
if (summ == 0 )
{
brightness = 235;
analogWrite(Led,brightness);
}
if (summ == 1 )
{
brightness = 220;
analogWrite(Led,brightness);
}
if (summ == 2 )
{
brightness = 205;
analogWrite(Led,brightness);
}
if (summ == 3 )
{
brightness = 190;
analogWrite(Led,brightness);
}
if (summ == 4 )
{
brightness = 175;
analogWrite(Led,brightness);
}
if (summ == 5 )
{
brightness = 160;
analogWrite(Led,brightness);
}
if (summ == 6 )
{
brightness = 145;
analogWrite(Led,brightness);
}
if (summ == 7 )
{
brightness = 130;
analogWrite(Led,brightness);
}
if (summ == 8 )
{
brightness = 115;
analogWrite(Led,brightness);
}
if (summ == 9 )
{
brightness = 100;
analogWrite(Led,brightness);
}
if (summ == 10 )
{
brightness = 85;
analogWrite(Led,brightness);
}
if (summ == 11 )
{
brightness = 70;
analogWrite(Led,brightness);
}
if (summ == 12 )
{
brightness = 55;
analogWrite(Led,brightness);
}
if (summ == 13 )
{
brightness = 40;
analogWrite(Led,brightness);
}
if (summ == 14 )
{
brightness = 25;
analogWrite(Led,brightness);
}
if (summ == 15 )
{
brightness = 10;
analogWrite(Led,brightness);
}
}
в коде пытался подключить второй фоторезюк но понял что судя по всему выхоядт нечетные числа , с запятыми и т.д.Пробовал делить без остатка тоже ничего, как сделать через кейсы , понятия не приложу, а ведь все хотел организовать на 4-х фоторезюках , хелп , пипл...
Вы хотите посчитать среднюю интенсивность освещения на 4 фоторезисторах и в зависимость от этого регулировать яркость LED ?
почти,идея была в том ,что бы считывать с двух датчиков значения для одного источника , но вся система работает на 4-х датчиках и двух источниках света
Датчики и источники разнесены ?
Не боитесь нарваться на мигающий свет ?
Считали датчики, свето мало,добавили света,
считали датчики, свето много, убавили свет
и так по кругу.
1. Вы уверены, что полученные значения - целые числа, при том на столько малые?
Попробуйте выводить в сериал значения сенсоров, что бы понять от чего отталкиваться.
Вот пример кода:
int photocellPin = 0; // сенсор и понижающий резистор 10 кОм подключены к a0 int photocellReading; // считываем аналоговые значения с делителя сенсора int LEDpin = 11; // подключаем красный светодиод к пину 11 (ШИМ пин) int LEDbrightness; // void setup(void) { // информацию для дебагинга мы будем отправлять на серийный монитор Serial.begin(9600); } void loop(void) { photocellReading = analogRead(photocellPin); Serial.print("Analog reading = "); Serial.println(photocellReading); // аналоговые значения с сенсора // светодиод горит ярче, если уровень освещенности на датчике уменьшается // это значит, что мы должны инвертировать считываемые значения от 0-1023 к 1023-0 photocellReading = 1023 - photocellReading; //теперь мы должны преобразовать диапазон 0-1023 в 0-255, так как именно такой диапазон использует analogWrite LEDbrightness = map(photocellReading, 0, 1023, 0, 255); analogWrite(LEDpin, LEDbrightness); delay(100); }Источник: http://arduino-diy.com/arduino-fotorezistor
2. Попробуйте составить некое математическое выражение, которым можно описать зависимость яркости диода от сенсоров. В этом случае регулировка будет плавная, да и код будет проще и красивее.
4. Вот пример подобный Вашему.
/* Выражение Switch Демонстрирует использование выражения switch, которое в данном случае помогает вам выбирать среди набора дискретных значений переменной. Для того, чтобы увидеть работу скетча в реальности, установите плату и сенсор в хорошо освещенной комнате, откройте окно серийного монитора и постепенно приближайте руку к чувствительному элементу фоторезистора, создавая тень. Схема подключения: * фоторезистор от аналогового пина 0 к 5 Вольтам from analog in 0 to +5V * резистор на 10 кОм от аналогового пина 0 к земле. */ // эти константы не будут изменяться. Они определяют // нижнюю и верхню границы значений, которые считываются с вашего датчика: const int sensorMin = 0; // минимальное значение const int sensorMax = 600; // максимальное значение void setup() { // инициализация серийного соединения: Serial.begin(9600); } void loop() { // считывание значений с датчика: int sensorReading = analogRead(A0); // преобразование диапазона датчика в в диапазон четырех значений: int range = map(sensorReading, sensorMin, sensorMax, 0, 3); // совершать различные действия в зависимости от: // значения range: switch (range) { case 0: // ваша рука полностью накрыла фоторезистор Serial.println("dark"); break; case 1: // ваша рука находится близко к фоторезистору Serial.println("dim"); break; case 2: // ваша рука в нескольких сантиметрах от фоторезистора Serial.println("medium"); break; case 3: // ваша рука совершенно не над чувствительным элементом датчика Serial.println("bright"); break; } delay(1); // задержка между считываниями для обеспечения стабильности работы }Источник: http://arduino-diy.com/arduino-vyrazheniye-switch
И кратко о switch/case https://www.arduino.cc/en/Reference/SwitchCase
кому интересно доделал скетч под проект
int Brightness=0; int Brightness1=0; int Led=6; int Led1=5; const int sensorMin = 0; const int sensorMax = 30; const int sensorMin1 = 0; const int sensorMax1 = 30; void setup() { Serial.begin(9600); pinMode(Led,OUTPUT); pinMode(Led1,OUTPUT); } void loop() { int sensorReading = analogRead(A0); int sensorReading1 = analogRead(A1); int sensorReading2 = analogRead(A2); int sensorReading3 = analogRead(A3); int sensor = sensorReading+sensorReading1; int sensor1 = sensorReading2+sensorReading3; int x=sensor/2; int y=sensor1/2; Serial.println(x); Serial.println(y); int range = map(x, sensorMin, sensorMax, 0, 15); switch (range) { case 0: analogWrite(Led,Brightness= 230); break; case 1: analogWrite(Led,Brightness= 215); break; case 2: analogWrite(Led,Brightness= 200); break; case 3: analogWrite(Led,Brightness= 185); break; case 4: analogWrite(Led,Brightness= 170); break; case 5: analogWrite(Led,Brightness= 155); break; case 6: analogWrite(Led,Brightness= 140); break; case 7: analogWrite(Led,Brightness= 125); break; case 8: analogWrite(Led,Brightness= 110); break; case 9: analogWrite(Led,Brightness= 95); break; case 10: analogWrite(Led,Brightness= 80); break; case 11: analogWrite(Led,Brightness= 65); break; case 12: analogWrite(Led,Brightness= 50); break; case 13: analogWrite(Led,Brightness= 35); break; case 14: analogWrite(Led,Brightness= 20); break; case 15: analogWrite(Led,Brightness= 5); break; } delay(100); int range1 = map(y, sensorMin1, sensorMax1, 0, 15); switch (range1) { case 0: analogWrite(Led1,Brightness1= 230); break; case 1: analogWrite(Led1,Brightness1= 215); break; case 2: analogWrite(Led1,Brightness1= 200); break; case 3: analogWrite(Led1,Brightness1= 185); break; case 4: analogWrite(Led1,Brightness1= 170); break; case 5: analogWrite(Led1,Brightness1= 155); break; case 6: analogWrite(Led1,Brightness1= 140); break; case 7: analogWrite(Led1,Brightness1= 125); break; case 8: analogWrite(Led1,Brightness1= 110); break; case 9: analogWrite(Led1,Brightness1= 95); break; case 10: analogWrite(Led1,Brightness1= 80); break; case 11: analogWrite(Led1,Brightness1= 65); break; case 12: analogWrite(Led1,Brightness1= 50); break; case 13: analogWrite(Led1,Brightness1= 35); break; case 14: analogWrite(Led1,Brightness1= 20); break; case 15: analogWrite(Led1,Brightness1= 5); break; } delay(100); }также прикреплю схему подключения
Ulwgard, если позволите, так красивее и короче :
int Led=6; int Led1=5; const int sensorMin = 0; const int sensorMax = 30; const int sensorMin1 = 0; const int sensorMax1 = 30; const int arrayBrightness[] = {230,215,200,185,170,155,140,125,110,95,80,65,50,35,20,5}; void setup() { Serial.begin(9600); pinMode(Led,OUTPUT); pinMode(Led1,OUTPUT); } void loop() { int sensorReading = analogRead(A0); int sensorReading1 = analogRead(A1); int sensorReading2 = analogRead(A2); int sensorReading3 = analogRead(A3); int sensor = sensorReading+sensorReading1; int sensor1 = sensorReading2+sensorReading3; int x=sensor/2; int y=sensor1/2; Serial.println(x); Serial.println(y); int range = map(x, sensorMin, sensorMax, 0, 15); analogWrite(Led, arrayBrightness[range]); delay(100); range = map(y, sensorMin1, sensorMax1, 0, 15); analogWrite(Led, arrayBrightness[range]); delay(100); }не имел дела с массивами , оттого и не знал как короче )