Теория

1)

Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.
Робот должен повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.
Робот должен заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.
2)

  1. рука робота
  2. фиксированное движение
  3. автоматическая электрическая лампочка,
  4. посудомойка,
  5. сам робот, изучающий языки.

3)

Манипулятор – это устройство или машина, управляемая человеком. Манипуляторы не роботы потому, что ими непосредственно управляет человек. Манипуляторы не способны работайте автономно. Информация, необходимая для работы манипуляторов, получается через человека органы чувств и эта информация обрабатываются в голове человека. Таким образом, манипуляторы просто приводы.

4)

Роботы используются в работе на многих промышленных предприятиях, чтобы сделать его быстрее и качественнее. Кроме того, роботы не так чувствительны к условиям труда, они также могут быть использованы на шумных, плохо освещенных рабочих местах и даже в других местах. В местах, где работа человека опасна для жизни из-за радиации и т.д.

5)

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

6)

Мехатроника – это специальность, сочетающая электронику, механику и информатику. Мехатроника занимается разработкой и созданием управляемых компьютером программных систем со специфическими функциями, которые так или иначе влияют на окружающую среду.Мехатроника работает в металлургической промышленности, машиностроении и приборостроении, а также в других отраслях, где используются устройства с компьютерным управлением.

Понятие электричества
Гидравлическая система


Под действием давления насоса, Паскаль
по трубам и клапанам разного сечения, 1/см²
из области высокого давления
в область низкого давления
переносится объём жидкости, м³
формируя поток определённой силы, м³/сек
который совершает полезную работу, Джоуль
передавая энергию турбине с некой скоростью. Ватт
Электрическая цепь


Под действием напряжения источника питания, U Вольт
по проводникам и компонентам разного сопротивления, R Ом
от высокого потенциала, + «плюс»
к низкому потенциалу – «минус»
переносится заряд, Q Кулон
формируя электрический ток определённой силы, I Ампер
который совершает полезную работу, W Джоуль
превращаясь в другую энергию с некой скоростью. P Ватт
Принципиальные схемы
Чтобы изобразить на бумаге как должна выглядеть та или иная электрическая цепь
используют схемы. Схемы бывают разных видов со своими преимуществами и недостатками.
Ниже приведена одна и та же электрическая схема, изображённая по-разному, в четырёх
вариациях.
Рисованная схема
Красиво, но громоздко и непрактично:


Принципиальная схема
Компактно и наглядно:


ƒ То, что соединено линией, в реальности должно быть соединено проводником
ƒ то, что не соединено линией, в реальности должно быть электрически изолировано
Принципиальная схема без явного источника питания
Источник питания зачастую не рисуют в явном виде, а используют отдельные символы для
плюса и минуса. Такая схема ещё более компактна.


Принципиальная схема с отдельными контурами
Часто для удобства одну цепь на схемах разбивают на отдельные части. В сложных проектах
так добиваются наглядности и делят зоны ответственности между несколькими инженерами разработчиками.


Основные законы электричества
Закон Ома
Закон Ома — главный закон электричества


Мощность
Мощность — мера скорости трансформации электрической энергии в другую форму


Зная закон Ома, можно заметить, что мощность можно рассчитать иначе:
Мир не идеален и часть электроэнергии непременно трансформируется в тепло. Из-за этого и
греются компьютеры, телефоны, телевизоры и другая электроника.
Короткое замыкание
Соединение плюса с минусом напрямую, по закону Ома, приводит к очень
большому току, следовательно, к очень большой мощности нагрева, что в
итоге приводит к возгоранию.
Это называется коротким замыканием или в просторечии просто «козой».
Никогда не допускайте его, ни при каких обстоятельствах!
Последовательное подключение


При последовательном подключении сила тока в каждом потребителе — одна и та же,
различается напряжение: в каждом компоненте падает его часть.
Параллельное подключение


При параллельном подключении напряжение вокруг каждого потребителя — одно и то же,
различается сила тока: каждый потребляет ток в соответствии с собственным
сопротивлением.
Управление электричеством
Если постоянно и монотонно трансформировать электроэнергию в другую форму, область
применения электричества будет сильно ограничена. Огромный мир разнообразных полезных
устройств открывается, если научиться контролировать и взаимодействовать с
электричеством. Для этого существует несколько способов.
Управление вручную


Автоматическое управление
Замыкать и размыкать цепь, измерять напряжение также можно, не вручную, а
автоматически, по заданному алгоритму при помощи запрограммированного
микроконтроллера.
Существуют «сырые» микроконтроллеры, выполненные в виде одной микросхемы. Они
дёшевы при массовом производстве, но их программирование и правильное подключение —
нетривиальная задача для новичка.
Чтобы решить эту проблему, существуют готовые платы или, как ещё говорят,
вычислительные платформы. Они делают процесс взаимодействия с микроконтроллером
очень простым. Типичным представителем этого семейства являются платы Arduino.


Быстрая сборка схем
Для надёжной сборки устройств создаются индивидуальные печатные платы. Если делать их
самостоятельно, это займёт много времени и заставит повозиться с химикатами и
паяльником. Индивидуальные платы с промышленным монтажом на заказ крайне дороги при
малом тираже.
Для быстрой сборки электрических схем без пайки и без проблем существует макетная
плата. Её же называют макетной доской, макеткой или breadboard’ом.
Принцип работы
Под слоем пластика скрываются медные пластины-рельсы, выложенные по незамысловатому
принципу:


Пример использования
Одну и ту же схему на макетной доске можно собрать множеством способов. Пример одной
из конфигураций разберём для такой схемы:


На макетной доске её физическое воплощение может быть сделано таким способом

Robootikasüsteemid
Selles peatükis uurime robootika- ja mehhatroonikasüsteemi, selle komponente ning ülesehitust.
Lisaks vaatame kontrolleri funktsionaalsust ja lihtsat digitaalsignaali.
Mehhatroonikasüsteem


