Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2014, 15:14   #1
pawel
Junior Member
 
Регистрация: 28.11.2013
Сообщений: 4
Вес репутации: 0
pawel is an unknown quantity at this point
По умолчанию

Сделал отображение NTP-времени посредством Arduino Nano, подключенного к USB-порту роутера под OpenWrt.
По крону раз в минуту посылаю строку со временем в порт, ардуиной получаю строку и отображаю на сегментных LED индикаторах.
Получились часы точного времени, нетребующие настройки. Воткнул в USB и работают

Схема подключения индикатора к Arduino - стандартна, типа такой:
(на номера пинов не смотреть, это первая попавшаяся картинка, смотрите пины указанные в скетче)


Скетч для Arduino:
PHP код:

byte segmentPin
[] = {3,4,5,6,7,8,9,2}; // пины сегментов A,B,C,D,E,F,G,DP
byte catodPin[] = {10,11,12,13}; // пины разрядов


int data 0;
int tmp 0;
long t;

void led (int n) {

  
byte segment[][7] = {
  {
1,1,1,1,1,1,0}, 
  {
0,1,1,0,0,0,0},
  {
1,1,0,1,1,0,1}, 
  {
1,1,1,1,0,0,1},
  {
0,1,1,0,0,1,1}, 
  {
1,0,1,1,0,1,1},
  {
1,0,1,1,1,1,1}, 
  {
1,1,1,0,0,0,0},
  {
1,1,1,1,1,1,1}, 
  {
1,1,1,1,0,1,1}
  };

  for (
int i=0i<7i++) digitalWrite (segmentPin[i], segment[n][i]);
}



void setup() {
  for (
int i=0i<8i++) pinMode(segmentPin[i], OUTPUT);
  for (
int i=0i<4i++) pinMode(catodPin[i], OUTPUT);
  
Serial.begin(9600);
  
millis();
}


void loop() {

  if (
Serial.available()) {
    
char ch Serial.read();
    
    switch(
ch) {
      case 
's'// начало передачи
        
tmp 0;
        break;
       case 
'e'// конец передачи
         
data tmp;
         break;
       default:
         
tmp =  tmp*10 ch-48// получаем байт
         
millis();
         break;
       
    }
  }
  
  if ((
millis()-t)<120000) { // если больше 120 сек нет данных - гасим экран
    
int k 1000;
    for (
int i 04i++) {
      
int j data%(10*k)/k;
      
/= 10;
      
led (j);
      
digitalWrite(segmentPin[7], ((== 1) and ((millis()%1000) > 500))); // мигаем точкой второго разряда
      
if (!((== 0) and (== 0))) { // '0' в первом разряде не отображаем
        
digitalWrite(catodPin[i], HIGH);
        
delay(3);
        
digitalWrite(catodPin[i], LOW);
      }
    }
  } 

На OpenWrt в кроне ежеминутно запускаю:

PHP код:
#!/bin/sh

if [ -/dev/ttyUSB0 ]
then
    stty 
-/dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl
    date 
+s%H%Me > /dev/ttyUSB0
fi 

Последний раз редактировалось pawel; 22.01.2014 в 18:52.
pawel вне форума   Ответить с цитированием
Старый 22.01.2014, 09:39   #2
addme
Junior Member
 
Регистрация: 22.01.2014
Сообщений: 1
Вес репутации: 0
addme is an unknown quantity at this point
По умолчанию Re: NTP Led Clock

Подсветку установил на плазму 50' , использовал светодиодные ленты RGB двойной плотности. Всего ушло 2м 60 см. Данная лента потребляет ток 800мА на один метр, так что БП от моего монитора Lilliput мне хватило для питания светодиодных лент. Расчет простой 2,6*0,8=2А при максимально открытых ключах.
addme вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:13. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика