DIY: Älykäs LED-ohjain

Bongit, piiput, ruokaohjeet jne.
Suomies
Viestit: 41
Liittynyt: 27.10.2016

DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 11.9.2017 4:06

Kun MeanWell on ollut niin suosiollinen ja tehnyt oivallisia led-ajureita, joita voi dimmata tarpeen mukaan ja moni toiveikkaana on sijoittanut B-malliin 3-in-1-dimming ominaisuuden takia, niin pälkähti tuossa mieleen näperrellä jotain kivaa automatiikkaa siihen kylkeen. En nyt tiedä miten paljon täällä on kiinnostunutta porukkaa tällaiseen projektiin, niin pistän vaikka alustavasti osalistaa(*päivitetty 17.9.2017) ja katsotaan sitten sen jälkeen jatkanko täällä vai/ja kansainvälisillä foorumeilla.

Tähän väliin kiitokset tämän foorumin DIY-led-ketjulle, sekä Roll it up -foorumin monille asiantunteville kirjoittajille. Lisäksi on kiitettävä Arduino-yhteisöä ja disclaimerina pahoiteltava, että tässä käytetään nyt piraattiosia. Syy on se, että tarkoitus on tehdä mahdollisimman halvalla ja helposti. Kukin voi omantunnon mukaan ostaa aitoa, tukea yhteisöä ja saada samalla laadukkaammista osista valmistettua tekniikkaa.


OSA 1: Osien tilaaminen

Osavalinnoista pari sanaa: Kuten elämässä yleensä, niin tässäkin on miltei loputtomasti eri vaihtoehtoja. Haluaisin pitää paketin mahdollisimman simppelinä ja antaa vain yhden vaihtoehdon, mutta olosuhteiden pakosta listaan pari eri vaihtoehtoa, koska jotkin omat osat on vähän epästandardeja.

Lankun suhteen aloittelijalle suosittelen ehdottomasti Arduino Unoa ja siihen liitettävää protolevyä. Aivan täysin ilman kolvaamista ei oikein silläkään kunnollista saa, mutta jos pari liitosta onnistuu, niin pääsee jo pitkälle. Toisaalta, jos kolvaaminen on jo tuttua puuhaa, niin Nanon valitsemalla säästää tilaa ja vähän rahaakin.

Näytön ja näppäimistön suhteen valinta on vähän hankalampi. Itsellä oli nurkissa pari ylimääräistä mininäyttöä ja nappia, niin laitoin ne. Jos uudet ostaisin, niin ostaisin ehkä vähän isomman näytön ja valmiin näppäimistön tai ehkä jopa yhdistelmä-shieldin. (Nämä yhdistelmä-shieldit tosin ovat usein melko rajoittavia isommissa projekteissa, vaikka alkuun pääsee nopeasti ja halvalla. Tämä projekti on toistaiseksi yksinkertainen ja voinee onnistua tuollaisella shieldillä, mutta jos haluaa laajentaa jatkossa lisäsensoreilla tms., niin nämä shieldit on vain tiellä.) Ohjeesta poikkeavaa näyttöä valitessa kannattaa ottaa huomioon, että tuo esimerkissä käytetty näyttö näyttää 20x4 merkkiä, joten käyttöliittymää joutunee sovittamaan vähän uudestaan, jos ei käytä sitä.

Nappien puolesta sanon suoraan, että otin haasteena etsiä rajoja ja toteutin vain kahdella napilla. Jos käyttöliittymää haluaa yhtään helpommaksi, niin kannattaa nappeja olla vähintään kolme-neljä. Tästä syystä en edes linkkaa itse käyttämiäni nappeja, vaan seuraava mallikappale tehdään neljällä napilla.

(kw: xxx yyy) tarkoittaa siis hakusanoja joita voi käyttää linkkien kuoltua.

Päivitys: Pengoin laatikoita ja sain jonkinlaisen päätöksen aikaiseksi, että mistä osista mallikappale nyt tehdään. Tasapainoillaan nyt vähän käytännöllisyyden ja hintatietoisuuden välimaastossa, ja valitaan suositellut osavalinnat, joille luvataan täysi tuki. Muiden kanssa voi joutua vähän maksamaan ekstraa tai säätämään.


Peruslista:

-Arduino:
Uno (kw: arduino uno)
(2.11€)
TAI
Nano (kw: arduino nano)
(2.05€)


-DHT21-anturi (kw: DHT21 AM2301)
(2.04€)

-Vastuksia (n. 220Ohm, 5,1kOhm ja 10kOhm) (kw: resistor assortment)
(0.96€)

-Optocoupleri, esim. EL817 (kw: EL817)
(0.80€)

-CCTV-kaapeli (kw: cctv cable)
(3.07€)

-Wago-liittimet* (kw: wago)
(1.10€)
*) Jos haluat dimmata useita drivereitä yhdellä ohjaimella, niin kannattaa ottaa 3- tai 5-johtimen wagoja. Muuten riittää 2:n johtimen; joita kannattaa kyllä tilata joka tapauksessa – niitä ei ole koskaan liikaa.

-I2C Näyttö (kw: iic/i2c display)
20x4 merkin näyttö
(4.00€)
TAI
16x2 merkin näyttö
(1.92€)
TAI
(Esimerkissä käytettävä mininäyttö)
(2.41€)
TAI
(Näyttö-näppis-shield:)
(1.95€)

-4:n napin näppäimistö* (kw: arduino keypad)
(1.07€) (*Linkki korjattu)
TAI
-5 nappia+ledi
(1.16€)


-Kotelo* (kw: plastic project box)
Unolle
(3.37€)
TAI
Nanolle (ulkoisella virtalähteellä)
(1.43€)
TAI
Nanolle (virtalähde samaan boksiin)
(2.73€)

*)Huomautuksena, että nämä kotelot on varustettu läpinäkyvällä kannella, joka on kaksipiippuinen juttu: Jos boksin laittaa kasvatustilan sisälle, niin Arduinon ledien vilkuttelu voi häiritä pimeäjaksoa. Samoja koteloita löytyy siis myös harmaalla kannella, mutta niihin täytyy sitten kovertaa näytölle reikä ja käytännössä uhrata roisketiiviys samalla.


-Vedonpoistoläpivienti (kw: cable gland PG11/16)
PG11 (=useampi pieni läpivienti)
(0.82€)
TAI
PG16 (=useammalle piuhalle yksi iso läpivienti)
(1.28€)


-Hyppylankoja* (kw: dupont 10cm/20cm)
(1.60€)
*)Unon kanssa tarvitset lähinnä M-M ja M-F, Nanon kanssa F-F ja M-F

-Arduino protoilulankku (kw: arduino protoboard)
Pin-headereilla (hyppylangoille)
(1.33€)
TAI
Sokeripaloilla
(2.30€)

-Pin-kampoja (kw: pin header)
(0.99€)

-Kutistesukkia (kw: shrink tube)
(1.16€)

-Yleismittari (kw: digital multimeter /DMM +continuity)
(5.49€)

(-Virtalähde)* (kw: AC DC 12V)
(2.07€)
*)Suluissa siksi, että ensisijaisesti suosittelisin hyödyntämään jotain vanhaa ATX-poweria, sillä niin halvalla ei saa niin hyvää virtalähdettä yhtään mistään. Näitä myydään 5-10€ Tori.fi:ssä ja välillä saa jopa ilmaiseksi. Toissijaisesti voi käyttää laadukasta, esim. MeanWellin 12V LPV-sarjalaista - vielä kivempi jos sellaiset löytyy ledien tuulettimen perästä jo valmiiksi. Viimeisenä vaihtoehtona voi kokeilla onneaan Ebayn halpojen virtalähteiden kanssa, mutta mitään takeita ei ole toimivatko ollenkaan tähän tarkoitukseen. (Esimerkiksi sellainen kännykkälaturin näköinen halpisvirtalähde aiheutti niin pahat häiriöt, että jäi anturi lukematta.) Speksien puolesta 12V >1A pitäisi olla enemmän kuin tarpeeksi.

YHTEENSÄ n. 30€


Lisälista (hifistelyyn ja elämän helpottamiseksi):


-Kytkentälevyä (kw: stripboard)
(1.64€)

-Kunnolliset kolvaustarvikkeet* (kw: weller/stannol)
(30-50€)
*) Kunnollisen kolvaustarvikkeen tunnistaa siitä, että siinä lukee kyljessä joko Weller tai Stannol. Tärkeysjärjestyksessä: Kunnon tina, kolmijalka, kunnon kolvi, juoksute. Jos joudut tinkimään, niin aloita em. Listan häntäpäästä.

-Teräsvilla kolvin puhdistukseen (kw: solder steel sponge)
(0.82€)

-Tinaimunauha (kolvausvirheiden korjaamiseen; kw: solder wick)
(0.75€)

-Liitin ulkoiselle virtalähteelle (kw: dc jack panel)
(0.86€)
JA
-Urosliitin esim. ATX-virtalähteen Molexin tilalle. (kw: dc male jack)
(0.80€)

YHTEENSÄ n. 5€ ja ne 30-50€ kolvaustarvikkeet

Ettei tämä nyt ihan osalistaksi jäisi, niin pistetään yksi kuvakin maistiaisiksi:
Kuva
(Tehoprosenteissa pieni bugi, joka sittemmin korjattu)

Osien saapumista odotellessa voi käydä ottamassa pikakurssin Arduinon ohjelmoinnista osoitteessa http://www.arduino.cc ja sähkötekniikan alkeista vaikka Googlesta, niin päästään hyvin vauhtiin, jos/kun jaksan joku päivä naputella seuraavan osan.


OSA 2: Kytkentäkaavio

No perhana, kun täällä oltiin kärppänä tuohon aikaan yöstä, niin piti vielä pieni ponnistus tehdä tälle aamulle.

Alustava suunnitelma

Jotta hommassa pysyisi tolkku, niin alkuun on hyvä luonnostella paperille, että mitäs komponentteja sitä pitäisi yhteen liittää. Esimerkkikuva tässä:
Kuva
(Menin jopa vähän turhankin yksityiskohtaiseksi jo tässä kuvassa. Yleensä piirrän tässä vaiheessa vain komponentit ja signaalipiuhat, mutta nyt kun teen tätä takaperin, niin oli helppo vähän oikoa. EDIT: Dimmauspiiri meni täysin uusiksi, kuva vain malliksi)


Tässä vaiheessa voi myös vähän laskeskella, että miten monta pinniä Arduinosta käytetään ja miten monta 5V&GND-haaroitusta tarvitsee. DHT-anturi tarvitsee yhden signaalin ja lisäksi +5Vin&GND. Keypadin jokainen nappi tarvitsee yhden signaalin ja lisäksi yhden yhteisen GND-liitoksen. LCD tarvitsee I2C-signaalin, joka kulkee kahta johdinta pitkin (SCL&SDA) ja lisäksi +5V&GND.

Yhteensä siis neljällä napilla käytettäisiin 6 signaalipinniä, joista yhden täytyy olla PWM-pin. +5V&GND pitää haaroittaa kolmeksi tai neljäksi (5V&GND-rails).