Mehhatroonikasüsteem koosneb üldjuhul anduritest, täituritest ja neid juhtivast tarkvarast.
Selliseid süsteeme nimetatakse ka tarkadeks seadmeteks, kuna sõltuvalt juhtimise keerukusest
võivad seadmed teha keerukaid operatsioone, kohanduda keskkonnaga ja suhelda
ümbritsevaga. Mehhatroonika üheks levinuimaks rakendusalaks on robootika. Robootikaga seostub
igaühele mingi tark masin või humanoid (inimesesarnane robot), paljudele tööstusinimestele aga
manipulaator, keevitus- või värvimisrobot, jne. Siit nähtub, et inimestel on robootikast tegelikult väga
erinev arusaam ja robotiteks võib nimetada väga erinevaid seadmeid, erineva keerukuse ja
võimekusega, kuni nad vastavad eelmises peatükis kirjeldatud nõuetele (andur-kontroller-täitur).
Joonisel 1 on näidatud tinglik mehhatroonikasüsteem ja nooltega on näidatud süsteemi osade ja
väliskeskkonna omavaheline infovahetus ja selle suund.
Joonis 1. Mehhatroonikasüsteem. Andurid saavad väliskeskkonnast informatsiooni, mida kontroller
kasutab otsuste vastu võtmiseks ning väljendab seda läbi täiturite (näiteks liikumine).
Andurid hangivad erinevat tüüpi informatsiooni seadet ümbritsevast keskkonnast (näiteks
temperatuur, teiste objektide kaugus, raadiosignaalid) või ka seadmest endast (näiteks liikumiskiirus,
kiirendus, mootori pöörlemiskiirus) ning edastavad selle juhtimismoodulile. Juhtimismooduliks on
tavaliselt kontroller, kus täidetakse mingit algoritmi ehk programmi. Vastavalt programmile ja
anduritelt saadud informatioonile juhib kontroller täiturmehhanisme, milleks tihtilugu on
elektrimootorid. Täituriteks võivad olla ka solenoidid, tehislihased, pneumosilindrid jms. Üldjuhul
tekitavad täiturmehhanismid mingi liikumise, mõjutades seega väliskeskkonda. Näiteks võib tuua
lihtsustatud auto turvasüsteemi ja avariisituatsiooni (joonis 2)
18
Joonis 2. Auto turvapadi ja süsteemi skemaatiline mudel
Turvapadja süsteem on tüüpiline mehhatroonikasüsteem. See koosneb kolmest olulisest
osast: andur, kontroller ja täitur. Kiirendusandur registreerib järsu kiirenduse muutuse ja edastab
vastava signaali kontrollerile. Kontrolleri algoritm katkestab kõik muud auto juhttegevused ja saadab
püropadrunile, mis on ühendatud auto turvapadjaga, käivitussignaali. Püropadrun vallandab
turvapadja, täites selle kiirelt gaasiga ja kaitstes nii autojuhti löögi eest vastu rooli. Ongi andurkontroller-täitur ahel läbitud ja võime öelda, et tegemist on mehhatroonikaseadmega.
Mikrokontroller
Mehhatroonikasüsteemi üks olulisem komponent on mikrokontroller ehk lühidalt kontroller, kus
toimub info töötlemine ja käskude väljastamine täituritele. Kontrollerit võib tinglikult võrrelda ka
väikese arvutiga, kus kõik funktsioonid (protsessor, mälu, sisend-väljund muundurid jms) on
paigutatud ühele kiibile, ning seetõttu nimetatakse seda tihti ka mikrokontrolleriks. Loomulikult ei ole
sellisel juhul arvutusvõimsus võrreldav koduarvutiga, aga on täiesti piisav robootikasüsteemide
juhtimiseks. Mikrokontroller on väliselt sarnane tavalisele loogikalülitusele, kuid oluliseks erinevuseks
on, et tema väljundviike saab tarkvaraliselt programmeerida nii, et nad toimivad vastavalt soovile ja
kontrolleri võimalustele. See tähendab, et üks ja sama füüsiline viik võib olla sõltuvalt programmist
sisendiks (info või signaal liigub kontrolleri suunas) või väljundiks (kontroller saadab signaali või
infot). Sisendiga võib ühendada näiteks erinevaid andureid ja väljunditega erinevaid täitureid.
Signaalid on lihtsamal juhul loogilised digitaalsignaalid (0 või 1), kus 0 tähendab elektriliselt pinge
puudumist ja 1 üldjuhul toitepinget (näiteks 5V). Erinevate mikrokontrollerite kuju ja digitaalsignaali
graafiline esitus on toodud joonisel 3.
Joonis 3. Mikrokontrollerid erinevates korpustes (vasakul) ja lihtne digitaalsignaal: loogiline 0 ja
loogiline 1 (paremal)
19
Kontrollerite üheks eripäraks on nende väga lai valik. On lihtsaid ja odavaid, mis sobivad lihtsamate
protsesside juhtimiseks, ning on keerukaid ja võimsaid paljude sisend-väljund viikudega kontrollereid.
Lisaks on kontrollerid jaotatud funktsionaalsuse ja rakendusvaldkonna järgi. Näiteks autotööstuses
kasutatavatele kontrolleritele esitatakse erinevad nõudmised kui kodumasinates olevatele
kontrolleritele.
Mehhatroonikasüsteemide ja robotite juhtimiseks on oluline tunda mikrokontrollerite võimalusi ja
osata konkreetsele kontrollerile programmi koostada. Peatüki II tase tutvustabki kontrollerite põhilisi
võimalusi ja funktsioone.
Kordamisküsimused:
Mikrokontroller
Selles peatükis uurime mikrokontrolleri lihtsustatud arhitektuuri ja loetleme peamisi mikrokontrolleri
funktsioone. Lisaks vaatame mikrokontrolleriga seotavaid erinevaid sisend/väljund seadmeid.
Mikrokontroller


