Автоматическая подсветка лестницы и MM5450

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

YRA пишет:

А я вот за основу Вашу платку беру, ну компановку, да и разводку, размеры чуть,наверное, увеличить прийдется, а вот с подсветкой буду думать, как сделеть разводку так, что бы ну, предположим, перемычкой, обойтись, либо есть подсветка- либо нет.

 

Вот переделал ту плату под ночную подсветку (схему не менял только плату дорисовал). Попробывал забросить на это ресурс, мне он удобней. https://cloud.mail.ru/public/32c2af46ad30/%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82_6.zip Если не пойдёт закину на другой.

В плате:

DATA 6
CLOCK 7
FOTO A0
T1 12
E1 13
T2 10
E2 11
BR  5

Если поставить резистор и не ставить перемычку под ним то будет БЕЗ РЕГУЛИРОВКИ яркости первой и последней ступени.

Если неставить резистор, а поставить перемычку то БУДЕТ регулировка яркости с 5-й ноги МК.

YRA
Offline
Зарегистрирован: 10.01.2015

kruzhnoff, я бы кнопку поставил. Я, конечно, понимаю и  прошу прощения, что "...умная мысля, приходит опосля..."- мне раньше надо было Вам предлагать это, в предыдущем моем посте, но простите, 29 лет службы, а каждый год забирал  у офицера  СА 4% ума, нервы не к черту.

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

YRA пишет:

kruzhnoff, я бы кнопку поставил. Я, конечно, понимаю и  прошу прощения, что "...умная мысля, приходит опосля..."- мне раньше надо было Вам предлагать это, в предыдущем моем посте, но простите, 29 лет службы, а каждый год забирал  у офицера  СА 4% ума, нервы не к черту.

Я сам офицер в отставке, уже 3 года на пенсии. ;)

Какую кнопку и куда?

YRA
Offline
Зарегистрирован: 10.01.2015

Ну смотри, надо что бы была подсветка, нажал на кнопку и пятая нога на 19-ю ногу-отпустил и 1ком на 19 ногу.

Ордена Ленина Забайкальский военный округ, 154 узел связи 53 ракетной армии в/ч 77127 Начальник телеграфного центра.. Там развалины ныне одни обозначены .г.Чита  на северо- восток Wikimapia   в помощь.  О, и у нас пркрытие было "дом отдыха"Полянка".

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Проще тогда джампер поставить. Но думаю пока подождем пока denyang своё програмное решение с кнопкой презентует, а после решим как лучше будет.

pogriban
Offline
Зарегистрирован: 28.12.2014

ребята здраствуите я уже пару недель все читаю этот форум и уже успел запутатся, дйте пожалуйста правилиный и финальный скетч но и правильную и финальную схему. Буду очень признателен. Заранее блогодарю

P.S извеняюсь за ошибки я не русский

YRA
Offline
Зарегистрирован: 10.01.2015

pogriban, я, например, на монтажке собираю и потихоньку наращиваю принципиальную схему. На сегодняшний день проврен скетч из поста 182 от уважаемого maxsim  на основе от denyang.

pogriban
Offline
Зарегистрирован: 28.12.2014

А L78M05CV и +12В нужны

YRA
Offline
Зарегистрирован: 10.01.2015

Эта шняшка, L78M05CV,нужна только для питания Андруино  и фоторезистора, а все остальное +12 вольт, Вт так 100-150.Шняшка эта+ 12v, преврашает в -+5V. Ну типа вот http://kommagazin.ru/aksessuary/blok-pitaniya-12volt-5a-60vat-ac038.html было приобретенг сегодня  ,как основной блок питания.

Уважаемые модеретары".... не рекламы ради, а прсвящения для..." ,как говаривори Петр I

pogriban
Offline
Зарегистрирован: 28.12.2014

Так в http://lukjanow.ru/2012/04/automatic-illumination-stairs-arduino/ показоно как +12Вт подсоелены к VDD M5450

pogriban
Offline
Зарегистрирован: 28.12.2014