Hyödyllinen idiootti kirjoitti:Mitä ihmettä nuo "Pullups":it on. Nyt sitä sähkötekniikan perustetta pikakertaus: Aina kun puhutaan esim. +5V, niin se ei tarkoita, että GND = 0, vaan yksinkertaisesti sitä, että positiivisen navan jännite on 5V korkeampi negatiiviseen nähden. Arduino yksinkertaisimmillaan aistii, että onko pinni "HIGH" (= +5V) vai "LOW (=GND). Jos linjalla ei ole signaalia tai pullup-vastusta, niin pinnin jännite "kelluu", eli Arduino aistii satunnaisia arvoja (johtuen häiriösignaaleista, vuodoista yms.). Kun signaalipinni yhdistetään sopivalla vastuksella +5V-kiskoon, niin signaalin puuttuessa pinni palautuu oletusarvoisesti aina "HIGH"-tilaan. Sama homma toisin päin, eli kytketään signaalipinnin ja GND:n väliin sopiva vastus (pulldown-resistor), niin pinni palautuu oletusarvoisesti "LOW"-tilaan signaalin puuttuessa. Toisinaan nämä pullup- ja pulldown-vastukset ovat jopa välttämättömiä laitteen oikealle toiminnalle (DHT-anturi). Toisinaan taas niiden tehtävä on parantaa viansietoa ja häiriönsuodatusta. Esimerkiksi voidaan hyvinkin yksinkertaisesti asettaa niin, että jos Arduinon PWM-signaali puuttuu, niin dimmeri antaa joko 0% tai 100% tehoa ulos. (Välimuodot vähän hankalampia, mutta käytännössä tulee tarpeen).

Otetaanpa tähän väliin pieni havainnollistava esimerkki veden avulla. Vesi on siitä kiva elementti, että se liikkuu sähkön kaltaisesti, kun vähän pistää mielikuvitusta peliin.

Saimaan-kanavan sulkuvahdit Sutela ja Salminen olivat viettämässä Juhannusta Sutelan kesämökillä. Salminen päihtyi siinä talon antimista sen verran, että haastoi Sutelan merimiespainiin häviten kaikki kolme uusintaakin. Lopulta erehtyi Salminen vielä kähminmään Sutelan vaimoa saunan jälkeen. Sutela ei kuitenkaan hennonnut fyysisesti kurittaa lapsuudenystäväänsä, joten sopivat, että Sutela saa määrätä Salmiselle rangaistuksen, kunhan krapulasta selviävät.

Sutela syntymästään lähtien vittumaisena miehenä tiesi, että Salmisen sulut olivat huollossa koko heinäkuun ja silläpä määräsi rangaistukseksi Salmisen seisomaan aina päällään, kun Salmisen sulkuallas on "täynnä". Jottei rangaistus olisi kuitenkaan ihan kohtuuton, Salmisen sulun ohivuotoputki avattiin, ettei Salmisen tarvitse koko heinäkuuta päällään viettää. Ei kuitenkaan siinä krapulassa tullut mieleen sen tarkemmin määritellä, että mitä "täynnä" tarkoittaa.

Kuva

Vasemmalla ylhäällä Sutela kärkkyy kostoaan pitäen sulkunsa vielä kiinni. Oikealla ylhäällä Salminen heitti voltin päälleen, kun ennaltasovitut kriteerit täyttyivät ja Sutela myhäilee tyydyttyneisyyden vallassa. Oikealla alhaalla sulkuallas on puolillaan, eikä Salminen tiedä oikein miten päin olisi - kun ei kerran määritelty kuin "tyhjä" tai "täynnä". Tästä ei Salminen pääsisi yli eikä ympäri, ellei ohivuotoputki ratkaisisi tilannetta pintaa laskemalla. Vasemmalla alhaalla Salmisen sulkuallas on jo tyhjentynyt, mutta taivaalle on ilmestynyt tumma pilvi, joka aiheuttaa systeemiin häiriön: Vettä sataa altaaseen, vaikka Sutelan sulku on kiinni. Ohivuotoputki päästää kuitenkin sadeveden Salmisen sulun ohi niin, että veden pinta pysyy selkeästi "tyhjän" puolella ja Salminen saa torottaa vaihteeksi jaloillaan.

No sepäs olikin selkeää, mutta tavallaan tämä ensimmäinen malli on kokonaan päälaellaan, jos ajatellaan tätä kyseistä projektia. Tässähän nimittäin käytetään pullup-vastuksia ja napitkin liittyvät jotenkin hämärästi aiheeseen. Otetaanpa toinen esimerkki:

Tuli elokuu, mutta Sutelaa vähän korpeaa edelleen Salmisen taannoinen käytös. Sutela sai siirron alemmalle sululle, mutta Salmisen sulun remontti ei ole vieläkään valmistunut. Rangaistuksen ehdot siis käännettiin toisin päin: Aina kun Sutelan patoallas on tyhjä, niin Salminen seisoo päällään. Sutela toimii tässä esimerkissä painonappina, Salminen Arduinona ja ohivuotoputki (ylävirrassa) kuvaa pullup-vastusta.

Kuva

Vasemmalla ylhäällä Sutela odottaa otollista hetkeä. Oikealla ylhäällä Sutela avaa sulkunsa (=painaa nappia) ja Salminen ähkäisyn säestämänä nousee tottuneesti seisomaan päälleen (=mikrokontrolleri reagoi), vaikka ohivuotoputki vähän altaaseen liruttaakin. Oikealla alhaalla Salminen on taas pihalla kuin lintulauta, kun ei vieläkään olla päästy yhteisymmärrykseen, että mitä pitäisi tehdä, kun allas on puolillaan. Onneksi ratkaisu tulee taas pinnan noustua ohivuotoputken ansiosta. Vasemmalla alhaalla Sutelan sulkuun ilmaantuu vuoto, mutta Salmisen sulun ohivuotoputki pitää altaan "täynnä" häiriöstä huolimatta ja Salmisen jaloillaan.


Suunnitelma astetta tarkemmaksi

Oolrait. Sitten kun on saatu luonnosteltua kaikki palikat samalle paperille ja on jo jonkilainen kuva siitä, mitä tuleman pitää, niin voidaan siirtyä vähän yksityiskohtaisemmalle tasolle:
Kuva

Sähkötekniikkaa tunteville kuva lienee hienoista suttuisuuttaan lukuunottamatta melko selkeä. Täytyy myöntää, etten oikein edes osaa kertoa hirveästi tästä, joten jätän lisätiedot kysymysten varaan. Huomautan kuitenkin, että nyt kyseessä on vasta alustava suunnitelma eikä sen perusteella pidä vielä mennä kytkemään yhtään mitään.

Erityisesti R6:n tarpeellisuus on hyvin kyseenalainen, jos ei jopa vaarallinen (taitaa napsauttaa valot 100%:lle vikatilanteessa), mutta en jaksa nyt miettiä tätä tämän syvällisemmin. Jättäkää mielummin vaikka pois, jos ette ymmärrä mitä se tekee. Lisäksi R1-R4 ovat optionaalisia, eli parantavat kyllä häiriösuodatusta, mutta Arduinossa on myös sisäänrakennettuna napeille välttävät pullup-vastukset. R5 on aika ehdoton, vaikka anturi saattaa lyhyillä piuhoilla toimia ilmankin sitä.

Hyödyllinen idiootti kirjoitti:Hetkinen nyt. Mitenkäs tuo pullup-vastus liittyy nyt tuohon DHT-sensoriin, kun eihän se ole nappi?

Tuli syys. Vanhat toverukset Salminen ja Sutela hautasivat sotakirveensä. Oikeastaan Sutelaa jopa hieman kadutti miten kaltoin oli vanhaa ystäväänsä kohdellut kostonvimmassaan. Tulipa Sutela luvanneeksi Salmiselle, että viikonlopuksi voisi järjestyä pullo tai pari kirkastettua. Sitä samaa, joka Salmisen juhlakuntoa Juhannuksenakin siivitti, ja jonka Sutelan isäpappa oli kaikennähneillä käsillään omakätisesti tiputtanut. Olihan se miehen elämän tarkoitus, sillä hän oli kuuluisan Kiteen pontikkakoplan viimeinen veteraani. Sutelakin oli vanha tekijä, joten ei periaatteesta hoitanut mitään bisneksiä puhelimessa - ei isoja tai pieniä.

Sutela ei tosin ollut ihan varma, että miten monta pulloa onnistuisi papan varastosta nappaamaan, joten he sopivat ovelan koodikielen: Sovittiin, että Sutela pitää sulkunsa kiinni, jos viinaa ei ole ollenkaan. Jos viinaa on vain yksi pullo, niin Sutela avaa sulkuaan kahden tunnin välein, ja jos viinaa on yllin kyllin, niin Sutela avaa sulkuaan kerran tunnissa. Ohivuotoputki (=pullup-vastus) täyttää altaan aina täyteen sulkujen avaamisen välillä. Sutela esittää tässä DHT-sensoria ja Salminen taas Arduinon roolissa.

Kuva

Salminen tarkkailee sulultaan veden pinnan muutoksia ja ottaa kellosta aikaa miten usein pinta laskee ja miten usein nousee. Maagisia matemaatikon kykyjään käyttäen Salminen saa vastauksen takaraivossaan jyskyttävään kysymykseen:"Ollako viinaa, vaiko eikö olla? - kas siinä vasta julma pulma." Sutela ei voi viestiä Salmiselle mitenkään muuten kuin laskemalla veden pintaa (=johtaa jännite GND:hen -> pin = "LOW"). Allas täyttyy Sutelasta riippumatta uudelleen, ja jos ei täyttyisi, niin Salmisen olisi mahdoton tarkkailla muutoksia altaan pinnantasossa.


Varsinaisen dimmauspiirin tarkempi sielunelämä jää nyt odottamaan jatko-osia ja tarkempia kuvia.
Kotiläksyiksi jäi tällä kertaa seuraavat asiat:
1.(1p) Piirrä pull-up-piiri uudestaan niin, että siinä on myös viides nappi kytkettynä.
2.(3p) Palkkasit kielloista huolimatta pienet kiinalaiset kolvaamaan piirin kasaan kuvan perusteella. Työn jälki on täydellistä ja kaikki toimii muuten, mutta näppäimistö ei reagoi mitenkään. Miksi?
3.(5p) Löydätkö piiristä jotain muita vikoja?
+Bonus: KVG-kuvahausta "Arduino Uno pinout diagram"

========================================================================================


Noniin, jatketaanpas. Tällä kertaahan meillä taisi ollakin luvassa pistarit vastusten värikoodeista, jos en väärin muista?

Kuva

Eikun joo, eihän niitä kukaan täysijärkinen jaksa enää opetella, kun “nauhoissa” on merkinnät ihan selkokielellä, ja jos ei selvää saa, niin voi ottaa yleismittarin käteen. Oikeastaan aloittelijan tarvitsee osata yleismittarilla kaksi asiaa, niin elämä helpottuu elektroniikan suhteen merkittävästi: Johtavuuden ja vastuksen mittaaminen.