Mikrokontrollerit võib võrrelda pisikese arvutiga, mis lisaks oma põhifunktsioonile: instruktsioonide
täitmisele, omab ka küllalt laia kiipi integreeritud perifeeriaseadmete ja liideste hulka. Liidesed
võimaldavad mingil kokkulepitud standardil toimivat andmevahetust. Mikrokontrolleri põhiosaks on
keskprotsessor, mille ülesandeks on sarnaselt tavalise personaalarvuti protsessorile täita programmi
käske. Erinevalt tavalisest arvutist on mikrokontrolleris samasse kiipi lisatud veel töömälu
(RAM), andmemälu (EEPROM) ja programmimälu (Flash), katkestuste kontroller ja mitmed liidesed,
millest tuleb allpool täpsemalt juttu. Mikrokontrolleri skeemi on võimalik näha joonisel 1. Kõik
kasutatud lühendid on järgnevas tekstis selgitatud.
Joonis 1. Mikrokontrolleri lihtsustatud arhitektuur
Mälu
Kasutaja seisukohalt on oluline eristada kahte tüüpi mikrokontrolleri mälu. Esimeseks mälutüübiks on
programmimälu (Flash), kuhu laetakse mikrokontrolleri kompileeritud tööprogramm, milles sisalduvad
kasutaja poolt koostatud instruktsioonid kontrolleri tööks. Selle mälu suurusest sõltub, kui mahukat ja
keerulist programmi on konkreetsele mikrokontrollerile võimalik laadida. Väiksematel 8-
bitistel mikrokontrolleritel nagu näiteks ATtiny on selle mälu suuruseks 0,5 – 8 kB ja suurematel
sama tooteperekonna liikmetel ATmega 4 – 256 kB ning 32-bitistel kontrolleritel kuni 512 Kb. Teiseks
mälutüübiks on andmemälu ehk EEPROM, mida saab kasutada sarnaselt arvuti kõvakettaga
andmete säilitamiseks ka siis, kui kontrolleri toide välja lülitada. Mälu maht võrreldes tavalise
kõvakettaga on väga väike, nt ATmega32 puhul 1024 baiti. Suuremate andmemahtude puhul on aga
suhteliselt lihtne ühendada kontrolleriga tavaline välkmälu kaart (SD kaart) ja salvestada andmed
sinna.
Registrid
Registriteks nimetatakse mikrokontrolleri mälupesasid, millel on kindel aadress ja nimi. Piltlikult on
tegemist nagu lülititega, mida saab programmiliselt sisse ja välja lülitada ning kus igal niinimetatud
lülitil on oma otstarve ja tähendus, näiteks muudab viigu suunda, lülitab sisse mingi funktsiooni või
väljendab sisendandmeid (vt joonis 2). Kui tegemist on 8-bitise mikrokontrolleriga, siis on enamus
registreid ka kaheksakohalised. Piltlikult oleks tegemist kaheksast lülitist koosneva paneeliga.
Joonis 2. Kontrolleri registri ja kujuteldavate lülitite illustratsioon.
21
Digitaalne sisend-väljundid
Üldkasutatavad sisend-väljund viigud tegelevad üldjuhul digitaalsignaalide vahetamisega kontrolleri
ja välisseadme vahel. Viiku saab ise programmeerida, kummas suunas ta töötab, vastava registri
väärtuse seadmisega. Näiteks 0 (lüliti on üleval) tähendab, et viik töötab sisendina ja 1 (lüliti on alla
vajutatud), et viik töötab väljundina. Teise registriga saab sama viigu kohta andmeid biti kaupa seada
või, kui viik on määratud sisendiks, siis andmeid lugeda. Andmeteks on sama moodi kas 0 või 1 ehk
kas viigul on toitepinge (loogiline 1) või maa (loogiline 0).
Analoog-digitaal muundur
Mikrokontroller on digitaalseade ja kõik operatsioonid ning andmevahetus kontrolleris ja
välisseadmete vahel käib digitaalsignaalidega. Reaalne maailm meie ümber on aga paraku
analoogne, see tähendab, et enamus füüsikalisi nähtusi omab pidevaid suurusi, mida me
mikrokontrolleriga mõõta tahaksime. Näiteks temperatuur ei ole ainult 0 või 1, vaid omab lõpmatu
palju vahepealseid väärtusi. Analoogväärtuste teisendamiseks on enamikku mikrokontrolleritest sisse
ehitatud analoog-digitaal muundur (ADC), mis võimaldab ühendada kontrolleriga otse
analoogandureid. Muundur teisendab analoogsignaali digitaalseks, kontrollerile arusaadavaks
signaaliks. Muundamisprotsessi täpsus sõltub muunduri resolutsioonist. Näiteks levinud 10-bitiline
resolutsioon võimaldab sisendpinge vahemiku jagada 1024 osaks. Tavaliselt soovitakse kontrolleriga
ühendada rohkem kui ühte analoogandurit ja seepärast tuleb kontrolleri valikul uurida, mitu analoog
sisendkanalit konkreetne kontroller omab.
Pulsilaiusmodulatsioon


Pulsilaiusmodulatsioon (Pulse-width Modulation – PWM) on digitaalsignaali tüüp, mis võimaldab
lisaks lihtsale sisse-välja tüüpi digitaalsignaalile imiteerida seadmete jaoks analoogsignaali. Tavaline
pulsilaiusmodulatsioon on signaali kõrgeks ja madalaks lülitamine teatud sagedusega, kus kõrge ja
madala oleku osa pikkus määrab kontrolleriga ühendatud seadme käitumise (vt joonis 3). Kui kõrge
ja madal olek on ühesuguse pikkusega, siis võib tinglikult öelda, et signaali keskväärtus on pool
toitepingest, ja kui sagedus on piisavalt suur, siis kontrolleriga ühendatud seade käitubki samamoodi,
nagu oleks talle rakendatud pool toitepingest.
Joonis 3. Pulsilaiusmodulatsiooni signaali erinevad kujud
Näiteks võib tuua elektrimootori, mille nimipinge on 5 V ja kus nimipinge rakendamisel pöörleb
mootori võll 1000 p/min. Kui sooviksime pöördeid poole võrra vähendada, tuleks lihtsamal juhul
vähendada mootorile rakendatavat pinget poole võrra – 2,5 V. Kuna mikrokontrolleri väljundid on
digitaalsed, see tähendab väljundisse saab saata ainult kas nimipinge (5 V) või neutraali, siis ei saa
otse 2,5 V kontrolleri väljundisse tekitada. Kui aga signaali hakata kiiresti sisse-välja lülitama nii, et
madala ja kõrge väärtuse ajaline kestus on võrdne, hakkabki mootori võll pöörlema poole kiirusega,
ehk samamoodi nagu oleks talle rakendatud 2,5 V. Tegelikult lülitame mootorit kiiresti sisse ja välja
22
tema nimipingega, aga kuna lülitamine käib piisavalt kiiresti, ei jõua mootor seisma jääda ja rootori
inerts silub võnkumised ära ning mootor töötabki poole võimsusega. Tihti kasutatakse ka
spetsiifilisemat PWM signaali, kus signaali kõrge osa pikkus omab seadme jaoks kindlat tähendust.
Näiteks levinud servomootorite korral määrab signaali kõrge osa pikkus mootori õla asendi.
Sideliidestest on enamus mikrokontrollerites olemas USART, SPI ja ka tihti TWI. Võimsamatel või
kindla suunitlusega kontrolleritel (näiteks autotööstusele mõeldud kontrollerid) on CAN-liides ja
tänapäeval levib kontrolleritel juba ka USB-liides. Lähemalt räägitakse sideliidestest Andmeside
peatükis.

