Часы на Arduino. Паяем 74HC595N для управления LED. Часть 1
В данной
статье рассмотрю первый этап сборки
LED часов на Arduino. Весь процесс сборки
разделю на 4 этапа:
1. Паяем схему
управления 26 светодиодами. Подключение
к
Ардуинои тестирование.
2. Подключаем
к
Arduino семи сегментный индикатор, датчик
температуры и влажности.
3. Подключаем
к
Arduino модуль реального времени, семи
сегментный индикатор и Ir приемник.
Настраиваем время с помощью пульта ду.
4. Сборка
часов в корпус.
Доработка программы.
Сейчас
расскажу по порядку про сборку схемы
управления 26 светодиодами который будут
выводить время с точностью до 1 минуты.
Вот так
выгладит подключение к Arduino UNO 5 сдвиговых
регистров 74HC595N
и 26 светодиодов. Также подключил фото
резистор для управления яркостью
свечения светодиодов. А в дальнейшем и
управление яркостью семисегментного
индикатора.
Принципиальная
схем подключения к Arduino UNO 5 сдвиговых
регистров 74HC595N
и 26 светодиодов.
Чтобы проверить
работоспособность схемы написал тестовый
скетч в среде Arduino IDE
int dataPin = 2; //Пин подключен к DS входу 74HC595
int latchPin = 3; //Пин подключен к ST_CP входу 74HC595
int clockPin = 4; //Пин подключен к SH_CP входу 74HC595
int pwmPin = 5; //Пин подключен к OE входу 74HC595 для управления ШИМ
int fr = 0; //и фоторезистора
byte path[9]= {
B00000000,
B00000001,
B00000010,
B00000100,
B00001000,
B00010000,
B00100000,
B01000000,
B10000000
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(pwmPin, OUTPUT);
}
void loop() {
for (int chas = 1; chas < 12; chas++) { // В переменной хранится позиция изменяемого бита
for (int min = 0; min < 60; min++) { // В переменной хранится позиция изменяемого бита
int photocell = analogRead(fr); // получаем данные фото резистора
int LED = map(photocell, 6, 680, 200, 10); /// приводим к нужному диапазону значений
analogWrite(pwmPin,LED); // Назначаем выходу ШИМ разные значения
int val = map(min, 0, 59, 0, 12); // приводим к 12 так как у нас не 60 а 12
digitalWrite(latchPin, LOW); // Открыли регистр
int x = min % 5; // x остаток от деления на 5
shiftOut(dataPin, clockPin, MSBFIRST, path[x]); // передаем последовательно на dataPin - в первом регистре значение B01001100
if (val < 9)
{
shiftOut(dataPin, clockPin, MSBFIRST, path[0]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
shiftOut(dataPin, clockPin, MSBFIRST, path[val]); // передаем последовательно на dataPin - в первом регистре значение B01001100
}
else if (val >= 9) // если минут больше 8*5 выводи на второй микросхеме
{
int val1 = val-8; //
shiftOut(dataPin, clockPin, MSBFIRST, path[val1]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
shiftOut(dataPin, clockPin, MSBFIRST, path[0]); // передаем последовательно на dataPin - в первом регистре значение B01001100
}
delay(200); // ждем
if (chas < 9)
{
shiftOut(dataPin, clockPin, MSBFIRST, path[0]); // передаем последовательно на dataPin - в первом регистре значение B01001100
shiftOut(dataPin, clockPin, MSBFIRST, path[chas]); // передаем последовательно на dataPin - в первом регистре значение B01001100
}
else if (chas >= 9) // если минут больше 8*5 выводи на второй микросхеме
{
int chas1 = chas-8; //
shiftOut(dataPin, clockPin, MSBFIRST, path[chas1]); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
shiftOut(dataPin, clockPin, MSBFIRST, path[0]); // передаем последовательно на dataPin - в первом регистре значение B01001100
}
digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы
}
}
}
Программа
не применима для работы часов. Но для
проверки работоспособности подключения
к Arduino UNO 5 сдвиговых регистров 74HC595N
и 26 светодиодам подойдет отлично.
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.