Johtavuuden mittaamisesta yleismittarilla

Näemmä tuossa ensimmäisessä poimimassani yleismittarissa ei ollut kätevää summeria johtavuuden ilmaisemiseen, niin laitoin pari euroa kalliimman tilalle. Periaatteessa homman voi tehdä vaikka valokynällä, mutta en ole sellaista ikinä oppinut käyttämään, kun aina käytössä on ollut yleismittari.

Kuva

Johtavuus mitataan yksinkertaisesti niin, että yleismittarin valitsin asetetaan osoittamaan “äänimerkin” kuvaa. Kokeilemalla antureita yhteen pitäisi kuulua summeri. (Jos ei kuulu, niin toisen piuhan paikkaa siirtämällä pienemmän sulakkeen puolelle pitäisi viimeistään kuulua.) Johtavuuden mittaaminen on erittäin suositeltavaa suorittaa aina kolvausten jälkeen, niin huomaa mahdolliset huonot liitokset ja oikosulkuja aiheuttavat tinaroiskeet jo ennen kuin kytkee mitään arvokkaampaa piiriin kiinni. Ensin ne oikosulut: Mittaat erityisen tarkasti, että mikään vierekkäinen “kisko” ei johda naapuriin (=aiheuta äänimerkkiä). Jotkin komponentit voivat aiheuttaa “asiaan kuuluvaa vuotoa” - lähinnä puolijohteet (diodit, transistorit ja myös optocoupler) ja muuntajat. Tässä ketjussa tekemistämme liitännöistä siis kyseeseen tulee lähinnä optocoupler, mutta yritän mainita siitä ainoasta sallitusta vuodosta sitten tarkemmin, kun osaa kolvataan paikoilleen.

Tässä vaiheessa palikkaa uskaltaa jo kokeilla, jos ei millään malta, mutta hyvä olisi ensin mitata myös, että sähkö myös siirtyy oletetusti piirin läpi (=ei kontaktihäiriöitä / suunnitteluvirheitä). Tulee ajankohtaiseksi viimeistään sitten, jos piiri ei toimikaan. Käytännössä siis toisin päin kokeilet, että piippaus kuuluu, kun kosketat komponentin jalkaa ja kiskoa, johon se on kiinnitetty. Kokeilet, että yhteenliitetyt kiskot on tosiaan yhdessä jne.

Vastusten mittaamisesta yleismittarilla

Kuva

Vastus liittyy läheisesti johtavuuden mittaamiseen ja tavallaan mitataan täsmälleen samaa asiaa, mutta päinvastoin. Nyt yleismittarin valitsin käännetään sektorille, jonka symboli on “Omega”, eli ohmi. Kävi nyt sitten niin, että sieltä kiinasta tulleiden vastusten merkinnät on niin suttuisia, ettei niistä sittenkään saa selvää. Yhdessä lukee ehkä "5k1", toisessa "220?" ja kolmannessa "10M". Joillekin nämä saattaisivat jo vihjata, että kyseessä saattaisi olla ainakin arvot "5.1", "220" ja "10". Onneksi kuitenkin vastukset ovat sen verran simppeliä tekniikkaa, että napaisuudella ei ole mitään väliä ja voit ihan rohkeasti lähteä kokeilemaan eri asetuksilla. Kun lähdet vaikka kelaamaan alimmasta “200”-valinnasta ylöspäin, niin kaikki vastukset näyttävät arvoksi tasan "1" tms. mahdotonta. Napsauttamalla seuraavaan pykälään saamme 220?-merkinnän omaavalla näyttöön luvun 0220, joka kertoo meille ensinnäkin, että vastus on 200 ja 2000 ohmin välissä ja toisekseen pienellä pähkäilyllä uskallamme melko varmaksi sanoa, että kyseessä on 220ohm vastus. Napsauttamalla yleismittarin seuraavaan pykälään myös 5.1-arvon omaava herää eloon ja näyttää ehkä 0510 näytöllä. Taas rajat tarkastamalla huomaamme, että arvon on oltava 2k ja 20k välillä, joten senhän on oltava 5,1kOhm vastus. Viimeinen ei sano mitään millään valinnalla, mutta sen sijaan, että vastus tai mittari olisi rikki, voinemme olettaa sen olevan yli 2MOhm arvoinen (mittarin yläraja), mahdollisesti 10MOhm-vastus. Jatkon kannalta on kätevää kirjoittaa vastusnauhoihin selkeät merkinnät, niin ei tarvitse edes joka kerran mitata erikseen.

I2C:stä (=IIC)

Kuva
(Älä välitä AREF-pinnistä. En ole koskaan sitä tarvinnut ja tuskin sinäkään pitkään aikaan.)

Voitaisiin nyt vielä ennen kuin mennään dimmailemaan katsoa mikä ihme tuo I2C-väylä on. Äkkiseltään varmaan tuntuu tuskaiselta, kun tulee paljon uutta variaatiota, mutta usko pois: I2C tulee olemaan vielä sinun paras kaverisi, jos viet projektia yhtään pidemmälle. Historia selviää wikipediasta, niin ei siitä sen enempää. Pointti on kuitenkin se, että voit kytkeä jopa satoja I2C-laitteita Arduinoon käyttämällä pelkästään kahta pinniä: SDA ja SCL. Jokaisella I2C-laitteella on oma “osoitteensa”, jota sitten huhuillaan “verkosta”. Ainoan käytännön rajoitteen laitteiden määrälle asettaa se fakta, että monissa etenkin halvemmissa I2C-komponenteissa on “hardcoded”-osoite, joka on siis kaikilla ko. komponenteilla sama. Vähän paremmissa on edes pari vaihtoehtoa, joista valita. Voit siis laittaa miltei rajattomasti erilaisia I2C-komponentteja, mutta useiden samanlaisten kanssa voi tulla lisähaasteita.

Pinneistä ylipäätään ja vähän analogisista

Kuva
(Älä kiinnitä huomiota keltaisiin "AVR"-palloihin. Et tee sillä tiedolla tässä vaiheessa mitään.)

Jos suoritit onnistuneesti kotiläksyjen bonus-tehtävän, niin saatoit huomata, että Arduinon eri pinneillä on erilaisia erikoiskykyjä ja toisaalta joitakin pinnejä tuntuu olevan useaan kertaan. Perusjakohan menee niin, että on kaksi puolta: “Digital In/Out” ja “Analog In/(+digital I/O).

Kuva

Käytännössä vain halvimmat sensorit käyttävät Analog Innejä, joten en niitä nyt kovin tarkasti käy läpi. Sen verran kuitenkin mainitsen, että jos perus-Digi-pinnit uhkaa loppua kesken, niin myös analog-pinnejä voi käyttää digitaalisesti yksinkertaisiin ON/OFF -hommiin. "Analog In" on konseptina ADC (Analog to Digital Converter), eli se muuntaa analogisen jännitearvon väliltä 0-(x,xxxV)-5V digitaaliseksi lukuarvoksi välille 0-1024 (muistaakseni). Se tekee homman niin tarkasti ja nopeasti, että digitaalipinnit eivät vastaavaan pysty (ne pystyvät aistimaan vain kaksi arvoa: 0V vai 5V, mutta puolestaan tämä tapahtuu tarvittaessa äärimmäisen nopesti). Lisäksi pinnit A5 ja A4 omaavat tutut lisämerkinnät "SCL" ja "SDA" – eli I2C-väylän tunnusmerkki siis. Käytännössä tämä tarkoittaa sitä, että Unossa on vain yksinkertaisesti haaroitettu A4 ja A5 pinnit erikseen erillisiin “SCL ja SDA”-pinneihin helpottamaan useamman I2C-laitteen liittämistä. (Johtavuusmittarilla voit itsekin todeta asian, SCL ja SDA = A5 ja A4) Jos aiot jatkossa lisätä esim. kellon tai erikoisempia antureita, niin ne kytketään useimmiten I2C:hen ja sitä kannattaakin suosia aina kun mahdollista.

Digitaalisista pinneistä

Digitaalisella puolella pinnejä onkin yhteensä 14 ja sorttia jos jonkinlaista. Käytännössä kaikilla siis pystyy tekemään perus ON/OFF toimintoja ja digisensorin lukuja. Kuitenkin toiset ovat vähän parempia kuin toiset, joten niitä kannattaa yrittää piirejä suunnitellessa säästää laajennusvaraksi ja laittaa perusnapit, merkkiledit, anturit yms. peruspinneihin.

Kuva

-Ensimmäisenä erikoisuutena tulee runsaslukuisimpana ryhmänä PWM-pinnit (punainen). Nämä pystyvät tavallisen toiminnan lisäksi tuottamaan PWM-signaalia (ilman suurempia ohjelmallisia ponnisteluja). Erittäin hyödyllistä juurikin valojen ja tuulettimien portaattomassa säädössä.

-Pinnit 0 ja 1 on merkitty “RX” ja “TX”. Tämä tarkoittaa sitä, että kyseessä on Arduinon “sarjaportti”, eli voit liittää esim toisen Arduinon suoraan näihin liittimiin ja jutella sille. Harvoin tarvittu ominaisuus, mutta hyvä pitää mielessä.

-Pinnit 2 ja 3 sisältävät “keskeytys” -ominaisuuden. Eli Arduino voidaan laittaa tarkkailemaan näitä kahta pinniä muiden toimien ohessa ja heti jos dataa tulee, niin kaikki muut toiminnot pistetään seis, kunnes data on käsitelty. (Käytin nämä pinnit tässä napeille, koska nappien responsivisuutta voisi tarvittaessa parantaa keskeytyksiä käyttämällä, mutta osoittautui käytännössä turhaksi tarpeeksi.) Jatkoa ajatellen käyttöliittymää voi kehittää vaihtamalla napit autoradioista tuttuun “rullaan” ja sen kanssa keskeytykset tuleekin tarpeen. Toisaalta, jos tavoitteesi olisi ohjata esim. 4-pin tietokonetuuletinta, niin haistellaksesi tuulettimen kierrosluvun tarvitset ainakin yhden keskeytyksen. Arduinon perusmalleissa keskeytyksiä on vain kaksi, joten kaikkea ei voi saada.

-Pinnit 10-13 on hyvä varata mahdolliselle SD-korttilaajennukselle. (Tässä toinen huomautus keskeytyksien käytöstä: SD-kortit ovat erityisen herkkiä temppuilemaan, jos Arduino toimii vähänkään epäjohdonmukaisesti. Tarkoitan sitä, että jos kirjoitus kortille on juuri meneillään, niin saattaa pukata erroria, jos keskeytystä kutsutaan juuri samalla hetkellä. Toki keskeytykset voi kytkeä aina pois kirjoituksen ajaksi, mutta mainitsin nyt kuitenkin, etteivät ne ole pelkästään positiivinen asia ilman vaihtokauppaa.)