Конденсатор
Конденсатор — крошечный аккумулятор, который очень быстро заряжается и очень быстро


разряжается.
Основные характеристики
Ёмкость (номинал) C Фарад
Точность (допуск) ± %
Максимальное напряжение V Вольт
Кодирование номинала


Номинал в пФ записан на корпусе. Первые 2 цифры — основание, 3-я — множитель.
Например:
ƒ 220 = 22 × 100 пФ = 22 пФ
ƒ 471 = 47 × 101 пФ = 470 пФ
ƒ 103 = 10 × 103 пФ = 10 000 пФ = 10 нФ
ƒ 104 = 10 × 104 пФ = 100 000 пФ = 100 нФ
Поведение


ƒ Если подаваемое напряжение больше внутреннего накопленного, конденсатор будет
заряжаться.
ƒ Если внешнее напряжение меньше внутреннего, конденсатор будет отдавать заряд.
Время заряда и разряда
Для связывания уровня заряда конденсатора с временем используют понятие «постоянной
времени τ»:
ƒ За τ секунд конденсатор заряжается или разряжается на 63%
ƒ За 5×τ секунд конденсатор заряжается или разряжается на 99%
ƒ Если резистора в схеме нет, его роль исполняет паразитное сопротивление проводов,
разъёмов, дорожек, составляющее доли Ома
Резистор
Резистор — искусственное «препятствие» для тока. Сопротивление в чистом виде. Резистор
ограничивает силу тока, переводя часть электроэнергии в тепло.
Основные характеристики
Сопротивление (номинал) R Ом
Точность (допуск) ± %
Мощность P Ватт
Цветовая кодировка резисторов
Наносить номинал резистора на корпус числами — дорого и непрактично: они получаются
очень мелкими. Поэтому номинал и допуск кодируют цветными полосками.
Разные серии резисторов содержат разное количество полос, но принцип расшифровки
одинаков.
Цвет корпуса резистора может быть бежевым, голубым, белым. Это не играет роли.


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


Диод — это электрический «ниппель». У него есть 2 полюса: анод и катод. Ток пропускается


только от анода к катоду.
Основные характеристики
Падение прямого напряжения VF Вольт
Максимальное сдерживаемое обратное напряжение VDC Вольт
Максимальный прямой ток IF Ампер
Вольт-амперная характеристика
После того, как напряжение в прямом направлении превысит небольшой порог
VF диод открывается и начинает практически беспрепятственно пропускать ток, который
создаётся оставшимся напряжением.
Если напряжение подаётся в обратном направлении, диод сдерживает ток вплоть до
некоторого большого напряжения VDC после чего пробивается и работает также, как в прямом
направлении.
Виды диодов
Выпрямительный диод
Также известен как защитный, кремниевый
ƒ VF = 0,7 В
ƒ VDC — сотни или тысячи вольт
ƒ Открывается медленно
ƒ Восстанавливается после пробоя обратным током
Диод Шоттки
Шоттки — фамилия его изобретателя. Также известен как сигнальный, германиевый.
ƒ VF = 0,3 В
ƒ VDC — десятки вольт
ƒ Открывается быстро
ƒ Сгорает после пробоя обратным током
Диод Зеннера
Зеннер — фамилия его изобретателя. Также известен как стабилитрон
ƒ VF = 1 В
ƒ VDC — фиксированное значение на выбор
ƒ Умышленно используется в обратном направлении как источник фиксированного напряжения
Светодиод


Светодиод (англ. Light Emitting Diode или просто LED) — энергоэффективная, надёжная,
долговечная «лампочка»
Светодиод — вид диода, который светится, когда через него проходит ток от анода (+) к
катоду (−).
Основные характеристики
Падение напряжения VF Вольт
Номинальный ток I Ампер
Интенсивность (яркость) IV Кандела
Длина волны (цвет) λ Нанометр
Восприятие световых волн человеком
Типовая схема включения
Собственное сопротивление светодиода после насыщения очень мало, и без резистора,
ограничивающего ток через светодиод, он перегорит
Порядок: «резистор до» или «резистор после» — не важен
Поиск подходящего резистора
Рассчитаем какой резистор R в приведённой схеме нам нужно взять, чтобы получить
оптимальный результат. Предположим, что у нас такой светодиод и источник питания:
Найдём оптимальное сопротивление R и минимально допустимую мощность резистора PR.
Сначала поймём какое напряжение должен взять на себя резистор:
По закону Ома найдём значение сопротивления, которое обеспечит такое падение:
Таким образом:
ƒ при сопротивлении более 135 Ом яркость будет ниже заявленной
ƒ при сопротивлении менее 135 Ом срок жизни светодиода будет меньше
Теперь найдём мощность, которую при этом резистору придётся рассеивать:
Это означает, что при мощности резистора менее 54 мВт резистор перегорит.
Простое правило
Чтобы не заниматься расчётами резистора каждый раз во время проведения экспериментов,
можно просто запомнить правило для самого типичного сценария.
Для питания 1 светодиода на 20 мА от 5 В используйте резистор от 150 до 360 Ом.
Кнопка