Я проверл код с поста 182 от Гуру Максим все ок но не реагирует фотоелемент

YRA
Offline
Зарегистрирован: 10.01.2015

У меня, старый, советский еще  фоторзистор,снятый с какой-то аппаратуры- вроде норамально. Пальцем закрываешь- работате , открываешь не работает. Надо бы, конечно, днем при дневном свете проверить, а то я работаю в подвале, а там лампы дневнго света, но вроде срабатывает.Сегодня приобрел датчик освещености- самый дешевый , хочу фотоспротивление обновить.

pogriban
Offline
Зарегистрирован: 28.12.2014

Я проверил свой фотоелемент  вот так http://edurobots.ru/arduino-fotorezistor/     и он работает

так подключил и в принципальную схему но не хочет, и в програме не вижу где проверяется если день или ночь

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

pogriban пишет:

Я проверил свой фотоелемент  вот так http://edurobots.ru/arduino-fotorezistor/     и он работает

так подключил и в принципальную схему но не хочет, и в програме не вижу где проверяется если день или ночь

У меня тоже не работает. И дело не в фоторезисторе. В свой скетч maksim забыл добавить параметры (условия) фоторезистора. Проще говоря в программе нет фоторезистора. Поэтому и не работает. 

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

maksim пишет:

Что бы постоянно не "дрочить" MM5450 лучше сделать так:





//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  4
#define  E1  5
//Устанавливаем контакты для второго датчика
#define  T2  2
#define  E2  3
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 16
const uint32_t mask = 0b1111111111111111;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
}