Hyödyllinen idiootti kirjoitti:Mikäs se PWM oikein on? Jotenkin se liittyy vissiin tietokoneiden tuulettimiin? -Kyllä, niihinkin, mutta myös moneen muuhun. Nyt myönnän, että vähän huijasin edellisessä kuvassa, kun kuvasin digitaalista viestintää. Todellisuudessa digitaalinen viestintä on vähän monimutkaisempaa, mutta PWM on juurikin sitä mitä Salminen tekin kellonsa kanssa vedenpintaa tarkkaillessaan. Eli laski pulssien taajuutta (Pulse Width Modulation). Käytännössä kun PWM:stä puhutaan, niin pulsseja tulee useita satoja sekunnissa (jopa tuhansia-miljoonia). Arduinon oletus PWM on 500Hz, eli viisisataa pulssia sekunnissa. Pulssin maksimipituus on siis rajattu 1s/500 = 2ms. Ero tehdään siis sillä, että kestääkö pulssi koko tuon 2ms (=100% PWM) vai vaikka esim. 1ms (=50% PWM) tai 0,2ms (=10% PWM).

Kuva

Käytännössä tätä ei siis tarvitse sisäistää matemaattisessa mielessä, eli lukuja ei tarvitse opetella ulkoa. Koodin puolesta tämä on hyvinkin yksinkertainen toiminto. Syventävä tieto voi kuitenkin helpottaa ymmärtämään mitä "pellin alla" tapahtuu. Kun puhutaan yhtään tyhmemmistä laitteista, kuten merkkiledeistä tai yksinkertaisista sähkömoottoreista, niin ne eivät sinällään ymmärrä PWM-signaalia, mutta näkevät pulssituksen jännitteen laskuna. PWM onkin siis eräänlainen DAC (Digital to Analog Converter), joka muuntaa digitaalisen lukuarvon väliltä 0-255 analogiseksi jännitteeksi välille 0-x,xxxV-5V (tai ohjaa puolijohdetta, jolla voi olle muukin jännite, esim. 0-10V). Esimerkiksi siis niin, että kun normaali merkkiledin käyttöjännite on 3.3V ja 100% PWM Arduinon pinnistä 5V, niin ajamalla pinniin 66% PWM:ää, niin ledi näkee sen keskimäärin juurikin 3.3V jännitteenä (5*0,66=3,3)


Sähköistä ja etuvastuksista

Koska Arduino on mikrokontrolleri, se ei pysty suoraan I/O-pinniensä kautta kovin suuriin ponnistuksiin. Valmistaja lupaa maksimi tehonkestoksi 40mA/pin. Tämä tarkoittaa käytännössä siis yhtä(/pin) hikistä merkkilediä tai sitten puolijohdetta (transistori/mosfet/optocoupler), jolla ohjataan suurempaa kuormaa. Tämän takia myös useimmat digitaaliset lisälaitteet vaativat 3-4 piuhaa, eli 1-2 signaalille ja sitten erikseen ne varsinaiset virrat VCC:hen ja GND:hen. Erittäin hyvänä nyrkkisääntönä on käyttää aina pientä (100-220ohm) etuvastusta, kun pinniä käyttää Outputtina (pl. valmiit moduulit) Tämä marginaalisesti heikentää tarkkuutta, mutta parantaa erittäin merkittävästi viansietoa. (Lisäksi tavallisen merkkiledin käyttöjännite on noin 3.3V, kun taas Arduinon pin “HIGH” on 5V. 220Ohm vastus laskee jännitteen ledille juuri sopivaksi.)

Hyödyllinen idiootti kirjoitti:Mikäs se etuvastus oikein on? -Viime oppitunnista tarkkaavaisimmille ehkä jäi päähän, että vastusta voisi verrata vesiputkeen, jossa on virtausta rajoittava kavennus. (On olemassa myös säädettäviä vastuksia, joita voisi verrata vaikka säätöventtiileihin.) Monet sähkölaitteet ovat kuitenkin luonnostaan niin "tyhmiä", että ottavat virtaa sen minkä napa kestää, eikä sitä mikä olisi kohtuullista ja riittävää. Lisäksi joissain tapauksissa komponentin ottaman virran määrää on vaikea arvioida kaikissa olosuhteissa. Tämä aiheuttaa ongelmia etenkin mikrokontrollereiden kanssa, kun muistetaan niiden "narukädet".

Esimerkiksi tähän tarkoitukseen valmistetut transistorit kytkeytyvät huomattavasti pienemmällä virralla, kuin minkä ne ilman rajoituksia ottavat. (Marginaalisesti hitaammin tosin) Lisäksi äärioloissa virrankulutus voi kasvaa tästäkin vielä merkittävästi. Kuitenkin etuvastusta käyttämällä Aduinon Outputista transistoriin virtaava virta pienenee "eksponentiaalisesti". Pääsemme siis ensinnäkin vaaralliselta alueelta turvalliselle maaperälle ja lisäksi erittäin pitkälle sinne, hyvin pienin, käytännössä merkityksettömin uhrauksin.


Digitaalisten ja analogisten sensoreiden eroista

Analogiset sensorit usein puolestaan toimivat vastusperiaatteella, eli niille riittää kaksi piuhaa, joista toiseen johdetaan virtaa ja toinen pää kytketään analog In-pinniin, joka haistelee vastusarvon muutoksia (= jännitteen alenemaa välillä 0-5V - vastuksethan alensivat jännitettä, eikös?). Aivan kuin yleismittarikin. Kuulostaa kauniin yksinkertaiselle, mutta käytännössä vastusarvoihin vaikuttaa aina sen varsinaisen mitattavan asian lisäksi muutkin tekijät, kuten lämpötila, häiriösignaalit yms. ja näiden suodattaminen ohjelmallisesti onkin sitten ihan toisen sortin projekti. Digitaalinen puolestaan antaa ulos (tehdaskalibroidun) arvon: “lämpötila on tällä hetkellä tasan 26.53C”. Ei tarvitse siis ihan niin korkean tason matikkaa saadakseen suhteellisen luotettavia arvoja.

Virtapinneistä

Kuva
(Sama huomautus koskee IOREF-pinniä - älä mieti sitä. Tuskin sitä tarvitset, mutta käsittääkseni sitä voi käyttää myös 5V-pinnin haaroituksena)

Kun annat Arduinolle kylliksi mehua joko USB-liittimestä (5V) tai ulkoisesta virtalähteestä (>8V), niin Arduinon sisäinen “muuntamo” tarjoaa 5V- ja 3.3V- jännitteet kyseisiin pinneihin. 5V-pinnistä uskaltaa ottaa 200mAh, joka ei sekään vielä paljoa ole, mutta pyörittää kuitenkin juuri ja juuri jo pientä sähkömoottoria ja riittää melko helposti näytön, nappien yms. sähköistämiseen. Jos tarvitsee ohjata isompia kuormia, niin tarvitaan ulkoinen virtalähde. Alunperin tässä oppaassa jouduimme sellaistakin käyttämään, mutta nyt kun hommat on selkeitä ja helppoja kuin heinänteko, niin vältymme paljolta ja voin keskittyä enemmän jaaritteluun. ;)

Reset-pin mahdollistaa irrallisen reset-napin asentamisen, esim. kotelon kylkeen. Muistaakseni se vain johdetaan maihin, niin Arduino buuttaa (Voi myös vaatia +5V sisään, en muista. Tarkista itte, jos tarvitset. :))

Puolijohteista

Kuva

Kun vielä lievä kahvin jälkimaku pyörii suussa, niin otetaan samaan syssyyn vielä ne puolijohteet, että saadaan tekniikan osalta teoria pakettiin. Yksinkertaisimmillaan puolijohteet (lähinnä siis transistorit/mosfetit) muistuttavat erittäin paljon releitä: pienellä virralla saa kytkettyä isomman virran päälle - vahingoittamatta pienempää. Käytännössä eroja kuitenkin on. Siinä missä rele on teknisesti melko yksinkertainen ja tyhmä, niin puolijohteet ovat huomattavasti hienostuneempia työkaluja. Hienostuneisuus tuo kuitenkin mukanaan herkkyyden ja muita rajoitteita.

Rele ei välitä, että kulkeeko kytketyssä piirissä virta, saati mihin suuntaan. Toisaalta pelkkä releen kytkeminen vaatii jo niin paljon virtaa, että Arduinon Digital Out ei siihen suoraan pysty, vaan asia pitää hoitaa puolijohteen kautta. Lisäksi releen kytkeminen on melko hidasta (noin 0,1s/kytkentä) ja ne kuluvat liiasta napsuttelusta. PWM ei siis mitenkään onnistu releellä. Onneksi meillä on kuitenkin puolijohteet. Puolijohteet ovat halpoja, äärimmäisen nopeita (noin 0,0000001s/kytkentä) ja kestävät käytännössä äärettömän määrän "napsuttelua".

Transistorit, optocouplerit ym.

Kuva
(kuvassa optocoupler EL817)

Puolijohteita on lukemattomia erilaisia ja niillä on kullakin omat hyvät ja huonot puolensa. Transistori on varmasti tunnetuin, vaikka käytännössä Mosfetit ovat syrjäyttäneet ne kehittyneempänä tekniikkana monissa sovelluksissa. (Jos tarkkoja ollaan, niin tietokoneen prosessoritkin koostuvat itseasiassa Mosfeteista, eikä transistoreista). Vaikka periaatteessa dimmauksen pitäisi onnistua miltei millä tahansa puolijohteella, niin en saanut sitä ainakaan ihan pienellä Mosfetilla tehtyä. Monissa ulkolaisissa oppaissa käytetään transistoreita, joten ne voivat toimia. Itse käytin kuitenkin "optocoupleria", joka on myöskin eräänlainen transistori, mutta rakennettu niin, että pientäkään riskiä vuodosta "isolta" puolelta "pienelle" ei ole. (Sattui löytymään osat valmiiksi ja tämä oli mielestäni yksinkertaisin, sekä tehokkain tapa toteuttaa piiri, vaikka muitakin toimivia tapoja toki on.) Puolijohteiden kanssa on kuitenkin tärkeää, että napaisuudet kytketään juuri oikein päin, molemmin puolin. Virheestä seuraa joko piirin toimimattomuus tai pahimmillaan komponenttien hajoaminen.

Tässä vielä kuva optocouplerin "sielusta":

Kuva

Kyseessä on siis valoa läpäisemätön "laatikko", jonka "pienellä" puolella on yksinkertaisesti pikkuruinen ledi. "Isolla" puolella on taasen valoherkkä kytkin, joka päästää virran läpi, jos ledi on päällä. Minkäännäköistä metallikontaktia "pienen" ja "ison" puolen välillä ei siis ole, eikä "iso" puoli voi vaikuttaa mitenkään "pieneen" puoleen.

Hyödyllinen idiootti kirjoitti:Mitäs se Meanwellin 3-in-1 dimming nyt sitten piti sisällään?

Kuva

