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
Meil on kaks nuppu, millest üks vastutab lambi sisselülitamise eest ja teine on vastutav selle väljalülitamise eest. Peamine adea on see, et siis kasutaja tahab valgust või mitte
kood:
const int button1Pin = 2; //viik kunu on ühebdatud nupp1
const int button2Pin = 3; //viik kuhu on ühendatud nupp2
const int ledPin = 13;
void setup()
{
pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(ledPin, OUTPUT); //algväärtuse LED viigu väljundiks
}
void loop()
{
int button1State, button2State; //nupu oleku muutujad
button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse(HIGH või LOW)
button2State = digitalRead(button2Pin);
if (((button1State == LOW) || (button2State == LOW)) // kui nupu on alla vajutatud
&& !
((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud
{
digitalWrite(ledPin, HIGH); // lülitame LED sisse
}
else
{
digitalWrite(ledPin, LOW); // lülitame LED välja
}
}
Ülesanne Photoresistoriga
skeem:
kirjeldus
siin on fotoresistor. Fotoresistori kasutatakse ddedektorit valguse ja teha midagi, siis on see tume või valgus. Siin töötab fotoresistor nii: kui on pime, siis süttib lamp, kui on pime, siis lülitab lamp välja.
kood:
const int sensorPin = 0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // //Serial monitori seadistamine
}
void loop()
{
// AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).
// AnalogWrite(), kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).
lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
// Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, "from" 0-1023 "to" 0-255.
// Constrain() saed muutujale kindlad piirväärtused.
// Näiteks: kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:.
// lightLevel = constrain(lightLevel, 0, 255);
manualTune(); //
//autoTune(); //
analogWrite(ledPin, lightLevel);
// Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник!
Serial.print(lightLevel); // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))
Serial.println("");
delay(1000);
}
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)).
lightLevel = constrain(lightLevel, 0, 255);
}
void autoTune()
{
if (lightLevel < low)
{
low = lightLevel;
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+10, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
katse 3
skeem:
Töö kirjeldus:
öövalgustus kahe režiimiga: päevarežiim ja öörežiim
Kasutatud komponendid:
Arduino Uno
3x ledid
Fotoristor
Arendusplaat
3x 220kΩ takistit
1x 10kΩ takisti
8x Juhtme
Töö protsess:
see öine valgus töötab koosneb 3 ledist, mõnest resistrsist ja fotorestorist. Põhiidee on see, et lambid põlevad siis, kui on pime, ja lülituvad välja siis, kui on pime.
kood:
const int ldrPin = A1; // Photoresistor (LDR) connected to A1
const int ledPin1 = 10; // LED 1 (Digital)
const int ledPin2 = 11; // LED 2 (Digital)
const int ledPin3 = 12; // LED 3 (PWM for brightness)
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
Serial.begin(9600); // Start serial communication
}
void loop() {
// Read light level from LDR (0 = bright, 1023 = dark)
int lightLevel = analogRead(ldrPin);
// --- Control LED 1 (ON in complete darkness) ---
if (lightLevel > 800) {
digitalWrite(ledPin1, HIGH); // Turn ON LED 1
} else {
digitalWrite(ledPin1, LOW); // Turn OFF LED 1
}
// --- Control LED 2 (ON in moderate darkness) ---
if (lightLevel > 500) {
digitalWrite(ledPin2, HIGH); // Turn ON LED 2
} else {
digitalWrite(ledPin2, LOW); // Turn OFF LED 2
}
// --- Control LED 3 (PWM brightness, dim when dark) ---
// Map LDR reading (200-800) to PWM brightness (0-255)
int brightness = map(lightLevel, 200, 800, 0, 255);
brightness = constrain(brightness, 0, 255); // Limit to 0-255
analogWrite(ledPin3, brightness); // Set LED 3 brightness
// Print light level to Serial Monitor
Serial.print("Light Level: ");
Serial.println(lightLevel);
delay(100); // Small delay for stability
}
Uued funktsioonid:
if (lightLevel > lightThreshold) – Kui valgustase on suurem kui läviväärtus, siis täidetakse esimene koodiblokk.
Video:
Uued funktsioonid:
if (lightLevel > lightThreshold) – Kui valgustase on suurem kui läviväärtus, siis täidetakse esimene koodiblokk.
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!
const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
int DISPLAY_TIME = 100; // värvimuutuse kiirus
void setup()
{
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
mainColors();
showSpectrum();
}
void mainColors()
{
// Kõik LEDid on välja lülitatud
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
//Põleb punane
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
// Põleb roheline
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
// Sinine on sisse lülitatud
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
// Kollane.
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(1000);
// Lilla
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
//Roosa
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
//Valge ehk kõik on sisse lülitatud
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(1000);
}
// Vikerkaar.
void showSpectrum()
{
int x;
for (x = 0; x < 768; x++)
{
showRGB(x); //
delay(10); // paus 0,001 sek
}
}
// ShowRGB() põhivärvid:
// 0 = punane
// 255 = roheline
// 511 = sinine
// 767 = jälle punane
void showRGB(int color)
{
int redIntensity;
int greenIntensity;
int blueIntensity;
if (color <= 255)
{
redIntensity = 255 - color; // lülitakse välja punane
greenIntensity = color; // lülitakse sisse roheline
blueIntensity = 0; // sinine on välja lülitatud
}
else if (color <= 511)
{
redIntensity = 0; // punane on välja lülitatud
greenIntensity = 255 - (color - 256);
blueIntensity = (color - 256);
}
else if (color >= 512)
{
redIntensity = (color - 512);
greenIntensity = 0;
blueIntensity = 255 - (color - 512);
}
analogWrite(RED_PIN, redIntensity); // punase LED´i sujuv ümberlülitamine
analogWrite(BLUE_PIN, blueIntensity);
analogWrite(GREEN_PIN, greenIntensity);
}
Põhimõtteliselt toimib see nii, et see silub üleminekuid värvide vahel.
Katse 1 / Sissetöö
Mida ja miks?
Põhimõtteliselt see, mida ma tegin, on valgusfoor, et saada kogemusi robotite ehitamise alustega.
Selle töö jaoks kasutasin saiti nimega “Tinkercard“.
Mida ma kasutasin?
8 juhet,
5 resisotorit,
2 LED RBG lapmit
(allpool on pilt)
Mida nad on?
RGB LED on LED-moodul, mis suudab toota peaaegu kõiki värve, kasutades neid kolme peamist lisavärvi: Punane, roheline ja sinine.
Resistor on passiivne kahetermiline elektrooniline komponent, mis rakendab elektritakistust vooluahela elemendina.
Juhe on painduv juht, mida kasutatakse elektrienergia ja informatsiooni edastamiseks.
Kuidas see töötab?
Mis kõik komponendid võimu läheb läbi juhtmed ja tuled üles tuled. Takistid kontrollivad, kui palju energiat läheb lampidesse (ja nii ei põle).
(allpool on video nagu see toimib tegelikus elus)
Kood:
// esimene RGB-LED
const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
// teine RGB-LED
const int RED_PIN_2 = 7;
const int GREEN_PIN_2 = 5;
const int BLUE_PIN_2 = 6;
siin ma panen mitu värvid ja läbi, mida pinadesse minna
// Traffic light timings (in milliseconds)
const int RED_TIME = 5000; // 5 seconds red
const int RED_YELLOW_TIME = 2000; // 2 seconds red+yellow
const int GREEN_TIME = 5000; // 5 seconds green
const int YELLOW_TIME = 2000; // 2 seconds yellow
Ma olin laisk panema mingeid numbreid sinna, nii et ma olen pannud need omadused
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(RED_PIN_2, OUTPUT);
pinMode(GREEN_PIN_2, OUTPUT);
// Start with all lights off
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}
pin-režiimide panemine ja kõigi tulede väljalülitamine
Esimene lamp on suur, see suunab mulle pärast ühte või teist konkreetset tegevust näitab, mida teine lamp peaks tegema. kui Sa tahad edasi vaadata vaata kommentaare
Video: 。◕‿‿◕。
Uued funktsioonid: void loop()
(See on sisseehitatud Arduino funktsioon, mis käivitub korduvalt pärast setup() funktsiooni. Siia kirjutatakse programmi põhiloogika.)
digitalWrite(pin, value)
(See funktsioon seab digitaalse pin’i väärtuseks kas HIGH (sees) või LOW(väljas). Seda kasutatakse näiteks LED-ide sisse või välja lülitamiseks.)
delay(ms)
(Peatab programmi kindlaks ajaks millisekundites. Näiteks delay(1000) peatab programmi üheks sekundiks)
CREATE USER 'Hussein'@'localhost' IDENTIFIED VIA mysql_native_password USING '***';GRANT USAGE ON *.* TO 'Hussein'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Lisa akasutaja nimega sekretaar /parool -kala, kes saab retseptiraamatud vaadata ja uuendata andmeid(SELECT/UPTADE)
Lisa kasutaja nimega sekretaar / parool -kala, kes saab retseptiraamat vaadata ja uuendata andmeid(SELECT/UPTADE)