Тактовая кнопка — простой, всем известный механизм, замыкающий цепь пока есть давление
на толкатель.
Кнопки с 4 контактами стоит рассматривать, как 2 пары рельс, которые соединяются при
нажатии.
Эффект дребезга
При замыкании и размыкании между пластинами кнопки возникают микроискры,
провоцирующие до десятка переключений за несколько миллисекунд. Явление
называется дребезгом (англ. bounce). Это нужно учитывать, если необходимо фиксировать
«клики».
Схема подключения
Напрашивается подключение напрямую. Но это наивный, неверный способ.
Пока кнопка нажата, выходное напряжение Vout = Vcc, но пока она отпущена, Vout ≠ 0.
Кнопка и провода в этом случае работают как антенна, и Vout будет «шуметь», принимая
случайные значения «из воздуха».
Пока соединения нет, необходимо дать резервный, слабый путь, делающий напряжение
определённым. Для этого используют один из двух вариантов.
Схема со стягивающим резистором
ƒ Есть нажатие: Vout = Vcc
ƒ Нет нажатия: Vout = 0
Схема с подтягивающим резистором
ƒ Есть нажатие: Vout = 0
ƒ Нет нажатия: Vout = Vcc
Светодиодные сборки
Многие компоненты, используемые для индикации, представляют собой несколько отдельных
светодиодов в одном корпусе.
Светодиодная шкала
Светодиодная шкала — это десяток отдельных светодиодов, каждый со своим анодом и
катодом.
Семисегментный индикатор


Семисегментный индикатор — это восемь светодиодов в одном корпусе: 7 сегментов + точка.
Анод у каждого светодиода отдельный, а катод у всех общий, на ноге 3 или 8.
Установка на макетную плату
Для подключения на breadboard’е используйте канавку в центре, чтобы не замкнуть ноги на
противоположных сторонах.
Токоограничивающие резисторы
Используйте отдельный резистор для каждого светодиода, иначе при разном количестве
включенных сегментов их яркость будет «скакать».
Даже в случае, когда все светодиоды включаются и выключаются синхронно, лучше
придерживаться этого правила. Светодиоды могут чуть отличаться своей вольт-амперной
характеристикой друг от друга. Первый открывшийся пропустит через себя ток,
предназначенный для всех. Из-за чего он может выйти из строя, и «эстафета» перейдёт к
следующему.
Широтно-импульсная модуляция
Микроконтроллеры обычно не могут выдавать произвольное напряжение. Они могут выдать
либо напряжение питания (например, 5 В), либо землю (т.е. 0 В)
Но уровнем напряжения управляется многое: например, яркость светодиода или скорость
вращения мотора. Для симуляции неполного напряжения используется ШИМ (ШиротноИмпульсная Модуляция, англ. Pulse Width Modulation или просто PWM)
Применение
Выход микроконтроллера переключается между землёй и Vcc тысячи раз в секунду. Или, как
ещё говорят, имеет частоту в тысячи герц. Глаз не замечает мерцания более 50 Гц, поэтому
нам кажется, что светодиод не мерцает, а горит в вполсилы.
Аналогично, разогнанный мотор не может остановить вал за миллисекунды, поэтому ШИМсигнал заставит вращаться его в неполную силу.
Скважность


Отношение времени включения и выключения называют скважностью (англ. duty cycle).
Рассмотрим несколько сценариев при напряжении питания Vcc равным 5 вольтам.
50% — эквивалент 2,5 В
10% — эквивалент 0,5 В
90% — эквивалент 4,5 В
Делитель напряжения


Последовательно подключённые резисторы делят поступающее на них напряжение в
определённой пропорции.
Расчёт пропорции
Сила тока, протекающая через резисторы одинакова, т.к. они соединены последовательно, и
по закону Ома может быть рассчитана как:
По тому же закону Ома можно вычислить напряжение Vout, которое падает на резисторе R2:
Из полученной формулы видно, что чем больше R2 относительно R1, тем большее напряжение
падает на нём.
Считывание резистивных сенсоров
Если вместо R2 использовать не постоянный резистор, а датчик, который меняет своё
сопротивление, Vout будет зависеть от измеряемого значения.
Микроконтроллер умеет измерять напряжение. Таким образом, мы можем использовать
свойства делителя напряжения для получения показаний от сенсора.
Примеры резистивных датчиков
Термистор


Термистор изменяет своё сопротивление в зависимости от собственной температуры
Фоторезистор


Фоторезистор (англ. Light Dependent Resistor или сокращённо LDR) изменяет своё
сопротивление в зависимости от силы света, попадающего на его керамическую «змейку»
Потенциометр
Потенциометр ещё называют переменным резистором, триммером. Это делитель из двух
резисторов в одном корпусе. Поэтому у него 3 ноги: питание, выход, земля.
Соотношение R1 и R2 меняется поворотом ручки. От 100% в пользу R1 до 100% в пользу R2.
Биполярный транзистор
Транзистор — это электронная кнопка. На кнопку нажимают пальцем, а на биполярный
транзистор — током.
Транзисторы используют для управления мощными нагрузками при помощи слабых сигналов с
микроконтроллера.


ƒ Нога, выполняющая роль «кнопки» называется база (англ. base)
ƒ Пока через базу течёт небольшой ток, транзистор открыт:
o Большой ток может втекать в коллектор (англ. collector)
o и вытекать из эмиттера (англ. emitter)
Основные характеристики
Макс. напряжение коллектор-эмиттер VCE Вольт
Максимальный ток через коллектор IC Ампер
Коэффициент усиления hfe
Типовая схема подключения


Транзистор усиливает максимально допустимый ток в hfe раз:
Пример расчёта
Если управляющий сигнал на базе транзистора с hfe и резистором номиналом 1 кОм
составляет 5 вольт:
ƒ Какой максимальный ток сможет пропустить через себя транзистор?
ƒ Каким по величине будет управляющий ток?
ƒ
Дано
Найти
Решение
Вывод