Kuvasta voimme haistella, että tekniikka vaikuttaa älykkäältä, kun vaihtoehtoja on näinkin monta. Käyttäjän näkökulmasta homma on kuitenkin harvinaisen helppo: DIM+ antaa +10V ulos, ja jos koko 10V johtaa DIM- johtimeen (=oikosulkee = vastus 0 ohm = 0V jännite-ero), niin tulos on driverin meneminen aliteholle (10% teho suositeltu minimi). Jos taas piuhat pitää kokonaan erillään, niin tuloksena on 95-108%:n täysi teho (="ääretön" vastus (tai ainakin >100kOhm)=+10V jännite-ero) (älä huoli, MW kyllä kestää ylitehollakin rääkkäämistä). Valmistaja on ollut niin fiksu, että loogisesti käyttämällä 10-100kOhm väliltä vastusarvoja DIM-piuhojen välissä esim. 50kOhm-vastuksella saavutetaan juurikin 5V jännitteen alenema (10V-5V=5V) ja driver toimii puoliteholla.

Meidän kannaltamme skenaario on kuitenkin eri. Meidän tavoitteemme on napsutella piuhoja oikosulkuun se 500 kertaa sekunnissa. Tällä kertaa säätelemme kuitenkin driverin itsensä tarjoamaa +10V jännitettä Arduinon 5V perusjännitteen sijaan. Kuten aiemmin mainitsin, niin "tyhmemmätkin" laitteet näkevät PWM:n ainakin jännitteen alenemisena... No hei ja älynväläys! Kun optocouplerilla oikosuljetaan DIM+ ja DIM- piuhoja satoja kertoja sekunnissa, niin saamme tulokseksi juurikin 0-10V. Tämä on se arvo mitä driver oikeastaan pelkästään aistii, vaikka onkin 3-in-1. Kaikki kolme tapaa vain johtavat samaan lopputulokseen: Jännite-eron pienenemiseen DIM-piuhojen välillä. Mitään vahinkoa tälläinen "oikosulku-napsuttelu" ei kuitenkaan aiheuta, vaan driver on nimenomaan suunniteltu ottamaan tällaista signaalia vastaan. PWM-dimmaus ei myöskään johda valojen välkkymiseen - ei ensinnäkään siksi, koska taajuus on liian nopea ihmissilmälle ja toisekseen siksi, että HLG ei välitä PWM:ää edelleen ledeille, vaan laskee ainoastaa virtaa (=ampeereja).


Kotitehtäväksi näyttäisi jäävän nyt tällä kertaa seuraavat:

Kuva

4.(1p) Kytke I2C-näyttö oikeisiin pinneihin.
5.(3p) Selvitä mikä on EL817-komponentin maksimi kytkentäjännite ja -virta "isolla" puolella. Entäs minimi "pienellä" puolella. (kw: datasheet)
6.(5p) Googleta ja selvitä mitä muita tapoja (USB:n ja jakki-liittimen lisäksi) on syöttää virtaa Arduinoon. Mitä rajoitteita ja etuja näillä muilla tavoilla on? Lisäksi jos ja kun virheitä löytyy, ja ne onnistuneesti korjaa, niin tienaa hyvät pisteet arvontaan.
+Bonus-tehtävä: KVG-kuvahausta tänään mainittujen komponenttien diagrammi-symbolit (vastus, transistori, ledi, kytkin(=nappi) jne.).

==========================================================================================

Noniin, jos nyt vähän optimistisesti toivotaan, että postiluukku kolahti jo ja jonkun verran osasia jo löytyy, niin aletaan vähän kokeilemaan käytännössä. Ihan alkuun tehdään protolankun mukana tulleeseen koekytkentälevyyn harjoituskappale. Alkuun harjoitellaan halvalla merkkiledillä (jota ei tietenkään ollut ostoslistassa, mutta hätätilanteessa sellaisen kolvaa irti vaikka vanhasta digiboksista.)

Elikkäs kuvassa on nyt vihdoin viimein se lopullista edeltävä versio tästä varsinaisesta dimmeristä. Selvennyksenä nyt siis ihan ummikoille, että koekytkentälevy toimii niin, että poikkittaiset, viiden reiän rivit ovat yhtä “kiskoa”. Yleisen hyvän tavan vuoksi pyhitin reunasta pari virransyöttökiskoiksi +5V:lle ja GND:lle. Homman saisi varmasti tehtyä vähemminkin hyppylangoin, mutta yritin pitää simppelinä ja oikaisin vain yhdessä kohtaa vääntämällä ledin etuvastuksen jalan suoraan ledin kiskoon, vaikka kuvaan hyppylanka siihenkin on piirretty. Piirretyn kuvan katkoviivat edustavat siis hyppylankoja ja komponentit on kuvattu pientä taiteellista vapautta käyttäen, mutta toivottavasti tunnistettavasti.

Käytetyt komponentit:
-merkkiledi
-100 Ohm vastus
-220 Ohm vastus
-EL817-optocoupleri
-Seitsemän hyppylankaa

Kuva
(Huom! Kuvan EL817:n “täplä” on siis vasemmalla alhaalla, vaikken sitä muistanut kuvaan piirtää)

Uskon ja luotan, että osaatte kytkeä tarvittavat piuhat kiinni Arduinoon aiempien kirjoitusten perusteella, niin menen seuraavaksi itse koodiin. Tosiaan ajattelin, että tehdään nyt alkuun sellainen ohjelma, joka lukee lämmön, vertaa sitä tavoitteeseen ja dimmaa lediä sen mukaisesti. Tälläkin siis pääsee jo tositoimiin, vaikka pysytään erittäin perustason koodauksessa ja aikaa menee alle tunti, vaikka ei käyttäisi edes copy-pastea. Onkin erittäin suositeltavaa naputella koodit itse copy-pasten sijaan, niin siinä kerkeää vähän ehkä alitajunta prosessoida niitä asioita samalla ja salaisuudet aukeavat pikkuisen nopeammin.

[KOODIA]
#include //Lisätään DHT-kirjasto (HUOM!! TÄMÄ RIVI EI NÄY FOORUMISOFTAN TAKIA KOKONAAN

//Pinnit---------------------------------------------------
#define DHTPIN 4 //Määritetään anturin pinniksi D4
#define Ppin 5 //Ledi-ohjaimen PWM-pin

//Muuttujat-----------------------------------------------
float tavoiteT = 25; //Määritellään float-muuttujan "tavoiteT" lähtöarvoksi 25, jota siis käytetään rajana, jonka jälkeen dimmaus alkaa.
float maksimiT = 30; //Määritellään lämpö, jolloin dimmataan minimitasolle.
float maksimiP = 255; //Määritellään lähtoarvoksi 255 (=100% teho asteikolla 0...255)
float minimiP = 50; //Määritellään lähtöarvoksi 50 (noin 20% samalla asteikolla.)
float lastP = 0; //Luodaan "lastP" muuttuja, jolla ehkäistään, ettei ohjelma turhaan säädää PWM:mää, jos tarvetta ei ole (Aiheuttaa pienen piikin PWM:mään jokainen säätö, eli ei kannata säätää ihan joka sekunti)
float P = 0; //Luodaan "P" muuttuja, joka on siis teho
float lastT = 25; //Luodaan muuttuja lämpötila-arvon tallennusta ja suodatusta varten

//DHT-kirjaston alustus-----------------------------------------
#define DHTTYPE DHT21 // Määritetään anturin tyypiksi DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE); //Syötetään määritellyt parametrit kirjastolle

//Skaalaus-funktio, joka mahdollistaa myös float-muuttujien skaalaamisen (Älä vaivaa liikaa tällä päätäsi tässä vaiheessa, selkenee varmasti käytössä.)
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void setup() {
Serial.begin(9600); //Käynnistetään sarjaportti, jolla viestitään koneelle USB:in välityksellä
dht.begin(); //Käynnistetään DHT-kirjasto
pinMode(Ppin, OUTPUT); //Määritellään ohjauspin "Ppin" ohjaavaksi Outputiksi (eikä haistelevaksi Inputiksi)
pinMode(LED_BUILTIN, OUTPUT); //Yritetään herätellä Arduinon sisään rakennettua lediä, joka ei näytä toimivan ainakaan mun piraattilankussa
Serial.println("Hello Hamppuforum!"); //Näytetään tervehdysteksti, joka samalla kertoo setupin onnistuneen
delay(1000); //Sekunnin (=1000ms) tauko.
}

void loop() {
float h = dht.readHumidity(); //Luetaan kosteusprosentti float-muuttujaan "h"
float t = dht.readTemperature(); //Luetaan lämpötila float-muuttujaan "t"
if (isnan(h) || isnan(t)) { //Tarkistetaan tulokset lukuvirheiden varalta ehdolla "Jos luetut arvot eivät ole numeroita (isnan = "is not a number"), niin..."
Serial.println("Sensorin lukuvirhe!"); //... näytetään virheviesti...
delay(1000); // ... ja pidetään sekunnin tauko
} else { // Ehto, joka toteutuu, jos edellinen ehto ei toteutunut, eli toteutaan, jos sensorin luku onnistui
t = ((t + (lastT*4))/5); //Suodatetaan mitattu lämpötila 10s "keskiarvoksi"
lastT = t; //Tallennetaan suodatettu arvo seuraavaa kierrosta varten
if (t > tavoiteT) { //Asetetaan ehto, joka vertaa mitattua ja tavoiteltua lämpötilaa
digitalWrite(LED_BUILTIN, HIGH); //Sytetään Arduinon sisäänrakennettu merkkiled sen merkiksi, että tavoitelämpötila on ylitetty
P = mapfloat((t - tavoiteT), 0, (maksimiT-tavoiteT), maksimiP, minimiP ); // Annetaan byte-muuttujalle "P" arvoksi skaalaus, jossa verrataan mitattua lämpötilaa "t" tavoite ja maksimiarvoihin ja pyydetään suhteuttamaan tulos minimiP:n ja maksimiP:n määrittämälle asteikolle. Eli siis, jos lämpö on 27,5 astetta, niin teho P saa arvokseen 152 (maksimiP:n ja minimiP:n puoliväli)
P = constrain(P, minimiP, maksimiP); //Rajataan "P":n arvo määriteltyihin rajoihin komennolla "constrain"
if (lastP != P) { //Asetetaan ehto, että jos tehomuuttuja P on muuttunut sitten viime kerran, niin...
analogWrite(Ppin, P); //Käsketään pin antamaan PWM-signaalia komennolla "analogWrite" ja sulkuihin parametrit ([PWM-pinnin numero], [Arvo, jossa 0 = 0% PWM ja 255 = 100% PWM])
lastP = P; //Tallennetaan muuttunut P myöhempää käyttöä varten
}
} else {
digitalWrite(LED_BUILTIN, LOW); //Jos tavoitelämpö ei ylittynyt, niin sammutetaan Arduinon sisäänrakennettu merkkiledi
}
Serial.print("Lämpötila: "); //Lähetetään tietokoneelle "tekstiviesti"
Serial.print(t, 1); //Lähetetään perään float-muuttuja "t":n arvo ja pyydetään yksi desimaali
Serial.print("C / Kosteus: ");
Serial.print(h, 0); //Lähetetään perään float-muuttuja "h":n arvo ja pyydetään nolla desimaalia (= kokonaislukuna)
Serial.print("% / Teho: ");
Serial.print(lastP, 0); //Lähetetään "lastP"-byte-muuttujan arvo. Bytessä ei ole desimaaleja, joten niistä ei tarvitse välittää.
Serial.print(" - ");
Serial.print(map(P, 0, 255, 0, 100)); //Skaalataan Byte-muuttuja prosenttiasteikolle. Tässä käytetään Arduinon sisäänrakennettua "map"-skaalainta, joka ei siis tosiaan kykene desimaalilukuja sisältäviin float-muuttujiin, mutta toimii byte-muuttujilla ja muilla kokonaisluvuilla oikein mallikkaasti
Serial.println("%"); //Tulostetaan vielä viimeinen prosenttimerkki ja pyydetään samalla rivinvaihtoa tulostuksen jälkeen lisäämällä komentoon "ln"
}
delay(2000); //Kahden sekunnin tauko, että sensori kerkeää aistimaan uuden arvon.
}
[/KOODIA]]
(Edit: Näköjään ytteensopivuusongelmat foorumisoftan kanssa olivat odotettua pahempia ja DHT-kirjasto pitää toistaiseksi osata liittää itse. Harkitsen vaihtoehtoja koodin jakamiselle.)

