Selles näites näete, et LED valgustus (antud olukorras punane) süttib sertan korda. Seda saab kasutada erinevate mustrite loomiseks, täpselt nagu koodis morse! RBG teooria
Inkapsulatsioon: Funktsionaalsus peidetakse objekti sisse, piirates otsest ligipääsu selle sisemistele detailidele.
Modulaarsus: Programm jagatakse sõltumatuteks mooduliteks, mis töötavad koos.
Polümorfism: „Mitu vormi“ – võimaldab alamklassidel muuta vanemklassi meetodite käitumist.
Pärilikkus: Üks klass (alamklass) saab pärida teiselt klassilt (vanemklassilt) omadusi ja meetodeid.
Sissejuhatus OOP-sse
Objektorienteeritud programmeerimises räägitakse klasside kirjeldamisest ja objektide loomisest nende kirjelduste alusel. Objektide käsitlemine toimub klassis määratletud meetodite kaudu (meetodid on põhimõtteliselt funktsioonid).
Klassid
Klass on kasutaja määratud andmestruktuur, mis seob andmeväljad (muutujad) ja meetodid ühtsesse tervikusse. Klass on nagu plaan, mille järgi saab luua piiramatult objekte.
Näide konstruktorist:
class Dog:
# Klassikonstruktor
def __init__(self, name):
self.name = name
Konstruktorite tüübid Pythonis
Vaikekonstruktor – kui konstruktorit ei määrata, loob Python selle automaatselt (__init__(self)).
Mitteparametriseeritud konstruktor – ei võta lisaparameetreid.
Parametriseeritud konstruktor – võtab vastu parameetreid ja võimaldab erinevaid algväärtusi.
Objektid
Objekt on klassi eksemplar ehk tegelik näide. See sisaldab atribuute (muutujaid) ja meetodeid.
Objekti loomise süntaks:
dog_name = Dog("Snoopy")
Objekti omadused:
Identiteet – igal objektil on ainulaadne ID.
Seisund – määratud atribuudi(te) väärtustega.
Käitumine – määratud meetoditega.
Pärilikkus
Omadused jaotatakse hierarhiliselt:
Vanemklass – sisaldab üldiseid omadusi ja võib sisaldada abstraktseid meetodeid.
Alamklass – pärib omadused ja laiendab neid.
Abstraktseid meetodeid ei saa kasutada enne, kui need on alamklassides implementeeritud.
Inkapsulatsioon
Inkapsulatsioon eraldab klassi sisemise toimimise selle liidesest (interface). See aitab hoida koodi stabiilsena, isegi kui sisemine toimimine muutub.
Näide inkapsulatsioonist ja privaatsetest muutujatest:
class Computer:
def __init__(self):
self.__sellingprice = 700 # privaatne muutuja
def sell(self):
print("Müügihind: {}".format(self.__sellingprice))
def set_selling_price(self, price):
self.__sellingprice = price
c = Computer()
c.sell()
# Püüame muuta hind otse
c.__sellingprice = 1000
c.sell()
# Muudame hind setter-meetodiga
c.set_selling_price(1000)
c.sell()
Väljund:
Müügihind: 700
Müügihind: 700
Müügihind: 1000
Polümorfism
Polümorfism tähendab, et sama meetod käitub erinevates klassides erinevalt.
Näide:
class Circle:
def corners(self):
print("Ringil pole nurki")
def sides(self):
print("Ringil on üks külg")
class Rectangle:
def corners(self):
print("Ristkülikul on neli nurka")
def sides(self):
print("Ristkülikul on neli külge")
# Ühine liides
def corners_test(shape):
shape.corners()
# Objektide loomine
first_shape = Circle()
second_shape = Rectangle()
# Meetodi käivitamine
corners_test(first_shape)
corners_test(second_shape)
Väljund:
Ringil pole nurki
Ristkülikul on neli nurka
Abstraktsioon
Abstraktsioon tähendab keskendumist olulisele ja ebaolulise peitmist. Kasutaja teab, mida funktsioon teeb, aga mitte kuidas see töötab.
Pythoni moodul abc (Abstract Base Class) võimaldab luua abstraktseid klasse.
Näide abstraktsioonist:
from abc import ABC
class Animal(ABC):
def sleep(self):
print("Ma lähen magama.")
def speak(self):
pass # abstraktne meetod
class Human(Animal):
def speak(self):
print("Ma oskan rääkida.")
class Snake(Animal):
def speak(self):
print("Ma oskan sisiseda.")
class Dog(Animal):
def speak(self):
print("Ma oskan haukuda.")
class Lion(Animal):
def speak(self):
print("Ma oskan möirgata.")
# Objektide loomine ja meetodi kutsumine
human = Human()
human.speak()
snake = Snake()
snake.speak()
dog = Dog()
dog.speak()
lion = Lion()
lion.speak()
Väljund:
Ma oskan rääkida.
Ma oskan sisiseda.
Ma oskan haukuda.
Ma oskan möirgata.
MongoDB on dokument-orienteeritud NoSQL-andmebaas, mis salvestab andmed JSON-sarnases vormis.
Kollektsioon on dokumentide rühm, mis sarnaneb relaandmebaasi tabelile ei nõua fikseeritud skeemi, aga tavaliselt hoitakse sees sarnase struktuuriga kirjeid
Dokument on üks andmeüksus, esitatuna võtme-väärtuse paaridena (näiteks tekst, number, massiiv, sisemine objekt) käitub nagu JSON-objekt, igaühel unikaalne _id-väli primaarvõtmena
mongoDB Kasutamine
Tabeli loomine
Ülemises osas on mongosh konsool, kus käsk show databases kuvab olemasolevad andmebaasid, seejärel lülitutakse andmebaasi mongo ja käivitatakse db.createCollection(“users”), mis tagastab { ok: 1 } ehk näitab, et users-kollektsioon loodi edukalt. Alumises osas on graafiline kasutajaliides, mis kuvab äsjaloodud users-kollektsiooni kokkuvõtet.
Andmete lisamine
Pildil näidatakse, kuidas MongoDB users kollektsiooni lisatakse uus dokument. Seejärel kuvatakse graafilises kasutajaliideses see äsja lisatud dokument.
Palju andmete lisamine
Pildil näidatakse, kuidas MongoDB users kollektsiooni lisatakse korraga mitu uut dokumenti. Graafilises kasutajaliideses on nüüd näha nii eelmisel pildil dokument kui ka need viis uut dokumenti.
Andmete otsimine kriteeriumi järgi
Pildid illustreerivad andmete otsimist MongoDB users kollektsioonist, kasutades find() käsku. Näidatakse, kuidas leida kasutajaid täpse väärtuse järgi. On toodud näide $or operaatori kasutamisest, et leida dokumente, mis vastavad vähemalt ühele mitmest määratud tingimusest. Veel näidatakse erinevate võrdlusoperaatorite kasutamist vanuse välja puhul: otsitakse, kes on nooremad kui teatud vanus ($lt), teatud vanuses või nooremad ($lte), vanemad kui teatud vanus ($gt), teatud vanuses või vanemad ($gte), ning kasutajaid, kelle vanus ei ole teatud kindel väärtus ($ne).
Sorteerimine
Pildil näidatakse MongoDB users kollektsiooni dokumentide sorteerimist. Vasakul sorteeritakse vanuse järgi kasvavalt ({age: 1}). Paremal sorteeritakse vanuse järgi kahanevalt ({age: -1})
Kirjete piiramine
Pildil näidatakse, kuidas MongoDB-s piirata tagastatavate kirjete arvu. Üleval kasutatakse db.users.find().limit(4), et saada maksimaalselt neli esimest dokumenti. Allpool kasutatakse db.users.findOne() kahel viisil: otsides konkreetse _id järgi ja otsides esimese dokumendi, mille vanus on 19.
Andmete muutmine
See uuendab esimest filtrile vastavat dokumenti, muutes määratud väljad uuteks väärtusteks.
Teie näite puhul:
See uuendab esimest kasutajat, kelle nimi on “aspir”, muutes nime “Dr.Aspirgurg” ja seades vanuseks 45 aastat.
t uuendab kõiki filtrile vastavaid dokumente, nimetades nimevälja ümber täisnimeks.
Teie näite puhul:
See nimetab nimi ümber täisnimeks kõigis kasutajate kollektsiooni dokumentides.
Andmete kustutamine
Saate kasutada meetodit deleteOne(), et eemaldada esimene dokument, mis vastab määratud filtrile.
Mitmekordne taotlus
Meetod, mis võimaldab mitme kirjutamisoperatsiooni (sisestamine, uuendamine, kustutamine, asendamine) teostamist ühe üleskutsega.
Filter on päringu objekt, mis määrab MongoDB operatsioonides dokumentide valiku kriteeriumid.
Linkide tüübid
Kui kasutaja nimega „Ivan“ on olemas, siis tema postituste väli kirjutatakse üle selle massiivi. Kui „Ivanil“ ei ole veel postituste välja, siis luuakse see. Operatsioon mõjutab vaikimisi ainult esimest sobivat dokumenti (sest update() ilma valikuteta mõjutab ainult ühte).
Mongo ühendamine node jsiga
Kood impordib MongoClienti mongodb paketist.
See loob uue MongoClient’i koos ühendusstringiga MongoDB Atlas klastrile (pilvemongoDB).
Asünkroonne käivitamisfunktsioon:
Funktsioon start on deklareeritud asünkroonsena, et see saaks kasutada await’i asünkroonsete MongoDB operatsioonide jaoks.
Programmeerimise arengulugu hõlmab teekonda esimestest programmeerimiskeeltest kuni tänapäevaste tehnoloogiateni. See sisaldab olulisi saavutusi, mõjukaid isikuid ning erinevate programmeerimisparadigmade kujunemist ja arengut. konspekt teemaga
print("Tere, maailm!")
Süntaks
Süntaks on reeglistik, mis määrab, kuidas tuleb koodi kirjutada, et see oleks arvutile arusaadav. See hõlmab näiteks märksõnu, operaatoreid, kirjavahemärke ning loogilist koodi ülesehitust. konspekt teemaga
a = 5
b = 3
if a > b:
print("a on suurem kui b")
elif a > b
print("a on suurem")
Muutujad
Muutujad on nimelised kohad arvuti mälus, kuhu saab salvestada andmeid ja millele saab hiljem viidata. Igal muutujal on tüüp (nt int, float, string, bool) ja väärtus, mida saab programmi käivitamisel muuta.
Lineaarsed programmid koosnevad juhistest, mis täidetakse järjestikku, ilma harude või kordusteta.
Programmi voog on sirgjooneline – algusest lõpuni.
Tüüpilised tegevused: sisendi lugemine, arvutuste tegemine ja väljundi kuvamine.
nimi = input("Sisesta oma nimi: ")
vanus = int(input("Sisesta oma vanus: "))
print("Tere,", nimi)
print("Järgmisel aastal oled sa", vanus + 1, "aastat vana.")
Valikud
Valikulaused võimaldavad programmil teha otsuseid ja täita erinevaid koodiplokke sõltuvalt tingimuste tõesusest või väärusest.
if: Kui tingimus on tõene, täidetakse if-ploki kood.
elif (else if): Kui eelnev if või elif tingimus oli väär, kontrollitakse uut tingimust. Kui see on tõene, täidetakse vastav koodiplokk.
else: Kui ükski eelnevatest tingimustest ei olnud tõene, täidetakse else-plokk. Else on valikuline.
number = int(input("Sisesta arv: "))
if number > 0:
print("Arv on positiivne.")
elif number < 0:
print("Arv on negatiivne.")
else:
print("Arv on null.")
Kordused
Tsüklid võimaldavad teatud koodiplokki mitu korda korrata.
for-tsükkel: Kasutatakse järjendite (nt loendid, sõned) kordamiseks kindel arv kordi. Sageli koos range() funktsiooniga.
for i in range(5):
print("Tere", i)
while-tsükkel: Kordab koodiplokki, kuni mingi tingimus on tõene. Tingimust kontrollitakse enne iga kordust. Oluline on tagada, et tingimus muutuks tsükli sees, vältimaks lõputut tsüklit.
arv = 1
while arv <= 5:
print("Arv:", arv)
arv += 1
Tsükli juhtlausete näited:
break: katkestab tsükli kohe.
continue: jätkab tsüklit järgmise kordusega, vahele jättes ülejäänud koodi jooksvas tsüklis.
for i in range(10):
if i == 7:
break
if i % 2 == 0:
continue
print(i)
Loendid
Loendid on järjekorras, muudetavad andmekogumid, mis võivad sisaldada erinevat tüüpi elemente.
Elementidele pääseb ligi indeksi kaudu (alates nullist).
Pärast töö lõpetamist tuleb fail sulgeda close() abil, et andmed salvestuksid õigesti ja ressursid vabaneksid.
Soovitatav: kasutada konstruktsiooni with open(...) as ...:, mis sulgeb faili automaatselt.
Erinevad failivormingud: .txt, .csv, .json.
# Kirjutamine
with open("andmed.txt", "w") as fail:
fail.write("Tere, fail!")
# Lugemine
with open("andmed.txt", "r") as fail:
sisu = fail.read()
print(sisu)
Graafikute ja diagrammide loomine
Andmete visualiseerimine graafikute ja diagrammide abil aitab paremini mõista mustreid, trende ja seoseid.
Levinud Python’i teegid:
Matplotlib – põhiline ja laialt kasutatav
Seaborn – põhineb Matplotlibil, pakub kõrgema taseme kasutajaliidest statistilisteks graafikuteks
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.title("Lihtne joonisgraafik")
plt.xlabel("X telg")
plt.ylabel("Y telg")
plt.grid(True)
plt.show()
Graafiline kasutajaliides (GUI)
Graafiline kasutajaliides võimaldab kasutajatel suhelda programmiga visuaalsete elementide (aknad, nupud, tekstiväljad jms) kaudu, mitte ainult käsurea kaudu.
Tkinter: Python’i standardne GUI-teek, lihtne alustada, platvormiülene
CustomTkinter: moodsam ja visuaalselt atraktiivsem alternatiiv, pakub rohkem kohandamisvõimalusi
Põhimõtted GUI loomiseks:
Vidinate paigutamine aknasse
Sündmuste haldamine (nt nupuvajutused, hiire liigutused)
Robootika kolm põhiseadust on reeglid, mille mõtles välja ulmekirjanik Isaac Asimov. Reeglid ilmusid esmakordselt 1942. aastal Asimovi lühijutus “Runaround”. Need kolm reeglit on järgmised: 1. Robot ei tohi oma tegevuse ega tegevusetusega inimesele kahju teha. 2. Robot peab alluma inimese antud käsule, kui see ei lähe vastuollu esimese seadusega. 3. Robot peab kaitsma oma olemasolu, kuni see ei ole vastuolus esimese või teise seadusega. Peale nende kolme seaduse mõtles Asimov hiljem välja ka nullseaduse, mis on järgmine: 0. Robot ei tohi oma tegevuse või tegevusetusega inimkonnale kahju teha.
1. Mis on robot? Maailma esimene robot.
robot on mis tahes automaatselt töötav masin, mis asendab inimtööjõudu
2. Robotite arendamis põlvkonnad. Nimeta ja seleta:
Esimene põlvkond. Esimese põlvkonna robotid olid lihtsa ehitusega ning neil puudus ümbrusetaju ehk andurid. Oma tööd suutsid nad teha vaid mittemuutuvates tingimustes. Näiteks robotkäsi, mis tõstab õlletehases pudeleid kastidesse. Robot sooritab identseid liigutusi, aga kuna tal ei ole ümbritsevast keskkonnast mitte mingit signaali, st ta ei saa oma tegevuse kohta mittemingisugust tagasisidet, siis keskonna muutuse korral ta enam ei tööta korralikult. Selliseid roboteid tänapäeval enam ei loetagi õigeteks robotiteks.
Teine põlvkond. Teise põlvkonda kuuluvad robotid (vt joonis 2), mis suudavad andurite läbi reageerida keskkonnas toimuvatele muutustele. Kuna robot suudab keskkonda tunnetada, siis roboti efektiivsus oleneb suures osas tarkvarast, mis teda juhib. Ka antud kursuse käigus kasutatavad robotid kuuluvad kõik teise põlvkonda, kui kasutada neil andureid keskkonna tunnetamiseks ning programmeerida nad iseseisvalt tegutsema.
Kolmas põlvkond. Kolmas põlvkond on veel väljatöötamisel. Kolmanda põlvkonna robotid suudavad olukordi analüüsida ning õppida. Näiteks filmis „Mina, Robot” olev robot, mis suudab järeldusi teha ning sellest õppida, on kolmandast põlvkonnast.
Liigita järgnevad robotid põlvkondade kaupa:
nõudepesumasin – pole roboot
fikseeritud liikumisega – esimene
robotkäsi – teine
automaatselt süttiv lamp – kolmas
ise keeli õppiv robot – viies
Miks manipulaatorid ei ole robotid? – Neil on staatiline baas ja seetõttu tegutsevad nad piiratud tööruumis.
Mis on masinate eelised võrreldes inimtööjõuga? – Robotid ei väsi
Millised kolm tingimust peavad olema täidetud, et teatud masinat või seadet saaks robotiks nimetada? – tajub oma keskkonda, teeb arvutusi otsuste tegemiseks ja sooritab tegevusi reaalses maailmas.
Millistes Eesti tööstusettevõtetes võiksid mehhatroonikud töötada? – 10 lines
booooo
Robot – Robot on mehaaniline intelligentne seade, mis on võimeline iseseisvalt või välise abiga (inimese poolt) ülesandeid lahendama. Praktikas on robot tavaliselt elektromehhaaniline masin, mida juhib arvuti.
Robootika – Robootika on tehnikateaduse ja tehnoloogia valdkond, mis tegeleb robotite ehitamiseks vajaliku rakendusteaduse ja tehnoloogia arendamisega: disain, konstrueerimine, algoritmide väljatöötamine, robotite valmistamine ja rakenduste leidmine. Robootika on tihedalt seotud valdkondadega nagu elektroonika, tehnikateadused, mehaanika, mehhatroonika ja tarkvara arendus.
Manipulaator – Manipulaator on seade või masin, mida inimene juhib. Erinevalt väärarusaamadest pole manipulaatorid robotid, kuna neid juhib vahetult inimene. Manipulaatorid pole võimelised autonoomselt töötama.
Mehhatroonika – Mehhatroonika on mitmekesine tehnikateaduste haru, mis ühendab endas mehaanika, elektroonika, arvutitehnika, tarkvaratehnika, juhtimisteooria ja süsteemidisaini, eesmärgiga jõuda välja parema toote loomiseni.
Andur -Andur on seade, mis mõõdab mingit suurust ning teisendab selle elektriliseks signaaliks.
Täitur – Täitur on automaatjuhtimissüsteemi osa, mis regulaatorist saadava signaali järgi mõjutab juhitavat protsessi.
Kontroller – 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.
Parts
USB pistik (USB – Universal Serial Bus) USB pistiku abil saab Arduino arendusplaadile voolu anda ja programmikoodi laadida. Arduino kasutab USB B tüüpi pistikut.
Voolupesa Voolupessa saab ühendada voolujuhtme, millega Arduinole voolu anda.
GND (ground, maandus) pesad Nende pesade kaudu käib vooluringi maandamine.
5V pesa 5V pesa kaudu saab arendusplaadi külge ühendatavaid lisakomponente varustada 5-voldise vooluga. 3,3V pesa 3,3V pesa kaudu saab arendusplaadi külge ühendatavaid lisakomponente varustada 3,3-voldise vooluga.
Analoogpesad (A0–A5) Loetakse signaale analoogsensoritest ja teisendatakse need digitaalkujule. Analoogpesasid saab vajadusel kasutada ka signaali väljastamiseks.
Digitaalsed pesad (D0–D13) Nende abil saab lugeda ja väljastada digitaalsignaali.
Pulsilaiusmodulatsiooni (PWM) pesad Võimaldavad simuleerida analoogväljundit.
AREF pesa Kasulik juhul, kui on vaja lugeda analoogsisendit kindla võrdluspinge suhtes.
Lähtestamise nupp (Reset button) Taaskäivitab Arduino plaadile laaditud programmi. Kasulik testimisel ja koodi korduvaks käivitamiseks.
Toite LED tuli Läheb põlema, kui Arduino saab toidet. Kui LED ei sütti, võib plaat olla vigane.
TX ja RX LED tuled TX LED põleb andmete saatmisel, RX LED põleb andmete vastuvõtmisel.
ATmega328P mikrokontroller Juhtib Arduino Uno arendusplaadi tööd.
Pingeregulaator Reguleerib plaadile sisenevat pinget ja muudab selle sobivaks, kui sisendpinge on liiga suur.
Tanslation:
Elekter/Электричество
Elektriahi/Электрическая цепь
Рисованная и принципиальная схема(примеры)
Закон Ома
Параллельное и последовательное соединение(опиши основные принципы)
по проводникам и компонентам разного сопротивления,
R
Ом
от высокого потенциала,
+
«плюс»
к низкому потенциалу
–
«минус»
переносится заряд,
Q
Кулон
формируя электрический ток определённой силы,
I
Ампер
который совершает полезную работу,
W
Джоуль
превращаясь в другую энергию с некой скоростью.
P
Ватт
Быстрая сборка схем
Для надёжной сборки устройств создаются индивидуальные печатные платы. Если делать их самостоятельно, это займёт много времени и заставит повозиться с химикатами и паяльником. Индивидуальные платы с промышленным монтажом на заказ крайне дороги при малом тираже.Для быстрой сборки электрических схем без пайки и без проблем существует макетная плата. Её же называют макетной доской, макеткой или breadboard’ом.
Принцип работы
Под слоем пластика скрываются медные пластины-рельсы, выложенные по незамысловатому принципу:
Пример использования
Одну и ту же схему на макетной доске можно собрать множеством способов. Пример одной из конфигураций разберём для такой схемы:
На что стоит обратить внимание:
Цвета проводов, конечно же, значения не имеют. Однако хорошим тоном являетсяиспользование красных проводов для линии питания и чёрных или синих для линии земли
Мы подключили источник питания к длинным боковым рельсам. Это позволяет не тянуть кнему самому большое количество проводов с разных участков схемы, а задача по его заменеили перемещению сильно упрощается
Положение всей схемы на макетной доске не так важно. Важно взаимноеположение компонентов друг относительно друга
Схема по горизонтали побита на отдельные участки, которые легко воспринимать и изменятьпо отдельности
Конденсатор
Конденсатор — крошечный аккумулятор, который очень быстро заряжается и очень быстро разряжается.
Основные характеристики:
Ёмкость (номинал)
C
Фарад
Точность (допуск)
±
%
Максимальное напряжение
V
Вольт
Кодирование номинала
Номинал в пФ записан на корпусе. Первые 2 цифры — основание, 3-я — множитель.
Например:
220 = 22 × 100 пФ = 22 пФ
471 = 47 × 101 пФ = 470 пФ
103 = 10 × 103 пФ = 10 000 пФ = 10 нФ
104 = 10 × 104 пФ = 100 000 пФ = 100 нФ
Автоматическое управление
Замыкать и размыкать цепь, измерять напряжение также можно, не вручную, а автоматически, по заданному алгоритму при помощи запрограммированного микроконтроллера.
Существуют «сырые» микроконтроллеры, выполненные в виде одной микросхемы. Они дёшевы при массовом производстве, но их программирование и правильное подключение — нетривиальная задача для новичка.
Чтобы решить эту проблему, существуют готовые платы или, как ещё говорят, вычислительные платформы. Они делают процесс взаимодействия с микроконтроллером очень простым. Типичным представителем этого семейства являются платы Arduino.
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)
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)
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:
1. Mis on mehhatroonikasüsteemi peamised osad?
andurid, täiturid, kontrollerid ja mehaanilised komponendid.
2. Mis on kontrolleri funktsioon mehhatroonikasüsteemis?
töötleb kasutaja käske ja tajutud signaale, et genereerida käsusignaalid, mis saadetakse süsteemi ajamile.
3. Milliste seadmete abil saab robot informatsiooni?
infrapuna- (IR) andurid, ultraheliandurid ja mahtuvusandurid.
4. Tooge kaks näidet (kontrolleriga ühendatavat seadet), kus mikrokontrolleri füüsiline viik peaksolema seadistatud a) väljundiks ja b) sisendiks.
Auto turvapadi ja süsteemi skemaatiline mudel ja Mikrokontrollerid erinevates korpustes (vasakul) ja lihtne digitaalsignaal: loogiline 0 ja loogiline 1 (paremal)
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.
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.
Buzzer on helisignaalseade, mis võib olla mehaaniline, elektromehaaniline või piesoelektriline (lühendatult pieso). Tüüpiliste sumistite ja piiksude kasutusalad on näiteks häireseadmed, taimerid, rongid ja kasutaja sisendi, näiteks hiirekliki või klahvivajutuse kinnitamine.
DHT11 ja DHT22
Skeem:
Komponendid:
Arduino Uno
Arendusplaat
DHT11
DHT22
2 x 10 kΩ takisti
Mida need teevad:
DHT11– on lihtne ja väga odav digitaalne temperatuuri ja niiskuse andur. See kasutab ümbritseva õhu mõõtmiseks mahtuvuslikku niiskusandurit ja termistorit ning väljastab digitaalsignaali andmesidekontaktis (analoogsisendipinke ei ole vaja). Selle kasutamine on üsna lihtne, kuid nõuab andmete kogumiseks hoolikat ajastamist.
DHT22 – on lihtne ja odav digitaalne temperatuuri ja niiskuse andur. See kasutab ümbritseva õhu mõõtmiseks mahtuvuslikku niiskusandurit ja termistorit ning väljastab digitaalsignaali andmesideklemmile (analoogsisendiklemmid ei ole vajalikud).
KATSE 6:
Töö kirjeldus:
See on mini alarm, mis mõõdab temperatuuri ja valgust.
Kasutatud komponendid:
Arduino Uno
Arendusplaat
TMP36
Potentsiomeeter
10 kΩ takisti
220 Ω takisti
Piezo
Fotoresistor
LCD Ekraan
Töö protsess:
Komponendid (fotoresistor ja temperatuuriandur) on resnosniable mesuring väärtused konkreetsete käskude kutsuda. Nii meie projekti jaoks saab midagi vähemalt teha. Meie näites on sumisti. Siis väärtused või üks väärtused on liiga kõrge summeri mängib välja hädaolukorras. Vahepeal on naljakas laul mängib
Skeem:
Kood:
#include <LiquidCrystal.h>
const int potPin = A3;
const int tempPin = A4;
const int ldrPin = A5;
const int lcdRs = 11;
const int lcdEn = 12;
const int lcdD4 = 4;
const int lcdD5 = 5;
const int lcdD6 = 6;
const int lcdD7 = 7;
const int musicPin = 3;
const int alarmPin = 3;
const int switchThreshold = 512; // pot > mid → system ON
const float tempThreshold = 23.0; // °C
const int lightThreshold = 200; // ADC units
const int songLength = 18;
char notes[songLength + 1] = "cdfda ag cdfdg gf ";
int beats[songLength] = {
1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2
};
int tempo = 150; // madalam → kiirem
LiquidCrystal lcd(lcdRs, lcdEn, lcdD4, lcdD5, lcdD6, lcdD7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(musicPin, OUTPUT);
pinMode(alarmPin, OUTPUT);
}
void loop() {
// Lüliti/potentsiomeetri lugemine
int controlVal = analogRead(potPin);
bool systemOn = controlVal > switchThreshold;
if (!systemOn) {
// Süsteem OFF
noTone(musicPin);
noTone(alarmPin);
lcd.clear();
delay(500);
return;
}
// TMP36 teisendus: V = raw*(5.0/1023); Temp = (V - 0.5)*100
int rawTemp = analogRead(tempPin);
float voltage = rawTemp * (5.0 / 1023.0);
float tempC = (voltage - 0.5) * 100.0;
// Fototakisti lugemine
int lightVal = analogRead(ldrPin);
Serial.print(tempC, 1);
Serial.print(", ");
Serial.println(lightVal);
if (lightVal < lightThreshold) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tuvastatud ");
lcd.setCursor(0, 1);
lcd.print("pimedus ");
}
else if (tempC > tempThreshold) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp liiga ");
lcd.setCursor(0, 1);
lcd.print("korge! ");
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(lightVal);
}
// Alarmitingimus
if (tempC > tempThreshold || lightVal > lightThreshold) {
noTone(musicPin);
tone(alarmPin, 1000); // alarm heli
} else {
noTone(alarmPin);
tone(musicPin, 440); // taustatoon
}
if (lightVal < lightThreshold) {
noTone(musicPin);
noTone(alarmPin);
} else if (tempC > tempThreshold) {
noTone(musicPin);
playAlarmMelody();
} else {
noTone(alarmPin);
playMelody();
}
delay(500);
}
void playMelody() {
for (int i = 0; i < songLength; i++) {
int duration = beats[i] * tempo;
if (notes[i] == ' ') {
delay(duration);
} else {
tone(musicPin, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo / 10);
}
}
// Play alarm melody: 3 quick beeps
void playAlarmMelody() {
for (int i = 0; i < 3; i++) {
tone(alarmPin, 1000, 200);
delay(250);
}
}
// Map note character to frequency
int frequency(char note) {
const char names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};
const int freqs[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
return freqs[i];
}
}
return 0;
}
Video:
Uued funktsioonid:
int frequency(char note) – Teisendab noodi tähe (nt ‘c’) helisageduseks (nt 262 Hz).
tone() – Mängib heli kindlal viigul, sagedusel ja (valikuliselt) kestusel.
see on lihtne animatsioon 10-sekundilises tsüklis. See toimib nii, et konkreetsed pikslid lülitatakse sisse või välja. Kokkuvõttes: on võimalus näidata LED-ekraanil mida iganes soovite.
KATSE 5:
Töö kirjeldus:
see on temperatuuriandur aia jaoks, see annab välja uudiseid temperatursist
Asutatud komponendid:
Arduino Uno
TMP36 temperatuuriandur
Fototakisti
10 kΩ takisti
2 x 220 Ω takisti
16×2 LCD-ekraan
Ühenduskaablid
Arendusplaat
:3
Töö protsess:
see on LCD-ekraan, mis näitab iga 2 sekundi järel temperatuuri ja valguse olekut. See töötab nii, et sellel on nimekiri piltidest, mida näidatakse koos konkreetse väärtusega. Sellel on temperatuuri sensor ja fotoresistor. Nende abil annab LCD-ekraan teavet. Täpsemalt öeldes: Ekraan on kahes reas – tekst koos ikooniga ülemises reas, temperatuur ja kellaaeg alumises reas – ning iga viienda läbimise järel asendub tavaline vaade reklaamiaknaga. Töö on tehtud koos minu sõbra Maksimiga.
see on temperatuurianduri test. Siin pildil on näide, kuidas ühendada juhtmed temperatuurianduriga. See on saanud võimaluse näidata, milline on temperatuur.
Selles osas on servomootor. Servomootor on pöörlev või lineaarne ajam, mis võimaldab mehaanilises süsteemis nurk- või lineaarpositsiooni, kiiruse ja kiirenduse täpset juhtimist. See moodustab servomehhanismi osa ja koosneb sobivast mootorist, mis on ühendatud asendi tagasiside anduriga ja kontrolleriga. temperatuur
kood:
#include <Servo.h> // nii teavitame Arduino IDE-t vajadusest kasutada Servo.h teeki (подключаем дополнительную библиотеку)
// Как только вы "подключаете" библиотеку, так сразу получаете доступ к этим функциям. Вы можете найти список функций в библиотеке
// сервопривода в: http://arduino.cc/en/Reference/Servo. Большинство библиотек доступно из меню "Файл / примеры".
Servo servo1; // Peame looma servo objekti nimega servo1 (объект управления сервоприводом)
void setup()
{
// Сейчас мы прикрепим (attach) объект servo1 к цифровому пину 9. Если вы собираетесь управлять более чем одним
// сервоприводом, Вы должны прикрепить каждый новый объект серво к своему, отдельному порту, причем это порт должен быть цифровым.
servo1.attach(9); //ütleme Arduinole, et infosuhtlus servo-objektiga servo käib läbi klemmi number 9. Tegu on digitaal-klemmiga--PWM digitaalne osa! Kontrollime, kas skeemil kasutame sama klemmi.
}
void loop()
{
int position;
servo1.write(90); //pööramise nurk =90
delay(1000);
servo1.write(180); //pööramise nurk =180
delay(1000);
servo1.write(0); //pööramise nurk =0
delay(1000);
// servo positsiooni muutmine väike kiirusega pärisuunas:
for(position = 0; position < 180; position += 2)
{
servo1.write(position); // positsiooni muutmine
delay(20);
}
// servo positsiooni muutmine väike kiirusega vastupäeva:
for(position = 180; position >= 0; position -= 1)
{
servo1.write(position); // positsiooni muutmine
delay(20);
}
}
KATSE 4:
Töö kirjeldus:
Öövalgustuse loomine: lülitub sisse, kui on pime, lülitub välja, kui on valgus
Kasutatud komponendid:
Arduino Uno R3,
Positional Micro Servo,
White LED 3 tükki,
220 Ω Resistor 3 tükki,
Photoresistor,
10 kΩ Resistor
Töö protsess:
mulle ja mu sõbrale Maksimile tehti ülesandeks teha „nutikas aed“ (ma ei osanud seda lihtsamalt nimetada). Seal on süsteem, mis avab akna, kui ruumis on liiga kuum (me lihtsalt panime käe soojusandurile) ja kui on liiga pime, siis töötavad tuled.
Skeem:
Kood:
#include <Servo.h>
const int tempPin = A0; // Temperatuuriandur (LM35, TMP36 jne)
const int ldrPin = A1; // Fototakisti (LDR)
const int ledPin = 10; // LEDi digitaalne väljund
const int servoPin = 9; // Servo mootor SG90
Servo servo;
int currentAngle = 0;
void setup() {
servo.attach(servoPin);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// --- Temperatuuri lugemine ja teisendamine kraadideks ---
int tempValue = analogRead(tempPin);
float voltage = tempValue * (5.0 / 1023.0);
float temperature = (voltage - 0.5) * 100.0; // TMP36 puhul
// --- Servonurga määramine temperatuuri põhjal ---
int targetAngle;
if (temperature <= 25) {
targetAngle = 0;
} else {
targetAngle = 180;
}
// --- Servo liigutamine sujuvalt ---
if (currentAngle < targetAngle) {
currentAngle += 3; // bigger step
if (currentAngle > targetAngle) currentAngle = targetAngle;
} else if (currentAngle > targetAngle) {
currentAngle -= 3;
if (currentAngle < targetAngle) currentAngle = targetAngle;
}
servo.write(currentAngle);
delay(20); // sujuv liikumine
// --- Valgustaseme lugemine ja LEDi juhtimine ---
int lightLevel = analogRead(ldrPin);
if (lightLevel > 500) {
digitalWrite(ledPin, HIGH); // LED süttib, kui on pime
} else {
digitalWrite(ledPin, LOW); // LED kustub, kui valgust piisavalt
}
// --- Andmete näitamine Serial Monitoris ---
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print(" C, Light: ");
Serial.print(lightLevel);
Serial.print(", Servo angle: ");
Serial.println(currentAngle);
}
Video:
Uued funktsioonid:
Servo servo – Loob servo objekti. servo.attach(pin) – Seob servomootori määratud piniga #include <Servo.h> – Lisab servo raamatukogu. servo.write(angle); – Liigutab servo määratud nurka (0–180°). float – koma numbrid