ПРОЕКТ ЭЛЕКТРОННОГО УСТРОЙСТВА «ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ» - Студенческий научный форум

XIII Международная студенческая научная конференция Студенческий научный форум - 2021

ПРОЕКТ ЭЛЕКТРОННОГО УСТРОЙСТВА «ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ»

Чундерова К.А. 1, Гребнева Д.М. 1
1Филиал РГППУ в г. Нижнем Тагиле
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Цель разработки проекта – учебная (исследование понятия «время», а также изучение методов и устройств измерения времени).

Описание комплекса технических средств

Arduino UNO представляет из себя отладочный комплекс, выполненный на базе микроконтроллера ATMega328. Проще говоря – это обычная плата, которая является «посредником» между пользователем и микроконтроллером, позволяя удобно цепляться к его ножкам и загружать в него прошивку прямо из среды программирования. Arduino Uno – миниатюрный контролер, особенностью которого является наличие 14 цифровых и 6 аналоговых выходов (одновременно и входов), USB портов, генератора кварцевого типа, силового разъема, кнопки Reset, разъема ICSP. (Модель в TinkerCAD — Arduino UNO R3)

В данном устройстве используется только один датчик — потенциометр — регулируемый вручную переменный резистор с 3 выводами. Два его вывода подключены к обоим концам резистивного элемента, а третий вывод (движок) подключен к скользящему контакту, который перемещается по резистивному элементу. Положение движка определяет выходное напряжение потенциометра. Потенциометр по своей сути функционирует в качестве переменного делителя напряжения. Резистивный элемент можно представить как два последовательно соединенных резистора, где положение движка определяет соотношение сопротивления первого резистора ко второму резистору. Потенциометр также широко известен как переменный резистор. Наиболее распространенной формой является однооборотный переменный резистор.

Описание программного обеспечения

LiquidCrystal.h — стандартная библиотека, установленная в Arduino IDE. Предназначена для управления жидкокристаллическими дисплеями LCD на основе чипсета Hitachi HD44780 (или совместимого), который имеется на большинстве текстовых ЖК-дисплеев. Библиотека работает в 4- или 8-битном режиме (т.е. используя 4 или 8 строк данных в дополнение к rs, enable и, необязательно, строки управления rw).

pinMode(pin, mode) — функция, конфигурирующая режим работы указанного вывода: как вход либо как выход. Pin: номер вывода, режим работы которого будет конфигурироваться; mode: принимает значения INPUT, OUTPUT или INPUT_PULLUP.

millis() — функция, возвращающая количество миллисекунд, прошедших с момента старта программы Arduino. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней.

Функция loop() — это то место, куда мы должны поместить команды, которые будут выполняться все время, пока включена плата Arduino. Начав выполнение с первой команды, микроконтроллер дойдёт до конца и сразу же перепрыгнет в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату будет подано электричество). Наиболее уместный перевод английского слова loop в данном случае — это цикл (петля).

Функция setup() вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускается только один раз, после каждой подачи питания или сброса платы Arduino.

print() — вывод текста, символов или цифр на экран дисплея.

setCursor(col,row) — установка курсора в позицию, указанную номером колонки и строки.

begin(cols,rows,[char_size]) — инициализация дисплея с указанием количества столбцов, строк и размера символа.

backlight() — включение подсветки дисплея.

analogWrite (pin, value)данная функция никак не связана с аналоговыми пинами, она предназначена для выдачи ШИМ-сигнала, соответственно это возможно только с пинов, которые способны выдать такой сигнал, на плате Arduino Uno это пины: 3, 5, 6, 9, 10, 11. Pin – номер пина, способный выдавать ШИМ-сигнал; value – значение от 0 до 255.

digitalRead (pin)— функция считывает значения с заданного пина и выдаёт в программу два значения: HIGH или LOW, 1 или 0, true или false. Данная функция используется для считывания значений с кнопок и датчиков.

Полная программа управления электронным устройством

#include "LiquidCrystal.h"

const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int cs=9;

const int contrast = 100;

int h=12;

int m;

int s;

int flag=1;

int button1;

int button2;

int hs=0;

int ms=1;

const int Time_light=150;

int bl_TO=Time_light;

int bl=10;

const int backlight=120;

static uint32_t last_time, now = 0;

void setup()

{

lcd.begin(16,2);

pinMode(hs,INPUT_PULLUP);

pinMode(ms,INPUT_PULLUP);

analogWrite(cs,contrast);

analogWrite(bl,backlight);

now=millis();

}

void loop()

{

lcd.begin(16,2);

lcd.setCursor(0,0);

lcd.print("Time:");

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(flag==0) lcd.print(" AM");

if(flag==1) lcd.print(" PM");

lcd.setCursor(0,1);// для Line 2

lcd.print("HAVE A NICE DAY!");

for ( int i=0 ;i<5 ;i++)

{

while ((now-last_time)<55)

{

now=millis();

}

last_time=now;

button1=digitalRead(hs);

button2=digitalRead(ms);

bl_TO--;

if(bl_TO==0)

{

analogWrite(bl,0);

bl_TO++;

}

if(((button1==0)|(button2==0)) & (bl_TO==1))

{

bl_TO=Time_light;

analogWrite(bl,backlight);

while ((button1==0)|(button2==0))

{

button1=digitalRead(hs);// Read Buttons

button2=digitalRead(ms);

}

}

else

{

if(button1==0)

{

h=h+1;

bl_TO=Time_light;

analogWrite(bl,backlight);

}

if(button2==0)

{

s=0;

m=m+1;

bl_TO=Time_light;

analogWrite(bl,backlight);

}

if(s==60)

{

s=0;

m=m+1;

}

if(m==60)

{

m=0;

h=h+1;

}

if(h==24)

{

h=1;

flag=flag+1;

}

if(flag==2)

{

flag=0;

}

if((button1==0)|(button2==0))

{

lcd.setCursor(0,0);

lcd.print("Time ");

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(flag==0) lcd.print(" AM");

if(flag==1) lcd.print(" PM");

lcd.setCursor(0,1);// для Line 2

lcd.print("HAVE A NICE DAY!");

}

}

}

s=s+1;

if(s==60)

{

s=0;

m=m+1;

}

if(m==60)

{

m=0;

h=h+1;

}

if(h==24)

{

h=1;

flag=flag+1;

if(flag==2)flag=0;

}

}

Просмотров работы: 6