En nyt jaksanut tehdä ainakaan vielä mitään githubia, mutta toivotaan, ettei foorumisofta raiskaa koodia ihan mahdottomaksi. Näin kuitenkin todennäköisesti käy, niin koodin saa helposti luettavammaksi kopioimalla sen Arduino IDE:en ja valitsemalla Tools-Auto Format (Ctrl-T).

Tulihan tässäkin jo ihan kohtalainen pätkä koodia. Toivottovasti kommentit selventävät, mutta jos jokin jäi pahasti epäselväksi, niin huudelkaa, että Hyödyllinen idioottimme osaa iskeä paikalle tietolaatikkoineen.

Kuva Kuva

Tänään olen niin väsynyt, että kotitehtäväksi tulee vain rakastaa vaimoa/tyttöystävää/naapurin-Raijaa.
Viimeksi muokannut Suomies, 25.9.2017 4:03. Yhteensä muokattu 48 kertaa.

eskimoerkki
Viestit: 107
Liittynyt: 10.5.2010

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja eskimoerkki » 11.9.2017 4:42

Ohhoh, hyvältä näyttää! :yes:

Avatar
pexi
Viestit: 1502
Liittynyt: 21.4.2005

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja pexi » 11.9.2017 4:45

Anna palaa lisää vaan, täällä jo odotetaan :yes:.
Jos yksi kuva kertoo enemmän kuin tuhat sanaa niin kuinka montaa sanaa elokuva vastaa?

Greenpeace79
Viestit: 66
Liittynyt: 4.9.2011

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Greenpeace79 » 11.9.2017 9:23

Poika puuhasteli tuon arduinon kanssa ja mieleeni tuli ajatus, voisiko tuota hyödyntää omissa projekteissa. Lähinnä niin, että voisi automatisoida koko kasvatushuoneen. Käsittääkseni tuo toimii pienellä virralla, joten voisikohan tuosta tehdä ohjausyksikön? Anturit mittaavat arvoja ja sen pohjalta yksikkö kytkee päälle/päältä ilmastoinnin, ilmankostuttimen, pumpun jne.

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 11.9.2017 10:19

Greenpeace79 kirjoitti:Poika puuhasteli tuon arduinon kanssa ja mieleeni tuli ajatus, voisiko tuota hyödyntää omissa projekteissa. Lähinnä niin, että voisi automatisoida koko kasvatushuoneen. Käsittääkseni tuo toimii pienellä virralla, joten voisikohan tuosta tehdä ohjausyksikön? Anturit mittaavat arvoja ja sen pohjalta yksikkö kytkee päälle/päältä ilmastoinnin, ilmankostuttimen, pumpun jne.


Kysyit erittäin hyvän kysymyksen, johon on erittäin vaikea antaa lyhyttä ja yksiselitteistä vastausta. Sain itsekin samansuuntaisen ajatuksen vuosi-pari sitten ja jos ei muuta, niin ainakin lähempänä tavoitetta ollaan. No, se lyhyt vastaus on kuitenkin kyllä, ehdottomasti. Arduino on lyömätön juurikin yksinkertaisessa sensorien seurailussa ja releiden napsuttelussa. Nuo kuvaamasi hommat ovat vielä tätäkin projektia yksinkertaisempia toteuttaa. Onnistunee jopa ilman kolvia tuollaisen kasaaminen, kun valmiita "liitä vain hyppypiuhat"-relemoduuleita löytyy käytännössä puoli-ilmaiseksi ja sama homma isossa osassa sensoreita. (kw: arduino relay/sensor module)

Se pidempi vastaus alkaa kuitenkin isolla mutalla: Koko kasvatushuoneen automatisointi tuskin onnistuu kovin helposti kehittyneemmilläkään lankuilla, saati tällä. Vertaisin Arduinon videonauhureihin tai mikroaaltouuniin. Se on suunnilleen yhtä älykäs. Eli tosiaan kaikki ennaltaohjelmoitu simppeli tekeminen onnistuu vielä helposti. Kun saat nuo ominaisuudet lyötyä sisään, mieleesi putkahtaa kymmenen uutta kehitysideaa. No ne menee vielä kivasti sisään, mutta seuraavat ei enää menekään, kun loppuu muisti kesken ja pitää alkaa karsimaan tai optimoimaan. Omalla tavalla ärsyttävää, mutta toisaalta mielenkiintoista.

Nettiin Arduinon juuri ja juuri vielä saa, mutta se alkaa olemaan aika äärirajoilla. Mitään kummoisia grafiikoita tai käyttöliittymiä ei kannata väsäillä (menee muistia hukkaan). Mitään isoja datamääriä (>100mb) ei kannata edes yrittää käsitellä. Toisaalta tämäkin pirulainen laskee sen 16 miljoonaa laskutoimitusta sekunnissa ja koodia menee sisään yli tuhat riviä, niin kyllä sillä aika paljon tekee. Lisäksi IoT-sovellukset voivat nostaa Arduinon perusmallejakin uuteen nousukiitoon, kun langattomat, esim. BT-verkot kuitenkin sujuvat melko mutkitta ja suhteellisen vähällä virralla. Jos yhdestä lankusta tekee "hubin/nettipalvelimen" ja muut linkittää tähän yhteen esim. BT:llä tai wlanilla, niin voit tehdä isoja ja monimutkaisiakin sensori- ja ohjausverkostoja yksittäisistä, keskenään vuorovaikuttavista Arduinoista.
Viimeksi muokannut Suomies, 11.9.2017 15:09. Yhteensä muokattu 2 kertaa.

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 11.9.2017 12:44

No niin. Nyt on 1 ja ½ osaa muotoiltu. Miltä tuntuu, että mennäänkö liian nopeasti vai liian perusteellisesti asioita läpi? Vähän olen myös kahden vaiheilla, että toteutanko mallikappaleen Unolla vai Nanolla. Itsellä olisi Nano-versiolle enemmän käyttöä, mutta toisaalta Uno olisi aloittelijalle helpompi. Onko toiveita tämän suhteen?

Avatar
pexi
Viestit: 1502
Liittynyt: 21.4.2005

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja pexi » 11.9.2017 14:49

Greenpeace79 kirjoitti:Poika puuhasteli tuon arduinon kanssa ja mieleeni tuli ajatus, voisiko tuota hyödyntää omissa projekteissa. Lähinnä niin, että voisi automatisoida koko kasvatushuoneen. Käsittääkseni tuo toimii pienellä virralla, joten voisikohan tuosta tehdä ohjausyksikön? Anturit mittaavat arvoja ja sen pohjalta yksikkö kytkee päälle/päältä ilmastoinnin, ilmankostuttimen, pumpun jne.


Tässä olis yks systeemi, tai tossa jotain systeemistä, taitaa olla myöhemmin topicissa viel lisää tarkempaa juttua.

Raspberry Pi:lle on ihan oma ja erittäin kätevänoloinen ohjelma: Mycodo, voi ohjata releitä, lukea antureita, ajastimia, ehtoja esim. Lämpötila X on suurempi kuin YY -> Vedä rele Z (käynnistää lisätuulettimen). Käyttö verkon välityksellä (tai miksei suoraankin raspissa) selaimella. Käyttöliittymä erittäin selkeä, ainakin niin selkeä, mitä voi tollai järjestelmä odottaa. Tällasen systeemin oon kasannu säätäny ja testannu "kuivana", eli ilman valoa ja tuulettimia, viel pitäis laittaa systeemi kasaan, muttei sillä ole niin kiire, projekti monien muiden joukossa :D
Jos yksi kuva kertoo enemmän kuin tuhat sanaa niin kuinka montaa sanaa elokuva vastaa?

Greenpeace79
Viestit: 66
Liittynyt: 4.9.2011

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Greenpeace79 » 12.9.2017 10:39

Kiitos infosta. Kävin omimassa itselleni Arduino Unon plus tilpehöörit pojalta. Katselin youtubesta videoita, mitä porukka on väsäillyt ja mahkut on aikalailla rajattomat. Nyt täytyy hommata läppäri, kun tablessa ei usb:tä ole. Ohjelmointikin vaikuttaa siltä, että sen pystyy omaksumaan. Tulee mieleen yli 20v takaiset basic-ohjelmat if/else käskyineen. Kiitos Suomies, kun sait minut kiinnostumaan aiheesta.

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 12.9.2017 22:26

pexi kirjoitti:Tässä olis yks systeemi, tai tossa jotain systeemistä, taitaa olla myöhemmin topicissa viel lisää tarkempaa juttua.


Itseasiassa ei, tuossa on paljon sellaista, mistä tässä paketissa ei ole hyöytyä ja toisaalta monet muut ominaisuudet ei ole kovin ihmeellisiä. Kyllä erästä toista Icmagin aihetta käsittelevää ketjua olen silmäillyt ja arvelin sinun puhuvan siitä. Siinä määritetään erikseen IR-kameralla lehtimassan lämpötila, jolloin VPD-arvo saadaan tarkemmaksi. Siitä saattaa tulla juttua myöhemmin tässäkin ketjusssa.

Tuulettimen säätö ja dataloggeri ovat toinen tai jopa kolmas projekti. Kyllä nekin on tuossa tulilla ja joitain elementtejä voi tästä käyttää, mutta käytännössä koko homma menee uusiksi.

pexi kirjoitti:Raspberry Pi


Myönnän ettei ole tullut Pi:tä kokeiltua, vaikka moni kehuu. Mielikuvani on se, että siinä mennään juuri sen rajan yli, että menee itseltä jo koodaukset yli hilseen. En nyt jouda tutustumaan tuohon Mycodoon, mutta nuo mainitsemasi asiat onnistuvat myös Arduinolla vielä ihan mallikkaasti. Jos netti ei kuitenkaan ole välttämätön, etkä tarvitse tietokoneen laskutehoa (aloittelijan on vaikea keksiä niin raskasta koodia, että saisi Arduinonkaan jumiin), niin säästät kympin valitsemalla Arduinon.