void loop() 
{

  int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
  if(D1 > 0 && D1 < 100)          // если расстояние меньше 100см, то
  {
    analogWrite (BR,  brightset);
    for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
    {
      MM5450(mask<<i);
      delay(200);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
    {
      MM5450(mask>>i);
      delay(200);                 // задержка затухания
    }
    FirstLast();
  }

  int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
  if(D2 > 0 && D2 < 100)          // если расстояние меньше 100см, то
  {
    analogWrite (BR,  brightset);
    for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
    {
      MM5450(mask>>i);
      delay(200);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
    {
      MM5450(mask<<i);
      delay(200);                 // задержка затухания
    }
    FirstLast();
  }
  delay(20);
}


void FirstLast()
{
  analogWrite (BR,  25);
  MM5450(0b1000000000000001);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

 

Уважаемый maksim Вы забыли в код прописать сам фоторезистор. Если не сложно допишите пожалуйста.

pogriban
Offline
Зарегистрирован: 28.12.2014
//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  4
#define  E1  5
//Устанавливаем контакты для второго датчика
#define  T2  2
#define  E2  3
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9
const byte brightset = 255;
//Задаем количество светодиодов
#define NUM_LEDS 16
const uint32_t mask = 0b1111111111111111;
void setup()
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  //digitalWrite(FOTO, HIGH);
  
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
}
void loop()
{
if (analogRead(FOTO) < 100) // intensitatea luminii 
{
  int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
  if (D1 > 0 && D1 < 10)         // если расстояние меньше 100см, то
  {
    analogWrite (BR,  brightset);
    for (char i = NUM_LEDS - 1; i >= 0; i--) // зажигаем светодиоды в одну сторону
    {
      MM5450(mask << i);
      delay(200);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for (char i = 0; i <= NUM_LEDS; i++) // тушим светодиоды
    {
      MM5450(mask >> i);
      delay(200);                 // задержка затухания
    }
    FirstLast();
 
  }
  int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
  if (D2 > 0 && D2 < 10)         // если расстояние меньше 100см, то
  {
    analogWrite (BR,  brightset);
    for (char i = NUM_LEDS - 1; i >= 0; i--) // зажигаем светодиоды в другую сторону
    {
      MM5450(mask >> i);
      delay(200);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for (char i = 0; i <= NUM_LEDS; i++) // тушим светодиоды
    {
      MM5450(mask << i);
      delay(200);                 // задержка затухания
    }
    FirstLast();
  }
  delay(20);
}
}//
 
 
с фоторезистором я вот так разобрался там if (analogRead(FOTO) < 100) только с значением 100 надо поиграстся в зависимость от фоторезистора, и не зобудьте про  //digitalWrite(FOTO, HIGH);
и вторая полавинв скетча возьите с поста 182
pogriban
Offline
Зарегистрирован: 28.12.2014

Но Уважаемого maksimа я бы попрасил поколдовать над прогй в таких случях как:

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

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

Спосибо

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

pogriban

Я сделал почти также.



//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  12
#define  E1  13
//Устанавливаем контакты для второго датчика
#define  T2  10
#define  E2  11
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t mask = 0b11111111111100000;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
}

void loop() 
{
  static bool state;
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {
        MM5450(mask<<i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask>>i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    
    int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
    if(D2 > 0 && D2 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
      {
        MM5450(mask>>i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask<<i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    delay(20);
  }
}


void FirstLast()
{
  analogWrite (BR,  20);
  MM5450(0b10000000000100000);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

НО, что в моём, что в Вашем случае (пробывал менять половину скетча на вашу) режим ночной подсветки получается не совсем ночным, а круглосуточным. Т.е. он не отключается если фоторезистор засвечен. Подсветка лестницы при засвете отключатся, а ночной режим нет, так и светят в пол накала первый и последний светодиод независимо от состояния фоторезистора.

Немогу понять почему так происходит?!

Также присоединяюсь к Вашей просьбе к maksim.

Brutal
Offline
Зарегистрирован: 14.03.2013

С настройкой фоторезистора нужно дейсвительно "поиграться", как бы подобрать под свой фоторезистор и освещение. Я вот подстраивал уже по месту размещения фоторезистора на его постоянном месте на лестнице - менял циферку туда\сюда ;).

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Brutal пишет:

С настройкой фоторезистора нужно дейсвительно "поиграться", как бы подобрать под свой фоторезистор и освещение. Я вот подстраивал уже по месту размещения фоторезистора на его постоянном месте на лестнице - менял циферку туда\сюда ;).

Там дело не в фоторезисторе и его настройках. Проблема в том, что при засветке фоторезистора лестница (ультрасоники) отключаются, а так называемая ночная подсветка (две крайнии ступени) нет. Т.е. при засвеченом фоторезисторе горят два светодиода в пол накала (первый и последний) и ультрасоники не реагируют на движение, лестница не включается.

Надо, что то в коде подправить. А, что я не знаю, уже голову сломал. Опыта не хватает.

dimanok88
Offline
Зарегистрирован: 04.03.2014

kruzhnoff пишет:

Brutal пишет:

С настройкой фоторезистора нужно дейсвительно "поиграться", как бы подобрать под свой фоторезистор и освещение. Я вот подстраивал уже по месту размещения фоторезистора на его постоянном месте на лестнице - менял циферку туда\сюда ;).

Там дело не в фоторезисторе и его настройках. Проблема в том, что при засветке фоторезистора лестница (ультрасоники) отключаются, а так называемая ночная подсветка (две крайнии ступени) нет. Т.е. при засвеченом фоторезисторе горят два светодиода в пол накала (первый и последний) и ультрасоники не реагируют на движение, лестница не включается.

Надо, что то в коде подправить. А, что я не знаю, уже голову сломал. Опыта не хватает.

Попробуйте вывести данные с фоторезистора и ультрасоника для отладки через функции

Serial.begin(9600); Serial.println(analogValue);

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

dimanok88 пишет:

Попробуйте вывести данные с фоторезистора и ультрасоника для отладки через функции

Serial.begin(9600); Serial.println(analogValue);

Фоторезистор как раз то ки работает как надо. Фоторезистор отключает лестницу когда светло, и включает когда темно. А вот ночная подсветка в этот момент не отключается она включена всегда и днём и ночью. Т.е. в скетче надо где то прописать, что вместе с лестницей днём (когда светло, фоторезистор засвечен) должна отключаться ночная подсветка.

Неужели этот косяк только у меня, а остальных всё работает как надо?! Т.е. ночная подсветка при засветке фоторезистора отключается.

YRA
Offline
Зарегистрирован: 10.01.2015

Я пока ничего не могу сказать. Завтра должны прийти ключи, если все сложится удачно, под них печатку сделаю, сею на основе Вашей платы, нарисовано 80%, размер, конечно, поболее будет, но и блок питания у меня 150 Вт, а он размеров тоже немалых. На мотаже то же как-то нестабильно работает.

Brutal
Offline
Зарегистрирован: 14.03.2013

Тоже не подскажу, так как у меня работает без ночной подсветки (руки еще не дошли но надо будет доделать) У меня работает кажись еще по скетчу из 53 сообщения.

dimanok88
Offline
Зарегистрирован: 04.03.2014

kruzhnoff пишет:

pogriban

Я сделал почти также.



//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  12
#define  E1  13
//Устанавливаем контакты для второго датчика
#define  T2  10
#define  E2  11
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t mask = 0b11111111111100000;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
}

void loop() 
{
  static bool state;
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {
        MM5450(mask<<i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask>>i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    
    int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
    if(D2 > 0 && D2 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
      {
        MM5450(mask>>i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask<<i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    delay(20);
  }
}


void FirstLast()
{
  analogWrite (BR,  20);
  MM5450(0b10000000000100000);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

Тут я думаю следует использовать указатели. попробую сделать поправить немного код, но проверить не могу.  Надо экспериментировать.

//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t mask = 0b11111111111100000;
int *var;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);

  if(*var  < 990){
     FirstLast();
  }
}

void loop() 
{
  static bool state;
  var = analogRead(FOTO);
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Я щас по другому решил эту проблему.





void loop() 
{
  static bool state;
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  else analogWrite(9, LOW);   // выключаем ночную подсветку
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  else analogWrite(9, HIGH);   // включаем ночную подсветку
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {

Незнаю насколько это технически правельно, но зато теперь работает как надо. 

Щас еще попробую Ваш вариант.

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Ваш вариант не удаётся скомпилировать. 



//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  12
#define  E1  13
//Устанавливаем контакты для второго датчика
#define  T2  10
#define  E2  11
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t mask = 0b11111111111100000;
int *var;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);

  if(*var  < 990){
     FirstLast();
  }
}

void loop() 
{
  static bool state;
  var = analogRead(FOTO);
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {
        MM5450(mask<<i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask>>i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    
    int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
    if(D2 > 0 && D2 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
      {
        MM5450(mask>>i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask<<i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    delay(20);
  }
}


void FirstLast()
{
  analogWrite (BR,  20);
  MM5450(0b10000000000100000);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

Выдаёт вот такую ошибку.

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: "Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328"
LEDstairs_nightBP.ino: In function 'void loop()':
LEDstairs_nightBP:44: error: invalid conversion from 'int' to 'int*'

YRA
Offline
Зарегистрирован: 10.01.2015

kruzhnoff ,выложите тогда скетч.

dimanok88
Offline
Зарегистрирован: 04.03.2014

kruzhnoff пишет:

Я щас по другому решил эту проблему.




void loop() 
{
  static bool state;
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  else analogWrite(9, LOW);   // выключаем ночную подсветку
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  else analogWrite(9, HIGH);   // включаем ночную подсветку
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {

Незнаю насколько это технически правельно, но зато теперь работает как надо. 

Щас еще попробую Ваш вариант.

 Если ваш вариант работает номрально, то думаю и не стоит загоняться. :-)

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

YRA пишет:

kruzhnoff ,выложите тогда скетч.

Вот полный мой скетч на котором ночная подсвека работает правельно.

Не уверен, что с технической стороны всё там сделано правельно, но он работает.

Если уважаемый maksim его оптимизирует то буду примного благодарен.



//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  12
#define  E1  13
//Устанавливаем контакты для второго датчика
#define  T2  10
#define  E2  11
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t mask = 0b11111111111111111;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
}

void loop() 
{
  static bool state;
  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения
  else analogWrite(9, LOW);   // выключаем ночную подсветку
  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения
  else analogWrite(9, HIGH);   // включаем ночную подсветку
  if(state)
  {
    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
      {
        MM5450(mask<<i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask>>i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    
    int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
    if(D2 > 0 && D2 < 70)          // если расстояние меньше 70см, то
    {
      analogWrite (BR,  brightset);
      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
      {
        MM5450(mask>>i);
        delay(300);                 // задержка зажигания
      }
      delay(15000);                  // ждем 15 секунд
      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
      {
        MM5450(mask<<i);
        delay(300);                 // задержка затухания
      }
      FirstLast();
    }
    delay(20);
  }
}


void FirstLast()
{
  analogWrite (BR,  20);
  MM5450(0b10000000000000001);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

 

Serg_YA
Offline
Зарегистрирован: 20.02.2015

Доброй ночи! Скажите пожалуйста, используется arduino pro mini, M5450, HC-SR04 Distance Sensor?

Можно схему посмотреть?

 

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Serg_YA пишет:

Доброй ночи! Скажите пожалуйста, используется arduino pro mini, M5450, HC-SR04 Distance Sensor?

Можно схему посмотреть?

 

YRA
Offline
Зарегистрирован: 10.01.2015

kruzhnoff, ну не въеду- смотрю по даташиту на IRF7314, Вашу печатную плату - согласно даташиту входа 2 и 4, выходы 1 и 3, а вот на 5,6,7,8, подается VCC , в нашем случае +12V, а на печатке у Вас вроде как сигнал снимается  с 7,8 и 5,6

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

YRA пишет:

kruzhnoff, ну не въеду- смотрю по даташиту на IRF7314, Вашу печатную плату - согласно даташиту входа 2 и 4, выходы 1 и 3, а вот на 5,6,7,8, подается VCC , в нашем случае +12V, а на печатке у Вас вроде как сигнал снимается  с 7,8 и 5,6

Плохо смотрите. Вот, здесь всё нарисовано:

Т.е. 1, 3- вход +12v, 2, 4- управление (вход с микросхемы ), 5, 6 и 7, 8 выход +12v (+ на светодиоды).

Учите мат.часть! ;))

Serg_YA
Offline
Зарегистрирован: 20.02.2015

У себя на лестнице я применил светодиодные лампочки (220в) внизу около ступеней и проходные выключатели. Внизу включаю лампочки, захожу наверх- выключаю. И наоборот. Но увидел в инете ролики и загорелся тоже сделать. 

Brutal
Offline
Зарегистрирован: 14.03.2013

Serg_YA пишет:

У себя на лестнице я применил светодиодные лампочки (220в) внизу около ступеней и проходные выключатели. Внизу включаю лампочки, захожу наверх- выключаю. И наоборот. Но увидел в инете ролики и загорелся тоже сделать. 

Поверьте мне вещь нужная и стоящая ! У меня работает уже годика два. И обходиться сравнительно недорого. Правда с проводами придеться повозиться ;)

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Serg_YA пишет:

Но увидел в инете ролики и загорелся тоже сделать. 

Не самый простой в реализации вариант автоматической подсветки Вы выбрали. Есть варианты попроще, подешевле и с большим количеством опций.

Вот этот например :

http://forum.amperka.ru/threads/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%BF%D0%BE%D0%B4%D1%81%D0%B2%D0%B5%D1%82%D0%BA%D0%B0-%D0%BB%D0%B5%D1%81%D1%82%D0%BD%D0%B8%D1%86%D1%8B.1930/

Или вот интересный вариант :

http://www.getchip.net/posts/105-kontroller-osveshheniya-stupenejj-lestnicy/

 

Serg_YA
Offline
Зарегистрирован: 20.02.2015

Спасибо! Ссылки уже смотрю. Там сборки для 14 ступеней. а у меня 16. Местный вариант подходит больше, но прошивка не доработана.

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

Serg_YA пишет:

Спасибо! Ссылки уже смотрю. Там сборки для 14 ступеней. а у меня 16. Местный вариант подходит больше, но прошивка не доработана.

У меня 12 ступений и те варианты меня устраивают, но я их уже увидел когда собрал этот. Поэтому теперь пытаюсь доработать прошивку. Но пока с малым успехом.

YRA
Offline
Зарегистрирован: 10.01.2015

 Я смотрел на 134 пост, что делать, опять же , каждый год службы забирает у офицера 4% ума,а у меня выслуги 29 лет.

Влмир
Offline
Зарегистрирован: 26.02.2015

Максим приветствую  .  перечитал   форум и  понял    что  вы самый  продвинутый  в  этом   вопросе .  У  меня всё тот же  )))  .  Я взял  несколько    с  этого   форума  скетчей и думаю   что  они   являются рабочимии  , так ли это ?  , все написанны или  редактированны вами,     У   меня ардуино   уно   ,  драйвер  4550 ,  датчики   SR 04  .  Проблемма    в том  что  технически  вроде  бы  соединил  как  надо    к  нужным  выводам  , загрузка проходит  идеально  ,  загружаю  с помощью  Arduino 1.04 .   Разные скетчи  проблема одна  светодиоды не зажигаються  ,  каков алгоритм поиска  неисправности  ?  питание на датчики  и  драйвер  поступают   . где искать дальше не представляю 

birdtlt
Offline
Зарегистрирован: 19.01.2015

Влмир, светодиоды точно подключены минусом к М5450, а плюсом через резистор к +12В?

dimanok88
Offline
Зарегистрирован: 04.03.2014

kruzhnoff, Чем можно заменить irf7314 более доступными транзисторами? Мне не нужно на каждый канал по 4А.

YRA
Offline
Зарегистрирован: 10.01.2015

dimanok88, это ж не занчит, что 4А надо грузить, запасец будет мал-мало.

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

В принцыпе irf 7314 можно заменить любым другим P-канальным транзистором (например этим). Но чем irf7314 не доступен? В чип и дип всегда есть и стоит 20 рублей (если брать больше 3-х). 

YRA
Offline
Зарегистрирован: 10.01.2015

Вот посмотри может что-то и почерпнешь для решения воей задумки.

http://arduino.ru/forum/apparatnye-voprosy/intellektualnye-klyuchi-mopy-i-pr

http://arduino.ru/forum/apparatnye-voprosy/pomogite-podobrat-tranzistor

YRA
Offline
Зарегистрирован: 10.01.2015

Уперся - не могу записать скетч в девай как на форуме, только кварцик на 160000, вроде все делаю как написано, но мимо кассы все http://forum.arduino.cc/index.php?topic=280690.0, может кто поможет. Правда есть еще вариант робовать с помощью UNO прожечь.

YRA
Offline
Зарегистрирован: 10.01.2015

Максим, не сталкивалитсь, с такой проблемой, вроде столько скурил уже форумов и все мимо

kruzhnoff
Offline
Зарегистрирован: 09.02.2015

В чём заключается проблема?

Выдаёт ошибку как на скрине?

У меня была (точней есть) проблема с одним ардуино, выдает такую ошибку при загрузке скетча. Поставил другую (от другого продовца и производителя) всё работает как надо. Походу брак попался.

 

YRA
Offline
Зарегистрирован: 10.01.2015

Прошился!!!!! Завтра если время будет на работе буду платку травить.

Если  кому -то понадобится

Проблема решилась так.

Шился с помощью , куленной у китайца  pl2303.  Сварганил так же , как в этой статье  http://фридуин.ство.рф/?p=920. Подцепился на RST согласно статьи и далее по штату подключил VCC,TXO,RTX,GND. Обновил дровишки для PL2303 и все прошло на "УРА!". Сначала для проверки "Blink" . Ну зато столько перекурил сайтов, сколько почерпнул знаний в 56-ть лет:" Коммунистом стать может лишь тот, кто обогатит свою память всеми теми знаниями, что выработало человечество!" (В.И.Ленин) было написано в клубе СВВИУС им. 60-ти летия Великого Октября.