Яркость по времени

Изменение яркости.

Ответить
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#1

Сообщение hatul » 19.11.2020{, 20:49}

Собрал часы на МАХ7219. Днем не хватало яркости. Переделал на сдвиговые регистры 74НС595 . Теперь днем нормально, ночью светят как прожектор. Как в данном проекте менять яркость по времени? Что добавить? Фотодиод не предлагать.
P.S. Забыл сказать. Семисегмент собран из светодиодной ленты.
Web интерфейс.flp
(221.59 КБ) 47 скачиваний
Последний раз редактировалось hatul 19.11.2020{, 20:51}, всего редактировалось 1 раз.

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Яркость по времени

#2

Сообщение Fuji1604 » 19.11.2020{, 20:50}

На форуме гдето есть блок рассвет-закат, вроде так назывался
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#3

Сообщение hatul » 19.11.2020{, 20:56}

Fuji1604, Что то там слишком сложно. Мне бы попроще!

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Яркость по времени

#4

Сообщение Fuji1604 » 19.11.2020{, 21:01}

Ну тогда просто по времени, днем ярко, с 23ч до 7ч тускло
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#5

Сообщение hatul » 19.11.2020{, 21:20}

Fuji1604 писал(а):
19.11.2020{, 21:01}
днем ярко, с 23ч до 7ч тускло
Как!? Это как раз то, что я и не могу сообразить. Когда делал на МАХ7219,там есть вход "яркость". В нужное время задавал нужную яркость. А здесь нет такого входа.

aidar_i
Полковник
Сообщения: 3128
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Яркость по времени

#6

Сообщение aidar_i » 19.11.2020{, 21:41}

Удалил
Вложения
c31d446s-960.jpg
Последний раз редактировалось aidar_i 19.11.2020{, 22:12}, всего редактировалось 1 раз.

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#7

Сообщение hatul » 19.11.2020{, 22:04}

aidar_i, Ниче не понял! Где здесь FlProg ? Где 74НС595? Где яркость? Короче как в том анекдоте:"дяденька,вы с кем сейчас разговаривали!".

ivansidor012
Сержант
Сообщения: 279
Зарегистрирован: 10.09.2020{, 14:37}
Репутация: 43
Имя: Иван

Яркость по времени

#8

Сообщение ivansidor012 » 19.11.2020{, 22:34}

hatul, уровнями на digital 8-9-10 регулируешь яркость.

что непонятного? :)

aidar_i
Полковник
Сообщения: 3128
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Яркость по времени

#9

Сообщение aidar_i » 19.11.2020{, 22:39}

Выводами 8-10 попробуйте регулировать яркость шимом. Вам нужно только это, все остальное с 74НС595 остается как у Вас. FLProg у Вас в компе.
Есть и другой вариант, зажигаем сегменты на несколько циклов , потом тушим на несколько циклов, подбирая их можно изменять яркость.
Дойдут руки, может сделаю.

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#10

Сообщение hatul » 19.11.2020{, 22:46}

ivansidor012, Вообще то я имел в виду решение посредством FlProg ,без добавления каких либо компонентов. Поэтому и писал "фотодиод не предлагать". А здесь надо 4 транзистора,занять 4 ноги у ESP8266 ,которых и так впритык.Написать код,в котором я вообще не понимаю. И Вы еще спрашиваете "что непонятного".

Отправлено спустя 2 минуты 53 секунды:
aidar_i писал(а):
19.11.2020{, 22:39}
Есть и другой вариант, зажигаем сегменты на несколько циклов
Вот это похоже на то что я хотел. Ну я то такое сам не сделаю. Подождем пока появится время!

aidar_i
Полковник
Сообщения: 3128
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Яркость по времени

#11

Сообщение aidar_i » 19.11.2020{, 22:58}

Выкладываю скетч часов с термометром от andycat (arduino.ru) , может кто нибудь обработает (у меня пока со временем туговато). Там есть управление яркостью, функция showLedBuf().

Код: Выделить всё