Greenpeace79 kirjoitti:Kiitos infosta. Kävin omimassa itselleni Arduino Unon plus tilpehöörit pojalta. Katselin youtubesta videoita, mitä porukka on väsäillyt ja mahkut on aikalailla rajattomat. Nyt täytyy hommata läppäri, kun tablessa ei usb:tä ole.


Tämäkin saattaa toimia ja tulee varmaan halvemmaksi kuin läpppäri: http://www.ebay.com/itm/Micro-USB-To-US ... SwfZhXNaEB

Greenpeace79 kirjoitti:Ohjelmointikin vaikuttaa siltä, että sen pystyy omaksumaan. Tulee mieleen yli 20v takaiset basic-ohjelmat if/else käskyineen. Kiitos Suomies, kun sait minut kiinnostumaan aiheesta.


Tämäpä juuri. ;) Ja netti täynnä ilmaisia esimerkkejä ja valmiita kirjastoja.

Avatar
pexi
Viestit: 1502
Liittynyt: 21.4.2005

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja pexi » 13.9.2017 12:00

Suomies kirjoitti:Itseasiassa ei, tuossa on paljon sellaista, mistä tässä paketissa ei ole hyöytyä ja toisaalta monet muut ominaisuudet ei ole kovin ihmeellisiä. Kyllä erästä toista Icmagin aihetta käsittelevää ketjua olen silmäillyt ja arvelin sinun puhuvan siitä. Siinä määritetään erikseen IR-kameralla lehtimassan lämpötila, jolloin VPD-arvo saadaan tarkemmaksi. Siitä saattaa tulla juttua myöhemmin tässäkin ketjusssa.

Myönnän ettei ole tullut Pi:tä kokeiltua, vaikka moni kehuu. Mielikuvani on se, että siinä mennään juuri sen rajan yli, että menee itseltä jo koodaukset yli hilseen. En nyt jouda tutustumaan tuohon Mycodoon, mutta nuo mainitsemasi asiat onnistuvat myös Arduinolla vielä ihan mallikkaasti. Jos netti ei kuitenkaan ole välttämätön, etkä tarvitse tietokoneen laskutehoa (aloittelijan on vaikea keksiä niin raskasta koodia, että saisi Arduinonkaan jumiin), niin säästät kympin valitsemalla Arduinon.


Joo, ei välttis ollu tuo, mut nopee katoin vaan jonkun, jossa arduino-ohjaus.

Itellä projektina toimiva tietokone, jossa sisällä kasvatustila, joten tuo RasPi3 siihen hyvä, kun löytyy tehoakin jonkin verran. Ihan harrastuneisuuden takia rakentelen, ei itellä tollaselle ole käyttöä, mut jos joku siitä jokusen roposen maksais..

Pahoittelut offtopicista, miettiny jos tekis oman topicin tuosta mycodosta, mut saa nähdä saako aikaseks..
Jos yksi kuva kertoo enemmän kuin tuhat sanaa niin kuinka montaa sanaa elokuva vastaa?

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 13.9.2017 16:14

pexi kirjoitti:Joo, ei välttis ollu tuo, mut nopee katoin vaan jonkun, jossa arduino-ohjaus.

Itellä projektina toimiva tietokone, jossa sisällä kasvatustila, joten tuo RasPi3 siihen hyvä, kun löytyy tehoakin jonkin verran. Ihan harrastuneisuuden takia rakentelen, ei itellä tollaselle ole käyttöä, mut jos joku siitä jokusen roposen maksais..

Pahoittelut offtopicista, miettiny jos tekis oman topicin tuosta mycodosta, mut saa nähdä saako aikaseks..


Ei tosiaan ollut tarkoitus tylyttää. Kyllähän foorumille keskustelua kaivataan. Selkeyden vuoksi voi kuitenkin olla parempi tosiaan keskustella Raspista ja muista projekteista omissa ketjuissaan. Yritän tämän pitää keskittyneenä nimenomaan tähän käyttötarkoitukseen, vaikka välillä käydään vähän perusteitakin läpi, että aloittelijatkin pääsisivät jutun juonesta kiinni. :)

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 16.9.2017 23:39

Pahoittelen verkkaista päivitystahtia. Aloin selvittelemään tarkemmin tuon dimmerin toteutusta, niin sehän muuttui vieläkin huomattavasti yksinkertaisemmaksi. Osalista päivittetty sen mukaiseksi. Vähän heikonlaisesti on tullut osallistujia kotitehtävien suhteen, mutta en nyt vielä masennu. Ajattelin kuitenkin ehkäpä palkita innokkaimmat vastaajat arpomalla yllätyspalkinnon, joka _saattaa_ olla vaikkapa tuo valmisteilla oleva prototyyppi. Avaimet käteen -pakettina. Lohdutussijoille jääneille saattaa lähteä ylijäämäisiä komponentteja, joilla dimmerin saa toteutettua odottelematta kuukautta osia kiinasta.

Nyt kun hardware alkaa olla lopullisesti päätetty, niin uskaltaa taas pikkuhiljaa alkaa naputtelemaan jatkoja tähänkin ketjuun. Stay tunerd. :)

Greenpeace79
Viestit: 66
Liittynyt: 4.9.2011

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Greenpeace79 » 17.9.2017 6:56

Itsellä opettelu siinä vaiheessa, että olen vasta yksinkertaisimpia ohjelmia tehnyt. Eli perusteita päntännyt päähän ja yrittänyt ymmärtää, mitä mistäkin tapahtuu ja miksi. Osaluettelokin vasta rajallinen. Lcd-näyttö, IR-sensori, laser, ledejä, painonappeja sekä johtoja ja vastuksia. Tänään kokeilen, syttyykö laser painonapista omilla kytkennöillä sekä ohjelman tapaisella. Seuraava projekti sitten peruutustutka, jota voisi kokeilla autoonkin. Perässä kuitenkin tullaan... :wanha:

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 17.9.2017 17:57

Greenpeace79 kirjoitti:Itsellä opettelu siinä vaiheessa, että olen vasta yksinkertaisimpia ohjelmia tehnyt. Eli perusteita päntännyt päähän ja yrittänyt ymmärtää, mitä mistäkin tapahtuu ja miksi. Osaluettelokin vasta rajallinen. Lcd-näyttö, IR-sensori, laser, ledejä, painonappeja sekä johtoja ja vastuksia. Tänään kokeilen, syttyykö laser painonapista omilla kytkennöillä sekä ohjelman tapaisella. Seuraava projekti sitten peruutustutka, jota voisi kokeilla autoonkin. Perässä kuitenkin tullaan... :wanha:


Tämän päivän annos keskittyykin aika pitkälle noihin perusasioihin. Toivottavasti sieltä löytyy apuja. Katsotaan jaksanko käydä dimmerin vielä tänään läpi, mutta sen jälkeen päästäänkin kohta jo ohjelmoimaan, niin ehkä se myös saattaa auttaa alkuunpääsyssä. :)

Eikä meillä nyt niin paljon ikäeroa ole (nimimerkin perusteella). Oma jälkikasvu ei vaan ole ihan Arduino iässä, niin iskä saa leikkiä vielä muutaman vuoden. :)

Avatar
pexi
Viestit: 1502
Liittynyt: 21.4.2005

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja pexi » 18.9.2017 1:48

"Oppilaalla" vähän poissaoloja, eikä siks ollut tehnyt läksyjä :D

1) *Piirtää päässään viidennen kopion aikasempien nappien yhteyteen* (vaikka aika sairaat paint taidot on, ei aina jaksa, jääköön vaikka pisteet saamatta)

2) En nyt varmaks tähän aikaan illasta osaa sanoa, mut puuttuisko näppäimiltä kenties GND?

3) Kts. edellinen, muuta ei tähän hätään pistä silmään.

Bonus: Arduino uno pinout diagram

4)
GNG - GND
VCC - 5V
SDA - A4
SCL - A5

5)
a. 35V 50mA
b. 1.2V 20mA

6)
Heitän hatusta, että ihan noihin 5v ja GND liittimiin syöttämällä. Etuja, ettei tarvi eriksekseen kytkeä USB/jack, haittoja, että vie "turhaan" pinnejä.

Bonus, jos jotai puuttuu, voin lisätä :D
Kuva
Viimeksi muokannut pexi, 18.9.2017 5:18. Yhteensä muokattu 1 kertaa.
Jos yksi kuva kertoo enemmän kuin tuhat sanaa niin kuinka montaa sanaa elokuva vastaa?

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 18.9.2017 2:54

pexi kirjoitti:"Oppilaalla" vähän poissaoloja, eikä siks ollut tehnyt läksyjä :D

4)
GNG - GND
VCC - 5V
SDA - A4
SCL - A5

5)
a. 35V 50mA
b. 1.2V 20mA

6)
Heitän hatusta, että ihan noihin 5v ja GND liittimiin syöttämällä. Etuja, ettei tarvi eriksekseen kytkeä USB/jack, haittoja, että vie "turhaan" pinnejä.

Bonus, jos jotai puuttuu, voin lisätä :D
Kuva


Kevyellä vitsillä lähdin vetämään tätä tälleen opettaja-linjalla, mutta ihan hauska leikkiä välillä rooleilla. :)

Edit Huom! Muutan nyt samalla myös tehtävien numerointia jatkon kannalta selkeämmäksi juoksevaksi numeroinniksi, joten nämä kyseiset tehtävät ovat siis jatkossa t.4-6(+bonus).

Mahtava suoritus ja helpot 5+bonus pisteet napattu. Nelonen, vitonen ja bonus meni siis ihan nappiin, mutta kutosesta tuli valitettavasti vain yksi piste.

Nelosen osalta sellainen lisätippi, että jatkossa kaikki muutkin tarvittavat I2C-laitteet voi kytketä samaisiin pinneihin (tai niiden haaroituksiin) ilman sen kummempia lisäpalikoita.

Vitosen osalta huomaamme, että tosiaan: Arduinon 5V volttia riittää heittämällä kytkemään optocouplerin päälle, vaikka sitä vähän vastuksella rajoitetaankin. Toisaalta virran osalta 20mA minimi kuulostaa olevan pelottavan lähellä sitä 40mA ehdotonta maksimia, kun otetaan se huomioon, että kulutus voi olla (erityisesti transistoreissa) olosuhteista riippuen moninkertainen minimiin nähden. Etuvastuksella sekä jännite että virta laskevat Arduinon pinnille turvallisille tasoille, mutta optocouplerin toiminta ei häiriinny. "Ison" puolen osalta voltit riittää kevyesti, kun tavoite oli 10V, mutta 50mA on kyllä pelottavan pieni luku. Tämä pitää mun vielä varmistaa Meanwellin datasheeteistä, ettei olisi kulkenut karvan verran enemmän virtaa DIM-johtojen välissä.

