В данном проекте будет разработаны часы-будильник на микроконтроллере Arduino Nano, написана программа разработаны структурная и блок схемы.
1 Обзор аналогов часов, выполненных на микроконтроллерах.
Существуют различные аналоги часов на других микроконтроллерах.
1.1 Часы на Arduino Uno c подключением по I2C
· Arduino х 1шт.
· RTC модуль Trema на базе чипа DS1307.
· LCD дисплей LCD1602 IIC/I2C.
· Trema Shield.
· Trema-модуль i2C Hub.
· Trema-модуль кнопка c проводами.
· Шлейф «мама-мама» для шины.
1.2 Часы на микроконтроллере PIC16F628A
Основа микроконтроллер PIC16F628A, кроме него часы содержат несколько простых и дешевых элементов, информация выводится на 4-х разрядный (часовой) светодиодный индикатор.
Схема питается от сети, а также имеет резервное питание. Кнопки кн1 и кн2 служат для коррекции времени — часов и минут соответственно. Часы имеют 24 часовой формат отображения. В 1-м разряде часов сделано гашение незначащего нуля. Точность хода часов целиком зависит от частоты кварцевого резонатора. Часы собраны на 2-х печатных платах, пристыкованных одна к одной под углом 90 градусов. На одной плате размещен целиком индикатор, а все остальное на другой. Конструкция кнопок может быть любой. Для питания от сети использован китайский БП-адаптер.
1.3 Часы на светодиодной матрице.
Часы построены на микроконтроллере AtMega16A.Отсчет времени производится с помощью асинхронного тайме – Т2. Ход часов сохраняется и при пропадании питания. В это время большая часть схемы обесточивается, а контроллер питается от батарейки, аккумулятора [3]. В обычном режиме на экране отображается время в формате часы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. В обычном режиме на экране отображается время в формате часы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. Бегущей строкой отображается день недели, дата, год. Бегущая строка настраиваемая, т.е. можно включить/выключить отображение любого из элементов. (день недели, дата, год). При выключении всех элементов, бегущая строка не запускается, и часы постоянно отображают текущее время.
Все приведенные схемы имеют общие недостатки:
1) Сложность кода, что требует хорошее знание языка программирования;
2) Большое количество элементов, что усложняет схему и приводит к удорожанию устройства;
Часы моей разработки
легки в своем исполнении. Для их изготовления не требуются большое количество элементов и хорошее знание языка программирования.
2 Разработка структурной схемы
Основным структурным звеном является плата Arduino Nano. Микроконтроллер считывает показания с кнопок настройки времени, и включения будильника часов. Обработав информацию микроконтроллер выводит время на дисплей LCD1602, если время совпадает с установленным временем будильника, то происходит звуковое оповещение через динамик
3 Разработка принципиальной схемы
Принципиальная электрическая схема выполнена в программе sPlan 7
sPlan 7 - графический редактор с элементами, позволяющими легко рисовать электрические схемы. Очень простой и интуитивно понятный интерфейс. Может использоваться как текстовый редактор, легко составляются таблицы. Для рисования электрических схем имеется несколько библиотек, элементы которых могут легко редактироваться и добавляться, есть функция автоматической нумерации элементов, привязка линий к выводам элементов, группировка элементов, привязка к сетке
3.1 Выбор микроконтроллера. Arduino Nano
Arduino Nano - это полнофункциональное миниатюрное устройство на базе микроконтроллера ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), адаптированное для использования с макетными платами. Миниатюрный модуль на основе популярного микроконтроллера ATMEGA328P. Оптимально подходит для макетирования с применением беспаечных макетных плат, ибо все контакты выведены на две линейки по краям платы, шаг выводов 2,54мм, расстояние между линейками 15мм. Встроенный bootloader и преобразователь USB <> COM на базе микросхемы CH340, позволяет обновлять прошивку без использования программатора, единственным нажатием кнопки на компьютере. Однако, при необходимости, может быть "прошит" и любым стандартным программатором со стандартным 6-выводным интерфейсом ISP. Nano 3.0 (CH340G) является аналогом распространенных модулей Nano 3.0, и отличается от них лишь переработанной схемой преобразователя USB <> COM, интегрированного на плату. Вместо микросхемы FT232RL производства FTDI, в этой версии модуля применена микросхема CH340G, производства WCH. С точки зрения использования, модуль ничем не отличается от распространенных модулей Nano 3.0, т.к. преобразователь USB<>COM, с точки зрения программирования прозрачен, и всего-лишь обеспечивает соединение с компьютером посредством добавления ещё одного COM-порта.
3.2 Дисплей LCD1602
LCD 1602 представляет собой электронный модуль, основанный на драйвере HD44780 от Hitachi. LCD1602 имеет 16 контактов и может работать в 4-битном режиме (с использованием только 4 линии данных) или 8-битном режиме (с использованием всех 8 строк данных), так же можно использовать интерфейс I2C.
LCD 1602 построен на технологии жидких кристаллов. При проектировании электронные устройства, требуется недорогое устройство для отображения информации и второй не менее важный фактор наличии готовых библиотек для Arduino. Из всех доступных LCD дисплеев на рынке, наиболее часто используемой является LCD 1602, который может отображать символы в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей.
Характеристики
- Напряжение питания: 5 В
- Размер дисплея: 2.6 дюйма
- Тип дисплея: 2 строки по 16 символов
- Цвет подсветки: зелёный
- Цвет символов: черный
- Габаритные: 80мм x 35мм x 11мм
3.3 Кнопки без фиксации
- 3 штуки. Габариты: 6мм x 6мм x 4.3мм
3.4 Динамик 1W 8Ω
Характеристики:
- Тип электрический (движущаяся катушка)
- Номинальная мощность 1 (Вт)
- Номинальный импеданс 8 (Ω)
- Частотный отклик 200-2000 (кГц)
- Направленная Всенаправленный
- Чувствительность 93 (дБ / Вт)
- Коэффициент шума 89 (дБ)
- Гармонические искажения 0.01 (TMD%)
4 Программная часть,
Часы данной курсовой работы выполнены на библиотечной функции MsTimer2, которая позволяет получить точные интервалы времени. Библиотека предназначена для конфигурирования аппаратного прерывания от timer2 микроконтроллера. Она имеет всего три функции:
MsTimer2::set(unsigned long ms, void (*f)()) эта функция устанавливает время периода прерывания в мс. С таким периодом будет вызываться обработчик прерывания f. Он должен быть объявлен как void (не возвращает ничего) и не иметь аргументов. * f – это указатель на функцию. Вместо него надо написать имя функции .
MsTimer2::start() функция разрешает прерывания от таймера.
MsTimer2::stop() функция запрещает прерывания от таймера.
4.1 Алгоритм настройки и включения будильника
4.2 Код программы
#include <EEPROM.h> // подключение библиотеки EEPROM
#include <LiquidCrystal.h> // подключение библиотеки LCD1602
#include <MsTimer2.h> // подключение библиотеки MsTimer2
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
unsigned long time0;
byte bud=0, bud0=1, s, m, h, m1, h1, kn, kn1, kn2, korr; // переменные
void setup(){
// чтение энергонезависимой памяти
m=EEPROM.read (9);
h=EEPROM.read (10);
m1=EEPROM.read (11);
h1=EEPROM.read (12);
lcd.begin(16, 2);// LCD 16X2
MsTimer2::set(1000, to_Timer); // задаем период 1с
MsTimer2::start(); // старт таймера
pinMode(6,INPUT_PULLUP); // кнопка коррекции
pinMode(5,INPUT_PULLUP); // кнопка +
pinMode(4,INPUT_PULLUP); // кнопка -
pinMode(3,OUTPUT); // выход для пъезоизлучателя
}
void to_Timer(){ //функция таймера
++s; // отсчет 1 с
}
void loop(){
// читаем состояние входов
kn=digitalRead(6);
kn1=digitalRead(5);
kn2=digitalRead(4);
// коррекция времени, опрос кнопок
if(kn==LOW){
korr++;
if(korr>=6){
korr=0;
}
}
if(kn1==LOW && korr==1){
m++;
}
if(kn1==LOW && korr==2){
h++;
}
if(kn2==LOW && korr==1){
m--;
if(m>60){
m=0;
}
}
if(kn2==LOW && korr==2){
h--;
}
if(kn1==LOW && korr==3){
m1++;
if(m1>59){ // прибавление минут
m1=0;
h1++; //прибавление часов
}
}
if(kn1==LOW && korr==4){ // настройка часа
h1++;
if(h1>23){
h1=0;
}
}
// коррекция будильника
if(kn2==LOW && korr==3){ // настройка минут будильника
m1--;
if(m1>60){
m1=0;
}
}
if(kn2==LOW && korr==4){ // настройка часов будильника
h1--;
if(h1>24){
h1=0;
}
}
// активация и деактивация будильника
if(kn1==LOW && korr==5){ // активация будильника
bud0=1;
}
if(kn2==LOW && korr==5){ // деактивация будильника
bud0=0; }
// Отсчет времени часов
if(s > 59){
s = 0;
++m; // отсчет 1 мин
}
if(m > 59){
m = 0;
++h; // отсчет 1 час
}
if(h > 23){
h = 0;
}
// включение будильника
if(m!=m1){
bud=0;
};
// запуск будильника
if(m==m1 && h==h1 && bud==0 && bud0 == 1){
if(kn1==LOW || kn2==LOW){
bud=0;
}
for(int i=0;i<200;i++){ // пищалка
digitalWrite(3,HIGH);
delay(1);
digitalWrite(3,LOW);
delay(1);
}
}
EEPROM.write(9,m); // запись в энергонезависимую память
EEPROM.write(10,h);
EEPROM.write(11,m1);
EEPROM.write(12,h1);
// вывод информации на экран 1 строка
lcd.setCursor(1,0);
if(h < 10){
lcd.print("0");
}
lcd.print(h); // часы
lcd.print(":");
if(m < 10 ){
lcd.print("0");
}
lcd.print(m); // минуты
lcd.print(":");
if(s < 10){
lcd.print("0");
}
lcd.print(s);// секунды
if(korr==1){
lcd.print(" kor_m");
}
if(korr==2){
lcd.print(" kor_h");
}
// вывод информации на экран 2 строка
lcd.setCursor(1,1);
if(h1 < 10){
lcd.print("0");
}
lcd.print(h1); // часы
lcd.print(":");
if(m1 < 10 ){
lcd.print("0");
}
lcd.print(m1); // минуты
if( bud0==1){
lcd.print(" On ");
}
if( bud0==0){
lcd.print(" Off ");
}
if( bud0==1 && korr==5){
lcd.print(" kor");
}
if( bud0==0 && korr==5){
lcd.print(" kor ");
}
if(korr==3){
lcd.print("kor_m");
}
if(korr==4){
lcd.print("kor_h");
}
delay(200);
}
5 Моделирование устройства
Моделирование выполнено в программе Proteus 7
Proteus Design Suite — пакет программ для автоматизированного проектирования (САПР) электронных схем. Разработка компании Labcenter Electronics.
Мощнейшая система автоматизированного проектирования, позволяющая виртуально смоделировать работу огромного количества аналоговых и цифровых устройств.
Программный пакет Proteus VSM позволяет собрать схему любого электронного устройства и симулировать его работу, выявляя ошибки, допущенные на стадии проектирования и трассировки.[10] Программа состоит из двух модулей. ISIS – редактор электронных схем с последующей имитацией их работы. ARES – редактор печатных плат, оснащенный автотрассировщиком Electra, встроенным редактором библиотек и автоматической системой размещения компонентов на плате. Кроме этого ARES может создать трехмерную модель печатной платы.
Proteus VSM включает в себя более 6000 электронных компонентов со всеми справочными данными, а также демонстрационные ознакомительные проекты.
Заключение
В данном работе были разработаны часы-будильник на микроконтроллере Arduino Nano, написана программа на языке C++, разработаны структурная и блок схемы. Представленные часы-будильник обладает малым количеством экономичных элементов, что делает проект выгодным в экономическом плане, а также, легкость кода позволяет разобраться неопытному пользователю и приобрести основные навыки программирования микроконтроллеров.