#include <RCSwitch.h>
#include <Wire.h>
#include <RTClib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define PB2_HIGH sbi(PORTB,PB2);
#define PB2_LOW cbi(PORTB,PB2);
#define PB3_HIGH sbi(PORTB,PB3);
#define PB3_LOW cbi(PORTB,PB3);
#define PB4_HIGH sbi(PORTB,PB4);
#define PB4_LOW cbi(PORTB,PB4);

#define RX_PIN 2 // green
// GND blue +5V yellow

#define DS_TPN 8 // DS18B20 grey
// GND black +5V white

OneWire oneWire(DS_TPN);
DallasTemperature sensors(&oneWire);

#define FOTORES A1 // grey
// GND yellow +5V maroon

#define RTC_SDA A4 // - red
#define RTC_SCL A5 // - black
// GND white +5V grey

RTC_DS1307 RTC;

#define LED_SCLK 10 // - blue PB2
#define LED_RCLK 11 // - green PB3
#define LED_DIO 12 // - maroon PB4
// GND yellow +5V orange

#define CYCLE_GET_TIME 60
#define CYCLE_SHOW 4
#define CYCLE_GET_TEMP 243

#define BMP_SCK 4 // - green
#define BMP_MISO 5 // - yellow
#define BMP_MOSI 6 // - orange
#define BMP_CS 7 // - red
// GND blue +5V maroon

//Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

byte LED_0F[33] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xC2, 0x89, 0xF9, 0xF1, 0xC3, 0xA9, 0xC0, 0x8C, 0x98, 0x92, 0xC1, 0x91, 0xFE, 0xBF, 0xFF, 0x9C, 0xAB};
// 0123456789AbCdEFGHIJLnOPqSUY_- (null) (degree) (mm)
byte LED_NU[8] = {16, 32, 64, 128, 1, 2, 4, 8};
byte LED_BUF[8] = {30, 30, 30, 30, 30, 30, 30, 30};
byte LED_PWM = 3; // level light 7 = MAX 0 = MIN

byte dd = 99; // day
byte mm = 99; // month
byte yh = 99; // high year
byte yl = 99; // low year
byte ho = 99; // hour
byte mi = 99; // minute
float tt = 99; // temp
float pr = 99; // pressure
unsigned long lu = 0; // last time get street temp
byte streettemp = 99; // street temp 0..60
word mas_str_temp[10];
byte med_str_pos = 0;
byte med_str_cnt = 0;
boolean minus_str_temp = false;

unsigned long timerSec = 0;
byte timerGetTime = 37;
byte timerShow = 0;
byte timerGetTemp = 242;
byte flShow = 0; // 0 time and temp 1 date 2 street temp 3 press

RCSwitch mySwitch = RCSwitch();