Kutosen osalta ensimmäinen lause on täysin totta, mutta tapoja on muitakin ja niihin liittyy isoja muttia (=haittoja), mutta myös energiatehokkuuteen liittyviä etuja. Varsinaisesti en itse ajatellut tuota USB:n/jakin pois jättämistä etuna ja toisaalta nämä pinnit ovat varattu melko tarkalleen juuri tähän käyttöön, niin se ei ole pahemmin ole muilta pois (jos lisähaaroituksia tarvitsee tämän takia, niin ne tulevat luonnostaan siinä ohessa tai niitä tarvitsisi joka tapauksessa).

Vastauksia saa täydentää myöhemmin ja muutkin voivat rosvota pisteitä, jos vielä kerkeävät. :)

Btw. Myös ensimmäisen osan pisteet on vielä jaossa, vaikka homma jonkin verran helpottuikin viimeisimmän materiaalin myötä.

Avatar
pexi
Viestit: 1502
Liittynyt: 21.4.2005

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja pexi » 18.9.2017 5:25

Suomies kirjoitti:...Varsinaisesti en itse ajatellut tuota USB:n/jakin pois jättämistä etuna...


Erinäisiä liittimiä (kännykän microUSB, tietokoneen USB jne) rikkoneena pyrin välttämään selkeästi laitteesta ulos törröttäviä liittimiä, ettei vaan hajota mitään. Etenkin kun nuo microUSB liittimet ei kovin kestäviä ole.

Ja edellisetkin rästiläksyt laitettu edelliseen postaukseen, nekin pääs unohtuu :yes:

Nukkuako vaiko unirytminkorjaus :think:. Se on kiva kun unenlahjat on kuin 99% idolsiin pyrkivien laulunlahjat :evil:

Ps. Täähän on kuin mun ala-asteen matematiikka.. Kauheasti kerääntyy läksyjä rästiin ja sit tehään yötä myöten niitä pois :roll:

Edit. Ja lisäyksenä kutoseen: Vin:iä käyttäessä menetetään mahdollisuus käyttää pinniä Vout:ina. Ja Vin on myös suojaamaton, joten sillä voi hajottaa arduinonsa helposti. Jos oikein ymmärsin, se voi kuitenkin mahdollistaa suurempivirtasten laitteiden käytön suoraan arduinon sähköillä?
Jos yksi kuva kertoo enemmän kuin tuhat sanaa niin kuinka montaa sanaa elokuva vastaa?

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 18.9.2017 16:12

pexi kirjoitti:
Suomies kirjoitti:...Varsinaisesti en itse ajatellut tuota USB:n/jakin pois jättämistä etuna...


Erinäisiä liittimiä (kännykän microUSB, tietokoneen USB jne) rikkoneena pyrin välttämään selkeästi laitteesta ulos törröttäviä liittimiä, ettei vaan hajota mitään. Etenkin kun nuo microUSB liittimet ei kovin kestäviä ole.

Ja edellisetkin rästiläksyt laitettu edelliseen postaukseen, nekin pääs unohtuu :yes:

Nukkuako vaiko unirytminkorjaus :think:. Se on kiva kun unenlahjat on kuin 99% idolsiin pyrkivien laulunlahjat :evil:

Ps. Täähän on kuin mun ala-asteen matematiikka.. Kauheasti kerääntyy läksyjä rästiin ja sit tehään yötä myöten niitä pois :roll:

Edit. Ja lisäyksenä kutoseen: Vin:iä käyttäessä menetetään mahdollisuus käyttää pinniä Vout:ina. Ja Vin on myös suojaamaton, joten sillä voi hajottaa arduinonsa helposti. Jos oikein ymmärsin, se voi kuitenkin mahdollistaa suurempivirtasten laitteiden käytön suoraan arduinon sähköillä?


Nyt ollaan jo erittäin lähellä totuutta. 1p tuosta suojauksen puutteesta lisää. (Olen kyllä samaa mieltä tuosta fyysisestä sähläysvaarasta, mutta hain vähän eri asiaa takaa.) Vähän kahden vaiheilla, että pitäisikö vielä jättää irtopisteet roikkumaan vai paljastaa loputkin. En taida malttaa, niin laitan "viiden pisteen vastauksen" näkyville:

Eli Arduinon virrat menevät niin, että USB-liittimen tarjoama 5V annostellaan suoraan erittäin herkälle prosessorille. Tämän uskaltaa tehdä, koska tietokoneen virtalähteet ovat usein erittäin laadukkaita. Samaa ei voi sanoa esim. halvoista kännykkälatureista, joista myös saisi "USB-virtaa" ulos.

Jakista syöttämällä voit antaa mitä vain väliltä +8-15V ja Arduino toimii nikottelematta. Napaisuus tarkistetaan, joten riski väärälle kytkennälle on erittäin pieni ja lisäksi virta kulkee sisäisen "muuntamon" kautta. Lisäksi saat tosiaan Vin-pinnistä (melkein) sen saman jännitteen ulos muuhunkin käyttöön. Kuitenkin kaikki virranhallintaan liittyvät komponentit kuten muuntajat ja tuo napaisuuden tarkistus haukkaavat oman osansa syötetystä jännitteestä. Kun Arduinon keskusyksikkö toimii +5V jännitteellä, niin nämä häviöt ovat jakin kautta siis jopa 3V (+7-8V minimijännite).

Jos syötät virtaa sisään Vin-pinnistä, niin tämä ohittaa napaisuuden tarkistuksen, mutta kulkee edelleen "muuntamon" kautta ja säästää noin 1V jännitehäviössä. Arduinosi toimii siis hiukan alemmalla, noin +6-7V jännittellä nikottelematta. En ihan tarkkaan muista, että oliko tässäkin vaiheessa jo pieni riski USB-liittimen kanssa, josta lisää seuraavassa.

Jos syötät virtaa 5V-pinnistä sisään, niin virta ei kuljekaan enää minkään tarkistusten tai reguloinnin kautta, vaan menee suoraan sinne erittäin herkälle keskusyksikölle. Tarkoittaa siis sitä, että virtalähteen pitää olla erittäin laadukas (=atx) ja napaisuudenkin ehdottoman oikein. Lisäksi oikein huonossa tapauksessa kytkemällä USB-liittimen vielä tähän kylkeen saatat vahingoittaa myös tietokonettasi - eli vain jompikumpi piuha voi olla kerrallaan kiinni.
Viimeksi muokannut Suomies, 18.9.2017 16:30. Yhteensä muokattu 1 kertaa.

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 18.9.2017 16:29

pexi kirjoitti:"Oppilaalla" vähän poissaoloja, eikä siks ollut tehnyt läksyjä :D

1) *Piirtää päässään viidennen kopion aikasempien nappien yhteyteen* (vaikka aika sairaat paint taidot on, ei aina jaksa, jääköön vaikka pisteet saamatta)

2) En nyt varmaks tähän aikaan illasta osaa sanoa, mut puuttuisko näppäimiltä kenties GND?

3) Kts. edellinen, muuta ei tähän hätään pistä silmään.

Bonus: Arduino uno pinout diagram


Tässäpä vielä palautetta näistä:
1) Juurikin näin.
2) Aivan oikein!
3) Myönnetään, että ei siellä tarkoituksella ollut virheitä, mutta jos tuolla dimmeripiirillä olisi menty, niin MOSFETin Drain (+) ja Source (GND) olivat menneet ristiin. Lisäksi kun piirsin UNOn kuvan mun piraattilankun perusteella, niin tosiaan tuo +5V, johon LCD on kytketty onkin virallisessa mallissa "IOREF-pin", eikä 5V. Käytännössä voi olla aloittelijan kannalta merkityksetön ero, mutta en jaksa mennä noihin "referenssijännitteisiin" sen tarkemmin, kun en niitä ikinä ole tarvinnut, enkä niistä siten pahemmin ymmärräkään. Varmempi ehkä käyttää sitä virallista 5V-pinniä ja haaroittaa siitä.

Aika tukeva kärkipaikka tällä kyllä tuli, mutta ehkä tuosta 3:sesta ei pysty pisteitä antamaan, kun kysyttiin nimenomaan "muita virheitä edellisen lisäksi". Lyödään siis pexille 10½ pistesaldoksi tähän mennessä. Uskoisin, että vielä tulee ainakin kahdet kotitehtävät, joten muillakin on edelleen hyvät mahdollisuudet kärkikahinoihin. :)

(Pitää vielä harkita, että tuleeko tuosta t5:sesta lisäpisteitä, kun sehän osoittautui vaikeammaksi pähkinäksi kuin alkuun kuvittelinkaan. Olen tässä itsekin mulkoillut datasheettiä tuntikaupalla, mutta kun ei kaikkea ymmärrä itsekään, niin pitää jatkaa selvityksiä. Tällä hetkellä näyttää vähän pahasti siltä, että ohjaamamme virta on jopa 100mA/driver, mutta optocouplerin maksimi vaikuttaisi olevan vain 50mA. Jotenkin vain sellainen kutina persiissä, että tämä ei saata olla ihan näin yksinkertaista. Lievä varoitus kuitenkin siitä, että dimmeri saattaa mennä vielä kertaalleen uusiksi.)

Edit. Huhhei ja huoli pois! Sain asiaan varmistuksen. Kaverille, jolta tuo 100mA/driver -luku oli peräisin, oli käynyt pilkkuvirhe ja oikea luku onkin 100uA/driver. Suomeksi sanottuna voit teoriassa ohjata jopa viittä sataa driveria yhdellä optocouplerilla!

Suomies
Viestit: 41
Liittynyt: 27.10.2016

Re: DIY: Älykäs LED-ohjain

ViestiKirjoittaja Suomies » 23.9.2017 13:11

Heip! Ajattelin nyt ilmoitella, että kyllä täällä pinnan alla vähän koko ajan tapahtuu, vaikka ulospäin on hiljaista. Vähän ollut muita kiireitä, mutta ne ajat mitä kerennyt, niin käyttänyt ohjelmakoodin hiomiseen, ettei sen kanssa olisi ihan niin sekoilua kuin kytkentäkaaviota viimeistellessä.

On toi nyt 90% valmis, eli varsinaiset toiminnnot kyllä tuntuu toimivan ihan jees, mutta käyttöliittymässä on yksi iso bugi, jonka syy pitäisi selvittää vielä ja tietenkin loputtomiin pientä pilkkuviilausta.

Ajattelin lähteä tuota koodiakin puskemaan sillä tyylillä, että tehdään nyt alkuun joku yksinkertainen ilman sen suurempia käyttöliittymiä, ettei mene niin helposti yli hilseen heti kättelyssä kuin jos puskisin koko 1000 rivin suht pitkälle optimoidun pökäleen kerralla ja yritän selittää, että miten se toimii. Kuitenkin lähtökohta olisi jatkolle se, että vähän on katseltu Arduinon perusharjoituksia, ettei kovin pitkälti tarvitse selittää mitä eroa on "void setup() {xxx}" ja "void loop() {xxx}" -rakenteilla jne. Pyrin kuitenkin kommentoimaan jokaisen uuden käytetyn käskyn ja rakenteen sitä mukaa, kun ohjelma kehittyy, eli pitäisi aika vähillä taidoilla päästä hommaan käsiksi.


Palaa sivulle “Niksinurkka”

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 0 vierailijaa