Если на базу подаётся 5 В через резистор в 1 кОм, транзистор откроется настолько, что будет
способен пропустить до 250 мА. При этом управляющий ток составит всего 5 мА
Полевой транзистор
Полевой MOSFET-транзистор — ключ для управления большими токами при помощи
небольшого напряжения.


ƒ «Кнопка» называется затвором (англ. gate)
ƒ Пока на затворе есть небольшое напряжение, транзистор открыт:
o Большой ток может втекать в сток (англ. drain)
o и вытекать из истока (англ. source)
В отличие от биполярного транзистора полевой контролируется именно напряжением, а не
током. Т.е. в открытом состоянии ток через затвор не идёт.
Используйте MOSFET для управления большими токами, от сотен миллиампер, когда
дешёвого биполярного транзистора уже не достаточно.
Основные характеристики
Максимальное напряжение сток-исток VDS Вольт
Максимальный ток через сток ID Ампер
Сопротивление сток-исток RDSon Ом
Рассеиваемая мощность PD Ватт
Типовая схема подключения
Рассеивание тепла
Транзистор не идеален и часть пропускаемой мощности превращается в тепло.
Если PH превысит PD, без помощи дополнительного охлаждения транзистор сгорит.
Пьезодинамик


Пьезоизлучатель звука (англ. buzzer) переводит переменное напряжение в колебание
мембраны, которая в свою очередь создаёт звуковую волну.
Иначе говоря, пьезодинамик — это конденсатор, который звучит при зарядке и разрядке.
Основные характеристики
Рекомендуемое (номинальное) напряжение V Вольт
Громкость (на заданном расстоянии) P Децибел
Пиковая частота fP Герц
Ёмкость C Фарад
Амплитудно-частотная характеристика
Амплитудно-частотная характеристика (АЧХ) определяет громкость звука в зависимости от
частоты управляющего сигнала, который и определяет высоту звучащей ноты.
Идеальная АЧХ — это прямая, т.е. одинаковая громкость вне зависимости от частоты. Но мир
не идеален и разные виды излучателей имеют разные отклонения от идеала.
Подключение напрямую
Пьезодинамик потребляет всего пару мА, поэтому можно смело подключать его прямо к
микроконтроллеру
Для звучания нужно подавать на динамик квадратную волну. Какой частоты будет волна,
такой частоты будет и звук
Подключение с регулировкой громкости
Мотор


Мотор переводит электрическую энергию в механическую энергию вращения.
Самый простой вид мотора — коллекторный. При подаче напряжения в одном направлении
вал крутится по часовой стрелке, в обратном направлении — против часовой
Основные характеристики
Рекомендуемое (номинальное) напряжение V Вольт
Потребляемый ток без нагрузки IF Ампер
Потребляемый ток при блокировке IS Ампер
Скорость вращения без нагрузки ω с-¹
Максимальный крутящий момент τ Н×м
Крутящий момент
Крутящий момент определяет какая сила воздействует на точку рычага на
заданном расстоянии от оси вращения.
Силу иногда упрощённо измеряют в килограммах против гравитации Земли. А крутящий
момент — в кг×см. Американцы любят измерять крутящий момент в унциях на дюйм (англ.
oz×in).
Схема подключения без возможности реверса
Моторы — мощные потребители с рядом побочных эффектов. Для управления ими
необходимы дополнительные компоненты.
Предельные характеристики
IS всегда много больше IF и для хобби-моторов составляет до 2 А. Выбирайте транзистор и
диод, способные выдержать этот ток или не допускайте блокировки мотора.

Проект 7. Сигнализация
ГЛАВНАЯ / УРОКИ И ПРОЕКТЫ / Проект 7. Сигнализация
Устройство оповестит вас о вибрации самого устройство, а так же каких-либо приспособлений.

Описание работы:
Для начала работы подключите питание к Arduino. Закрепите устройство на какой-либо предмет. С помощью потенциометра выставите критический уровень тряски. Если крутить влево, то будет установлен максимальный критический уровень тряски. Устройство никак не будет реагировать на тряску. Если крутить потенциометр вправо, то будет установлен минимальный критический уровень тряски и при малейшем движении, устройство будет сигнализировать небольшой мелодией и включенным светодиодом. Теперь устройство можно использовать для переноски любых предметов. Устройство оповестит о сильной тряске.

Нам понадобится:
Arduino Uno х 1шт.
Trema Set Shield х 1шт.
Trema-модуль зуммер х 1шт.
Trema-модуль светодиод х 1шт.
Trema-модуль потенциометр х 1шт.
Trema-модуль датчик вибрации х 1шт.
Для реализации проекта нам не нужно устанавливать никаких библиотеки.

Схема сборки:
Устанавливаем Trema Set Shield в Arduino Uno.
Устанавливаем красный Trema-модуль светодиод в 1 посадочную площадку.

Устанавливаем Trema-модуль зуммер в 2 посадочную площадку.

Устанавливаем Trema-модуль потенциометр в 6 посадочную площадку.

Устанавливаем Trema-модуль датчик вибрации в 5 посадочную площадку.

Полученные результат представлен ниже на рисунке.