void setup() {
  // put your setup code here, to run once:
  // OFF unused pins
  pinMode(0, OUTPUT); digitalWrite(0, LOW);
  pinMode(1, OUTPUT); digitalWrite(1, LOW);
  pinMode(3, OUTPUT); digitalWrite(3, LOW);
  pinMode(10, OUTPUT); digitalWrite(10, LOW);
  pinMode(13, OUTPUT); digitalWrite(13, LOW);
  pinMode(A0, OUTPUT); digitalWrite(A0, LOW);
  pinMode(A2, OUTPUT); digitalWrite(A2, LOW);
  pinMode(A3, OUTPUT); digitalWrite(A3, LOW);
  pinMode(A6, OUTPUT); digitalWrite(A6, LOW);
  pinMode(A7, OUTPUT); digitalWrite(A7, LOW);
  //--
  pinMode(LED_SCLK, OUTPUT);
  pinMode(LED_RCLK, OUTPUT);
  pinMode(LED_DIO, OUTPUT);
  sensors.begin();
  Wire.begin();
  if (! RTC.begin()) {
    while (1);
  }
  if (! RTC.isrunning()) {
    // following line sets the RTC to the date & time this sketch was compiled
    // RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  //delay(2000);
  //RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  bmp.begin();
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin 2 // иницилизация.Используется вывод м/к с прерыванием под номером 0.
}

byte addPoint(byte inByte) {
  byte outByte = (inByte << 1);
  outByte = (outByte >> 1);
  return outByte;
}

void showLedBuf() {
  for (byte lp = 0; lp <= LED_PWM; ++lp) {
    for (byte i = 0; i <= 7; i++) {
      PB3_LOW;
      for (byte j = 0; j <= 7; j++) {
        if (bitRead(LED_BUF[i], (7 - j))) {
          PB4_HIGH;
        } else {
          PB4_LOW;
        }
        PB2_HIGH;
        PB2_LOW;
      }
      for (byte j = 0; j <= 7; j++) {
        if (bitRead(LED_NU[i], (7 - j))) {
          PB4_HIGH;
        } else {
          PB4_LOW;
        }
        PB2_HIGH;
        PB2_LOW;
      }
      PB3_HIGH;
    }
  }
  for (byte lp = 0; lp < (7 - LED_PWM); ++lp) {
    PB3_LOW;
    PB4_HIGH;
    for (byte j = 0; j <= 15; j++) {
      PB2_HIGH;
      PB2_LOW;
    }
    PB3_HIGH;
    delayMicroseconds(350);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  // receive street temp
  if (mySwitch.available()) {
    unsigned long receivedCode =  mySwitch.getReceivedValue();
    mySwitch.resetAvailable();
    if ((receivedCode >= 11500UL) && (receivedCode <= 14750UL)) {
      receivedCode -= 11500;
      if (((receivedCode >= 2000UL) && (receivedCode <= 2600UL)) || ((receivedCode >= 0UL) && (receivedCode <= 400UL))) {
        if ((receivedCode <= 400UL)) {
          receivedCode = 2000UL - receivedCode;
        }
        lu = millis();
        // correct temp
        if (receivedCode <= 1900UL) {
          receivedCode -= 12UL; // 1.2 degree
        } else {
          if (receivedCode <= 1950UL) {
            receivedCode -= 8UL; // 0.8 degree
          }
          else {
            if (receivedCode <= 1999UL) {
              receivedCode -= 5UL; // 0.5 degree
            }
          }
        }
        // --
        mas_str_temp[med_str_pos] = (word)(receivedCode);
        if ((++med_str_pos) >= 10) {
          med_str_pos = 0;
        }
        if ((++med_str_cnt) >= 10) {
          med_str_cnt = 10;
        }
        word sum_temp = 0;
        for (int i = 0; i < med_str_cnt; ++i) {
          sum_temp += mas_str_temp[i];
        }
        sum_temp /= med_str_cnt;
        if (sum_temp < 2000) {
          minus_str_temp = true;
          sum_temp = 2000 - sum_temp;
        } else {
          minus_str_temp = false;
          sum_temp -= 2000;
        }
        sum_temp /= 10;
        streettemp = (byte)(sum_temp);
      }
    }
  }
  if ((millis() - timerSec) >= 1000UL) {
    timerSec = millis();
    //++timerGetTime; ++timerShow; ++timerGetTemp;
    if ((++timerGetTime) >= CYCLE_GET_TIME) {
      timerGetTime = 0;
      // get time and date
      DateTime now = RTC.now();
      dd = now.day();
      mm = now.month();
      yh = (now.year()) / 100;
      yl = (now.year()) % 100;
      ho = now.hour();
      mi = now.minute();
    }
    if ((++timerShow) >= CYCLE_SHOW) {
      timerShow = 0;
      switch (flShow) {
        case 1 : {
            // show date
            if ((dd >= 1) && (dd <= 31)) {
              if (dd < 10) {
                LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[(dd % 10)];
              } else {
                LED_BUF[0] = LED_0F[(dd / 10)]; LED_BUF[1] = LED_0F[(dd % 10)];
              }
            } else {
              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30];
            }
            LED_BUF[1] = addPoint(LED_BUF[1]);
            if ((mm >= 1) && (mm <= 12)) {
              if (mm < 10) {
                LED_BUF[2] = LED_0F[0]; LED_BUF[3] = LED_0F[(mm % 10)];
              } else {
                LED_BUF[2] = LED_0F[(mm / 10)]; LED_BUF[3] = LED_0F[(mm % 10)];
              }
            } else {
              LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];
            }
            LED_BUF[3] = addPoint(LED_BUF[3]);
            if ((yh >= 20) && (yh <= 29) && (yl >= 00) && (yl <= 99)) {
              LED_BUF[4] = LED_0F[(yh / 10)]; LED_BUF[5] = LED_0F[(yh % 10)];
              if (yl < 10) {
                LED_BUF[6] = LED_0F[0]; LED_BUF[7] = LED_0F[(yl % 10)];
              } else {
                LED_BUF[6] = LED_0F[(yl / 10)]; LED_BUF[7] = LED_0F[(yl % 10)];
              }
            } else {
              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];
            }
            ++flShow;
            break;
          }
        case 2 : {
            unsigned long cplu = timerSec - lu;
            if (((cplu) <= 10800000UL) && (streettemp < 99)) { // MAX 3 hour
              LED_BUF[3] = LED_0F[31];
              LED_BUF[4] = LED_0F[30];
              LED_BUF[5] = LED_0F[30];
              LED_BUF[6] = LED_0F[30];
              LED_BUF[7] = LED_0F[30];
              if (minus_str_temp) {
                LED_BUF[0] = LED_0F[29];
              } else {
                LED_BUF[0] = LED_0F[30];
              }
              if (streettemp < 10) {
                LED_BUF[1] = LED_0F[30]; LED_BUF[2] = LED_0F[(streettemp % 10)];
              } else {
                LED_BUF[1] = LED_0F[(streettemp / 10)]; LED_BUF[2] = LED_0F[(streettemp % 10)];
              }
              ++flShow;
              // culculate and show delay last data from device
              unsigned long j = cplu / 600000UL; // 1 point = 10 sec (10000UL). if need 10 minute = 600000UL
              j = constrain(j, 0UL, 8UL);
              for (unsigned long i = 1UL; i <= j; ++i) {
                LED_BUF[8 - i] = addPoint(LED_BUF[8 - i]);
              }
              // -
              break;
            } else {
              ++flShow;
            }
            // show street temp
          }
        case 3 : {
            // show press
            if ((pr >= 600) && (pr <= 900)) {
              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30]; LED_BUF[5] = LED_0F[30];  LED_BUF[6] = LED_0F[32]; LED_BUF[7] = LED_0F[32];
              int hp = int(pr);
              LED_BUF[2] = LED_0F[(hp / 100)];
              byte pd = hp % 100;
              LED_BUF[3] = LED_0F[(pd / 10)]; LED_BUF[4] = LED_0F[(pd % 10)];
              flShow = 0;
              break;
            } else {
              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30]; LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];
              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];
              flShow = 0;
            }
          }
        default : {
            // show time and temp
            if ((ho >= 0) && (ho <= 23)) {
              if (ho < 10) {
                LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[(ho % 10)];
              } else {
                LED_BUF[0] = LED_0F[(ho / 10)]; LED_BUF[1] = LED_0F[(ho % 10)];
              }
            } else {
              LED_BUF[0] = LED_0F[30]; LED_BUF[1] = LED_0F[30];
            }
            LED_BUF[1] = addPoint(LED_BUF[1]);
            if ((mi >= 0) && (mi <= 59)) {
              if (mi < 10) {
                LED_BUF[2] = LED_0F[0]; LED_BUF[3] = LED_0F[(mi % 10)];
              } else {
                LED_BUF[2] = LED_0F[(mi / 10)]; LED_BUF[3] = LED_0F[(mi % 10)];
              }
            } else {
              LED_BUF[2] = LED_0F[30]; LED_BUF[3] = LED_0F[30];
            }
            // show temp
            if ((tt >= (-30)) && (tt <= 40)) {
              byte ta;
              if (tt < 0) {
                LED_BUF[4] = LED_0F[29]; ta = abs(tt);
              } else {
                LED_BUF[4] = LED_0F[30]; ta = tt;
              }
              if (ta < 10) {
                LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[(ta % 10)];
              } else {
                LED_BUF[5] = LED_0F[(ta / 10)]; LED_BUF[6] = LED_0F[(ta % 10)];
              }
              LED_BUF[7] = LED_0F[31];
            } else {
              LED_BUF[4] = LED_0F[30]; LED_BUF[5] = LED_0F[30]; LED_BUF[6] = LED_0F[30]; LED_BUF[7] = LED_0F[30];
            }
            ++flShow;
          }
      }
    }
    if ((++timerGetTemp) >= CYCLE_GET_TEMP) {
      timerGetTemp = 0;
      // get temp and bar
      sensors.requestTemperatures(); tt = sensors.getTempCByIndex(0);
      if (tt == 0.00) {
        tt = 99;
      }
      // get bmp280
      pr = (bmp.readPressure() / 133.322);
    }
  }
  // set display light
  word ll = analogRead(FOTORES);
  LED_PWM = map(ll, 0, 1023, 0, 7);
  // show info
  showLedBuf();
  //--- end loop
}

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Яркость по времени

