помогите , с созданием умного света на фоторезисторах

Ulwgard
Offline
Зарегистрирован: 12.01.2017

Есть проект создания умного света на фоторезюках , попробовал сделать код на ифах , работает только в случае с одним из датчиков:

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-х фоторезюках , хелп , пипл...
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Вы хотите посчитать среднюю интенсивность освещения на 4 фоторезисторах и в зависимость от этого регулировать яркость LED ?

Ulwgard
Offline
Зарегистрирован: 12.01.2017

почти,идея была в том ,что бы считывать с двух датчиков значения для одного источника , но вся система работает на 4-х датчиках и двух источниках света

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Датчики и источники разнесены ?

Не боитесь нарваться на мигающий свет ?

Считали датчики, свето мало,добавили света, 

считали датчики, свето много, убавили свет

и так по кругу.

 

nazemnow
Offline
Зарегистрирован: 12.01.2017

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

 

Ulwgard
Offline
Зарегистрирован: 12.01.2017

кому интересно доделал скетч  под проект

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);

}

также прикреплю схему подключения

Araris
Offline
Зарегистрирован: 09.11.2012

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);

}

 

Ulwgard
Offline
Зарегистрирован: 12.01.2017

не имел дела с массивами , оттого и не знал как короче )