Код программы:
int pinDatZ = 11; // Объявляем пин для работы с датчиком звука.
int pinPot = A3; // Объявляем пин для работы с потенциометром.
int pinLed = 6; // Объявляем пин для работы со светодиодом.
const uint8_t pinZum = A0; // Объявляем пин для работы с зуммером.
//
float potVolue; // Переменная для чтения показаний с потенциометра.
float datZVolue; // Переменная для усредненных показаний с датчика вибрации.
float readDatZ; // Переменная для чтения показаний с датчика вибрации.
float average = 2; // Определяем константу усреднения показаний датчика (чем выше значение, тем выше инерционность выводимых показаний).
//
void Music(); // Функция музыки с зуммера.
//
void setup() //
{ //
pinMode(pinLed, OUTPUT); // Переводим вывод pinLedRed в режим выхода.
} //
//
void loop() //
{ //
potVolue = map(analogRead(pinPot), 0, 1023, 100, 0); // Читаем показания с потенциометра и масштабируем значения в диапазон от 1 до 100.
readDatZ = digitalRead(pinDatZ); // Читаем показания с датчика вибрации.
//
datZVolue = average-1; // Умножаем предыдущее значение датчика звука на коэффициент усреднения-1. datZVolue += readDatZ; // Добавляем к полученному значению новые показания датчика звука. datZVolue /= average; // Делим полученное значение на коэффициент усреднения. // while (datZVolue100 > potVolue) // Усредненные показания с датчика вибрации умножаем на сто и выполняем цикл, если они больше показаний с потенциометра.
{ //
digitalWrite(pinLed, HIGH); // Включаем светодиод.
digitalWrite(pinZum, HIGH); // Включаем зуммер.
////
Music(); // Переходим к функции музыки с зуммера.
//
//
} //
digitalWrite(pinLed, LOW); // Выключаем светодиод.
digitalWrite(pinZum, LOW); // Выключаем зуммер.
} //
//
void Music() // Функция музыки с зуммера.
{ //
datZVolue = 0; // Обнуляем переменную усреднения показаний с датчика вибрации.
tone(pinZum, 2048, 500); // Выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 сек.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 1024, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 512, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 256, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 128, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 64, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 32, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 16, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 8, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 4, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 2, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 1, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 2, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 4, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 8, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 16, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 32, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 64, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 128, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 256, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 512, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 1024, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
tone(pinZum, 2048, 500); // Выводим звуковой сигнал длительностью 0,1 сек с частотой 2048 Гц.
delay(200); // Не выводим звук в течении 0,1 сек (см. ниже).
} //
Алгоритм работы:
В начале скетча (до кода setup) выполняются следующие действия:

Объявляем пины для работы с Trema-модуль датчик вибрации, Trema-модуль потенциометр, Trema-модуль светодиод, Trema-модуль зуммер.
Объявляем массив и переменные задействованные в программе.
В коде setup выполняются следующие действия:
Переводим вывод Arduino для светодиода в режим выхода.
В коде loop выполняются следующие действия:

Считываем показания с потенциометра в масштабе от 1 до 100.
Считываем показания с датчика вибрации.
Усредняем показания с датчика вибрации.
Если усредненные показания датчика вибрации, умноженные на 100 больше критического значения с потенциометра, то включаем светодиод и зуммер, а так же переходим к функции “Music()”, в которой проиграется небольшая мелодия. Функцию “Music()” можно отключить, закомментировав или удалив строчку с функцией в самом скетче. Это строчка обрамлена звездочками. Её легко найти. Если меньше, то выключаем светодиод и зуммер.

Проект 11. Часы
ГЛАВНАЯ / УРОКИ И ПРОЕКТЫ / Проект 11. Часы
Устройство часы в представлении не требуется. Устройство показывает текущее время.

Описание работы:
Для начала работы подключите питание к Arduino. На индикаторе появится текущее время. Для настройки времени, нажмите любую кнопку, либо зеленую, либо красную. Уменьшится яркость индикатора, значит можно настраивать время. При нажатии или удержании зеленой кнопки будут увеличиваться минуты до 59. При нажатии или удержании красной кнопки будут уменьшаться минуты до 0. При достижении минут 59, увеличивается количество часов, а значение минут установится в 0. При достижении минут 0, уменьшится количество часов, а значение минут установится в 59. При достижении часов 23, значение часов сбросится в 0, а при достижении часов 0, значение часов установится в 23. После установки нужного времени, необходимо подождать две секунды. Тогда выбранное время сохранится, индикатор увеличит свою яркость, а время пойдет как прежде.

Нам понадобится:
Arduino Uno х 1шт.
Trema Set Shield х 1шт.
Trema-модуль красная кнопка х 1шт.
Trema-модуль зеленая кнопка х 1шт.
Trema-модуль часы реального времени, RTC х 1шт.
Trema-модуль четырехразрядный LED индикатор х 1шт.
Для реализации проекта нам необходимо установить следующие библиотеки:
Библиотека iarduino_4LED для работы с Trema-модуль четырехразрядным LED индикатором.
Библиотека iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE.

Схема сборки:
Устанавливаем Trema Set Shield в Arduino Uno.
Устанавливаем Trema-модуль Четырехразрядный LED индикатор во 2 посадочную площадку.

Устанавливаем Trema-модуль часы реального времени, RTC в 3 посадочную площадку, в верхнюю I2C колодку.

Устанавливаем Trema-модуль зеленую кнопку в 5 посадочные площадки.

Устанавливаем Trema-модуль красную кнопку в 6 посадочные площадки.

Полученные результат представлен ниже на рисунке.

Код программы:

include // Подключаем библиотеку iarduino_4LED

iarduino_4LED dispLED(1, A0); // Объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов дисплея ( CLK , DIO ).
//

include // Подключаем библиотеку.