#12

Сообщение Dryundel » 20.11.2020{, 13:07}

Fuji1604 писал(а):
19.11.2020{, 20:50}
На форуме гдето есть блок рассвет-закат, вроде так назывался
hatul писал(а):
19.11.2020{, 20:56}
Fuji1604, Что то там слишком сложно. Мне бы попроще!
Где хоть он лежит? Ткните пальцем.
Уже не раз про него упоминали. Все хотел посмотреть как он сделан.

Есть вот такая идея:
Дневное освещение оно утром быстро нарастает потом в течении дня медленно прибывает и убывает, а вечером быстро спадает.
Так это же чистый синус! Точней его положительная полуволна.

Берем текущее суточное время в минутах (можно даже в секундах), переводим его в угол в градусах, считаем синус, отбрасываем отрицательную полуволну, конвертируем в ШИМ и ВУАЛЯ! Вот он максимально приближенный к реальности рассвет-закат. В 6 рассвет в 18 закат.

Накидал схемку. Работает! :smile9:
.
2020-11-20_121714.jpg
.
Но рассвет и закат не всегда в 6 и 18.
Поэтому вносим суммарную поправку на широту и дату. (При желании и ее можно разложить).
А именно: Смещаем наш синус относительно ноля по амплитуде и в отрицательной зоне оказывается уже большая или меньшая часть синуса. Соответственно и отрезается не ровно половина.

Ну короче вот так:
.
2020-11-20_121838.jpg
.
Теперь мы можем смещать рассвет и закат по времени одновременно от -6 часов до +6 часов (в минутах).
В соответствии с этим значением:
Рассвет будет позже. Закат будет раньше.
При 360 мин рассвета уже не будет - полярная ночь.
При -360 мин не состоится закат - полярный день. :)
.
Вот тестовый проект с обоими вариантами.
(Настраиваемая переменная только "Время смещения". Ну а текущее время в минутах подаем с часов.)
В тестовом проекте время генерируется просто счетчиком.

Как то так. :smile37:
Рассвет - закат.flp
(308.11 КБ) 42 скачивания

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Яркость по времени

#13

Сообщение Labu559 » 20.11.2020{, 13:54}

Dryundel писал(а):
20.11.2020{, 13:07}
Где хоть он лежит? Ткните пальцем.
Автор набора блоков - ув. rw6cm, (модератор Владимир), название- "Sun location". К сожалению не тестировал/применял, потому комментировать не могу.
По собственной квартире могу сказать, что свет в комнате во многом зависит от направления куда смотрит окно. К примеру кухня на восток (максимум света до 11 часов, а спальня на запад( максимум около 17 часов летом, зимой- включаю свет даже днём в облачную погоду).. Это как пора года в зависимости от наклона оси планеты (перпендекулярности к поверхности солнечных лучей). К тому-же существенная разница при солнечной/пасмурной погоде особенно ощутимая в "глухих" коридорах или недостаточной площадью (светлостью) оконных проемов. Для себя давно решил: ставлю датчик освещённости (или фотосопротивление, несколько отчичается чувствительность от диапазона световосприятия глазом) и включение дисплея (особенно нужно для ретро ВЛИ и ГРИ) по движению "тела" :) (доплеровский или ИК).
Нашёл источник: "Геопозиционирование на ардуино.".
Удачи!

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Яркость по времени