iarduino_RTC time(RTC_DS3231); // Объявляем объект time для модуля на базе чипа DS3231.
//
const int pinKeyRed = A3; // Объявляем пин для работы с красной кнопкой.
const int pinKeyGreen = 11; // Объявляем пин для работы с зеленой кнопкой.
//
int m; // Переменная для минут.
int h; // Переменная для часов.
int i; // Переменная счета.
int k; // Переменная счета.
int menu; // Переменная события.
int minPrev; // Переменная предыдущего значения минут.
//
void ShowTime(); // Функция показа времени.
//
void setup() //
{ //
pinMode(pinKeyGreen, INPUT); // Переводим вывод pinKeyGreen в режим входа.
pinMode(pinKeyRed, INPUT); // Переводим вывод pinKeyRed в режим входа.
dispLED.begin(); // Инициируем LED дисплей.
time.begin(); // Инициируем RTC модуль.
menu = 1; // Задаем событие 1.
} //
//
void loop() //
{ //
time.gettime(); // Читаем время, обновляя значения всех переменных.
switch(menu) // Выбор события.
{ //
case 1: // Событие 1.
dispLED.light(7); // Устанавливаем максимальную яркость свечения LED индикатора.
if(digitalRead(pinKeyGreen) || digitalRead(pinKeyRed)) // Проверка нажатия зеленой кнопки или нажатия красной кнопки.
{ //
h = time.Hours; // Сохраняем текущее значение часов.
m = time.minutes; // Сохраняем текущее значение минут.
menu = 2; // Переходим к действию 2.
} //
//
if(fmod(time.seconds,2)) // Проверка значении на четность/нечетность с помощью функции остаток от деления. При делении на два, если остаток равен 1.
{ //
dispLED.point(0, false); // Выключаем двоеточие.
dispLED.point(2, true); // Включаем вторую точку.
} //
else // Если остаток от деления равен 0.
{ //
dispLED.print( time.Hours , time.minutes , TIME ); // Вывод времени.
} //
break; // Выходим из оператора case.
//
case 2: // Событие 2.
dispLED.light(1); // Устанавливаем небольшую яркость свечения LED индикатора
dispLED.point(2, true); // Включаем вторую точку.
if(digitalRead(pinKeyGreen) && digitalRead(!pinKeyRed)) // Проверка нажатия зеленой кнопки и не нажатия красной кнопки.
{ //
while(digitalRead(pinKeyGreen) && digitalRead(!pinKeyRed)) // Цикл слежения нажатой зеленой кнопки.
{ //
delay(10); // Ждём пока мы её не отпустим.
if(i<150){i++;} else{delay(10);m++;ShowTime();} // Фиксируем, как долго удерживается кнопка pinKeyGreen, если дольше 2 секунд, то увеличиваем минуты, до отжатия кнопки. } // if(i<150){m++;ShowTime();} // Если кнопка pinKeyGreen удерживалась меньше 2 секунд, то увеличиваем минуты. i = 0; // Обнуляем переменную счета. } // // if(digitalRead(pinKeyRed) && digitalRead(!pinKeyGreen)) // Проверка нажатия красной кнопки и не нажатия зеленой кнопки. { // while(digitalRead(pinKeyRed) && digitalRead(!pinKeyGreen)) // Цикл слежения нажатой зеленой кнопки. { // delay(10); // Ждём пока мы её не отпустим. if(i<150){i++;} else{delay(10);m–;ShowTime();} // Фиксируем, как долго удерживается кнопка pinKeyRed, если дольше 2 секунд, то увеличиваем минуты, до отжатия кнопки. } // if(i<150) {m–;ShowTime();} // Если кнопка pinKeyRed удерживалась меньше 2 секунд, то увеличиваем минуты. i = 0; // Обнуляем переменную счета. } // // if (m == minPrev){k++;} // Если предыдущее и нынешнее значение минут одинаково, то увеличиваем переменную счета. else {k = 0;} // Иначе, обнуляем переменную счета. if (k >= 150) {menu = 1; k = 0;} // Если переменная счета больше 150, то задаем событие 1, обнуляем переменную счета.
minPrev = m; // Сохраняем нынешнее значение минут в переменную предыдущего значения минут.
break; // Выходим из оператора case.
} //
} //
//
void ShowTime() // Функция показа времени.
{ //
dispLED.point(2, true); // Включаем вторую точку.
if (m > 59){h++; if (h > 23){h = 00;} m = 00;} // Если значение минут больше 59, увеличиваем переменную час, если переменная часа больше 23, то обнуляем часы, обнуляем минуты.
if (m < 00){h–; if (h < 00){h = 23;} m = 59;} // Если значение минут меньше 00, уменьшаем переменную час, если переменная часа меньше 00, то присваиваем часам максимальное значение 59, присваиваем минутам максимальное значение 59.
time.settime(-1, m, h); //
dispLED.print( time.Hours , time.minutes , TIME ); // Вывод времени.
} //
Алгоритм работы:
В начале скетча (до кода setup) выполняются следующие действия:

Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
Объявляем объект dispLED, с указанием выводов дисплея.
Подключаем библиотеку iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
Объявляем объект time для модуля на базе чипа DS3231.
Объявляем пины для работы с Trema-модуль красной кнопкой и Trema-модуль зеленой кнопкой.
Объявляем переменные и функции задействованные в скетче.
В коде setup выполняются следующие действия:

Переводим выводы pinKeyGreen для зеленой кнопки и pinKeyRed для красной кнопки в режим выхода.
Инициируем LED дисплей.
Инициируем RTC модуль.
Задаем событие 1.
В коде loop выполняются следующие действия:

Читаем время, с модуля часов реального времени.
Устанавливаем максимальную яркость свечения индикатора.
Событию 1.
Проверяем нажата зеленая или красная кнопка. Если одна из кнопок нажата, то сохраняем текущее значение времени в переменные времени и разрешаем переход к событию 2.
Каждую секунду включаем и выключаем вторую точку на индикаторе. Для этого проверяем четность/нечетность приходящих секунд с модуля реального времени. Если нечетное, включаем вторую точку на индикаторе и гасим двоеточие на индикаторе, если оно присутствует на индикаторе. Если четное, то выводим на индикатор текущее время.
Событие 2.
Уменьшаем яркость свечения индикатора.
Включаем вторую точку на индикаторе.
Проверяем нажата зеленая кнопка. Если нажата, то заходим в цикл нажатия зеленой кнопки. Там фиксируем, как долго удерживается зеленая кнопка: если дольше 2 секунд, то увеличиваем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, увеличение прекратится. Если же нажата один раз зеленая кнопка, то увеличение минут произойдет один раз. Обнуляем переменную счета.
Проверяем нажата красная кнопка. Если нажата, то заходим в цикл нажатия красной кнопки. Там фиксируем, как долго удерживается красная кнопка: если дольше 2 секунд, то уменьшаем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, уменьшение прекратится. Если же нажата один раз красная кнопка, то уменьшение минут произойдет один раз. Обнуляем переменную счета.
Проверяем совершалось изменение минут. Если предыдущее значение минут совпадает с нынешним значением минут, то увеличиваем переменную счета, иначе обнуляем переменную счета.
Если переменная счета больше 150, то разрешаем переход к событию 1. Обнуляем переменную счета.
Сохраняем нынешнее значение минут в переменную предыдущего значения минут.