#14

Сообщение Dryundel » 20.11.2020{, 15:19}

Labu559 писал(а):
20.11.2020{, 13:54}
Автор набора блоков - ув. rw6cm (модератор Владимир), название- "Sun location". К сожалению не тестировал/применял, потому комментировать не могу.
Ух как там все серьезно.
Но функция в блоке красивая. Не дилетант писал.
Пара страниц сложнейших расчетов и все на флоат.
Такая штука вероятно грузит контроллер не по детски.

А всего то:
rw6cm писал(а):
07.11.2016{, 12:51}
На рассвете светодиод на пате arduino включится,
на закате выключится.
Рассчитывает только конкретную точку времени.
Ни тебе интенсивности освещения, ни возможности коррекции. (Это пр функцию. К автору блока претензий нет) :)
Надо будет сделать на синусе легонький ПБ и с более широким функционалом.

aidar_i
Полковник
Сообщения: 3128
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Яркость по времени

#15

Сообщение aidar_i » 21.11.2020{, 22:19}

В динамическом режиме здесь.
В Вашем случае ножки D соединены или в плюс или в минус, наверное, шимом через транзистор лучше будет.
У Вас отдельные сегменты? или 4х разрядный. Если смотреть проект - отдельные. Попробуйте динамический вариант.

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Яркость по времени

#16

Сообщение Labu559 » 22.11.2020{, 02:47}

hatul писал(а):
19.11.2020{, 20:49}
Собрал часы на МАХ7219. Днем не хватало яркости. Переделал на сдвиговые регистры 74НС595 .
...Как в данном проекте менять яркость по времени? Что добавить? Фотодиод не предлагать.
... я имел в виду решение посредством FlProg ,без добавления каких либо компонентов.
Разрешите немного прокомментировать для полной ясности. Я помню Вашу тему про МАХ7219. Вы применили светодиодную ленту, в результате каждый сегмент представлял собой три последовательно соединённых светодиода. Учитывая, что падение напряжения на каждом (красном ?) светодиоде 1,6...2,5В и соответственно для 3 последовательных 5В оказалось очень впритык. Для динамической индикации на МАХ7219 для штатного блока ( в котором отсутствует опция выбора колличества разрядов) время свечения одного разряда была равна 1/8 и естественно яркости не хватало. Т.о.динамическая индикация исключается как таковая вполне обоснованно.
В этом проекте ув. ТС применил статическую индикацию- как единственно возможный выход исходя из...
Наиболее простой (для "без добавления каких либо компонентов") , IMHO, это "ШИМить" напрямую сдвиговые регистры 74НС595 через вывод ОЕ, который в вольном переводе описывается как: "...OE- вход переводящий выходы из высокоимпедансного состояния в рабочее. При логической единице на этом входе, выходы 74HC595 будут отключены от остальной части схемы. Это нужно например для того чтобы другая микросхема могла управлять этими сигналами. Если нужно включить в рабочее состояние микросхему, подайте логический ноль на этот вход. А если не нужно переводить выходы в высокоимпедансное состояние – можно заземлить этот вывод...". Одним выходом МК всё-же прийдётся пожертвовать. :)
Как-то так.Показать
Z-state595.png
Удачи!

sergii2012
Сержант
Сообщения: 129
Зарегистрирован: 07.01.2019{, 16:02}
Репутация: 4
Имя: Сергей

Яркость по времени

#17

Сообщение sergii2012 » 22.11.2020{, 19:14}


hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Яркость по времени

#18

Сообщение hatul » 22.11.2020{, 22:11}

aidar_i, Labu559, Спасибо за подсказки.Часы уже унес на работу,там яркость не особо нужна.Ночью там никто не спит,так что пусть светят на полную. А вот для дома изменение яркости обязательно.Когда начну делать для дома займусь этим вопросом основательно.
P.S.
Labu559 писал(а):
22.11.2020{, 02:47}
каждый сегмент представлял собой три последовательно соединённых светодиода.
У меня по два красных светодиода. Хотя,по большому счету, это не особо важно.

Ответить

Вернуться в «Помогите, а то я "нимагу"»