31. díl – OctopusLAB

Elektronická laboratoř


K čemu se dá EDU_KIT1 použít?

Mikrokontrolér ESP32 jsme si zvolili pro jeho rychlost, výpočetní kapacitu, velikost paměti (programové i operační) a cenovou dostupnost. Postupně vzniká celá řada velmi zajímavých projektů. Pár praktických zapojení jsme už představili v minulých dílech, tentokrát se zaměříme na využití v elektronické dílně či amatérské laboratoři.

Výhodou EDU_KITu je, že se k němu dá připojit celá řada dalších periferií, čidel a displejů. Zde je například připojena externí SD paměťová karta a černobílý LCD displej Nokia (z dnes již retro mobilního telefonu). Takže pokud potřebujete data logger s velkou kapacitou, tato sestava může být vhodná. Na grafickém displeji se dá vykreslit i graf a spolu s několika ovládacími tlačítky si můžete vytvořit kapesní zařízení přesně podle svých představ.

Zde jsme propojili EDU_KIT s rozšiřující deskou FIRST board pro připojení OLED displeje a dalších drobných součástek. ESP32 jsme použili k sestrojení jednoduchého digitálního osciloskopu, jehož výstup zobrazujeme na OLEDu. ESP32 nám slouží i jako zdroj periodického obdélníkového signálu. Obdélníky jsme „prohnali“ jednoduchým RC filtrem (kondenzátor v řádech desítek mikrofaradů), čímž vzniká klasická „žraločí ploutev“ (průběh nabíjení a vybíjení kondenzátoru). Tento signál přivádíme na analogový vstup ESP, který měříme co nejrychleji (vzorkujeme) a naměřené hodnoty pak vykreslíme. Seznamujeme se i s principy digitálního měření.

Pomalý Micropython nás omezuje v této aplikaci na jednotky kHz, pomocí C se dá dosáhnout i 10-100 násobného zrychlení. Signál nejdříve navzorkujeme a až pak vykreslujeme jeho průběh. Z přiloženého obrázku vidíme, že výsledek je srovnatelný. Pro jednoduchá výuková zapojení je to velmi názorné.

Logický analyzátor

Sice máme nějaký jednoduchý prototyp vlastního řešení, ale našli jsme skvělý projekt, který vypadá opravdu dobře. Projekt je rozpracován na Githubu https://github.com/EUA/ESP32_LogicAnalyzer. Pokusíme se ho zahrnout do našich testů s ESP32. Napište nám, když ho případně také vyzkoušíte.


Elektronické pokusy s EDU_KIT1

V následujících pokračováních si postupně zkusíme představit některá zapojení. Naším cílem bude sestrojit co nejuniverzálnější měřící zařízení. Průběžně budeme zkoušet měřit:

  • Napětí – analogovým vstupem na odporovém děliči
  • Proud – jako napětí na odporu
  • Odpor – jako napětí v odporovém děliči (fotoodpor, termistor…)
  • Kondenzátor – kapacita je úměrná času nabití/vybití (trigger)
  • Dioda – polarita tekoucího proudu
  • Tranzistor – pár základních vlastností a charakteristik
  • Logický analyzátor – vícekanálové digitální vstupy
  • Frekvence
  • a řada dalších.

Jako doplňující modul pro jednoduchá zapojení se dá použít i nepájivé pole. Stejně tak nám poslouží celá řada univezálních desek. My využíváme desky Octopus LAB – především FIRST board (má i velké pájecí plošky) a UNI board (s možností připojení integrovaných obvodů nebo celých modulů).







a toto už je do dalšího čísla

obrázky se překreslí a přibudou fragmenty kódu



>>>

Hamík 196
32. díl – OctopusLAB

Měříme napětí pomocí AD převodníku

Náš úkol má jednoduché zadání: k EDU_KIT připojíme tužkový článek (1.5 V) a chceme signalizovat pomocí RGB Led, jak je nabitá. V dalším kroku můžeme zkoušet, jak pomocí displeje i zobrazit, jaké je na ní (nebo na vstupu obecně) napětí.

Zapojení je stejné, jako kdybychom měřili napětí pomocí voltmetru (podle obrázku v levé části, šipkami je naznačeno připojení baterky). Základem je propojení na „společnou zem“ (GNG). Moderní mikrokontroléry mají několik ADC vstupů (Analog-Digital converter – převodník z analogového signálu na digitální, což je vlastně digitální voltmetr).

Na obrázku vidíme princip hypotetického tříbitového převodníku. Tři bity nám určují osm možných stavů (23 = 2 * 2 * 2 = 8, hodnoty 0 až 7) takže analogová hodnota se měří jen s přesností velikosti „červeného schodu“ na obrázku. V praxi se setkáte nejčastějsi s mikrokontroléry s 10 nebo 12 bitovými AD převodníky. To znamená že mohou nabývat 1024 (210) respektive 4096 (212) hodnot. Výstupem ADC je tzv. RAW hodnota. Vzorec pro její převedení na měřené napětí bývá lineární: val_v = raw * step (v ukázce 0.5 * 3).

V realitě je samozřejmě měření ADC zatíženo různými chybami, například kolísáním vstupního a referenčního napětí. Odchylky měření souvisí i s okolní teplotou a protože ADC je vyrobeno z neideálních materiálů, tak není kalibrační konstanta pro všechny obvody úplně přesně shodná. Tyto nepřesnosti lze korigovat jak pomocí hardware (low pass filtr, v základu postačí odrušovací kondenzátor) tak i sofware, kde využíváme poznatků ze statistiky k získání přesnějších výsledků. Nejjednodušším nástrojem je výběrový průměr který využíváme nyní:
get_adc_aver(num) je metoda, která změří několik raw hodnot bezprostředně po sobě a vrátí jejich aritemetický průměr:
value = suma(analog)/num – využíváme jako digitální filtraci u pomalých měření. Používají se i sofistikovanější nástroje než prostý průměr, často se třeba předem eliminuje stejný počet nejvyšších a nejnižších hodnot před průměrováním („ořezání špiček“).

Pro získání převodní konstanty „step“ můžeme využít výhody Micropythonu a celý proces provést z příkazové řádky terminálu.
Provedeme tři měření – pro 0 V, napájecí napětí 3.3 V a známou hodnotu baterie.

>>> from components.analog import Analog
>>> adc1 = Analog(36)   # vstup Uin 
>>> adc1.get_adc_aver() # průměr několika měření
0                       # pro GND by to měla být nula
>>> adc1.get_adc_aver() # 12-bit ADC max. hodnota 4095
4095                    # pro 3.3V: 3.3/4095 = 0.0008058607         
>>> adc1.get_adc_aver() # další měření:
1755                    # pro 1.6V
step = 1.6/1755         # 0.000911681 
raw = adc1.get_adc_aver() 
val_v = step * raw

# jak pak postupovat pro zobrazení na RGB: 
ws.color(rgb.ORANGE) # zůstane svítit při val_v mezi 1.1 až 1.3 V
if (val_v > 1.3): 
   ws.color(rgb.GREEN) # více než 1.3 svítí zeleně
if (val_v < 1.1): 
   ws.color(rgb.RED) # měně než 1.1 svítí červeně
# pro zobzazení na displeji:
displ7.show(val_v)

Na dalším obrázku je jednoduchá sestava pro obecné měření napětí. Zapojení s odporovým děličem R1/R2, filtračním kondenzátorem C (100n) a zenerovou diodou ZD (ideálně 3V3) poslouží jako dobrý základ našeho obecného měřícího přístroje. Naznačen je i další ADC obvod (ESP32 má totiž analogových vstupů více).
Jak nastavit odporový dělič? Zvolíme si maximální předpokládané napětí na vstupu Uin (6 V /12 V /24 V) a podle toho vybereme jednotlivé odpory:

Pro R2 = 10k, podle  Uin(max)[V] použijeme R1:
10k pro 6 V, 30k pro 12 V nebo 68k pro 24 V a pod.

Doporučujeme pro náhodná experimentování přidat i zenerovu diodu, která slouží jako ochrana vstupu proti přepětí. Pokud by se totiž na vstup dostalo vyšší než povolené napětí, ESP by se mohl poškodit. Jsou i další možnosti ochrany, ale o nich se zmíníme až příště.



.
..


.
..



následují část už bude opět do dalšího čísla

:::
..

Hamík 198
33. díl – OctopusLAB – ochrana AD vstupů

V minulém díle jsme se zaměřili na zjištění stavu přikládaného 1.5 V článku co nejjednodušším způsobem. Nejdříve jsme si změřili dvě hraniční hodnoty rozsahu pro „docela nabito“ a následně jsme pomocí tří barev RGB ledkou signalizovali jestli jsme právě detekovali hodnotu pod, mezi nebo nad změřenými hodnotami.

Vycházeli jsme z předloňského workshopu, který jsme pořádali pro úplné začátečníky a inspirací nám tehdy byl takovýto levný „čínský“ tester baterií, který plnil obdobnou funkci:

Zabývali jsem se články 1.5 V, ale určitě se najde někdo, kdo zkusí i 9 V baterii, čímž by ESP zaručeně zničil. Proto tam bylo konstatování: v tomto případě použijte alespoň Zenerovu diodu. Předpokládal jsem, že bastlíři mají v šuplíku nějakou k dispozici, na rozdíl od dalších – a rozhodně lepších – možností ochran.

A na to jsem obdržel úplně první reakci, která mi byla zaslána, ačkoli by se více hodila až na dnešní pokračování, kde jsem se vhodnější a preciznější ochraně vstupů plánoval věnovat. Zapojení z minula (AD vstup s ochranou pomocí ZD) jako „přesný“ voltmetr samozřejmě použít nejde, přestože by se softwarově dala případná nelinearita způsobená ZD eliminovat. Vlastně mi to ale nahrálo na hezké praktické použití vznikající elektronické laboratoře. Využijeme dnes toho, že ESP32 disponuje více analogovými vstupy. Proměříme si, co se tedy děje, pokud je na vstupu ochranná Zenerova dioda.


Pomocí potenciometru (lineární, 10k) si postupně nastavujeme vstupní napětí od 0 V do 3 V. Na vstup ADC1 přivádíme napětí „bez ochrany“ a na ADC2 máme jako ochranu Zenerovu diodu 3,3 V. V původním zadání jsme takto nastavovali hodnoty pro tužkový článek v okolí 1.5 V pro získání dvou hraničních bodů (na obrázku modře A a B). Pro takovéto použití je ochrana ZD v pohodě použitelná a plní účel ochrany proti přepětí. Při trvalém připojení ochranné ZD budou body (v okolí 1.5 V) sice posunuté, ale při správné kalibraci bude přístroj fungovat dobře.

Co by se stalo kdybychom zvýšili vstupní napětí nad 1.5 V? To je vidět z interpolací naměřených RAW hodnot – oranžová přímka pro ADC1 a zelená křivka pro ADC2. Trimrem jsme si s pomocí voltmetru (naznačeno šedou barvou) nastavovali postupně napětí (0 – 0.5 – 1 – 1.5 – 2 – 2.5 až 3 V) a pro každé napětí jsme změřené hodnoty vynesli do grafu.

>>> from components.analog import Analog
>>> adc1 = Analog(36)   # vstup Uin  
>>> adc2 = Analog(39)   # vstup Uin+ZD 
  
# následující řádek opakujeme pro každé nastavené napětí:
>>> print(adc1.get_adc_aver(), adc2.get_adc_aver())

Proměřili jsme si pak i VA charakteristiky dvou ZD na menší napětí – 4V7 s R 10k a ZD 3V3 s R 1k. Problém se objeví už v proudu protékajícím při 2 nebo 3 V (v kombinaci s velkým odporem děliče). 1 mA na 1k by udělal chybu 1 V, což vidíme i v předchozím grafu (zelená křivka vs. oranžová přímka).
Proč se to děje a jaké řešení je vhodnější nám s předstihem a podrobněji ve své reakci napsal Jan Sixta (OK1-36035):
Červeně je vyznačená VA charakteristika běžné 3V3 Zenerovy diody (BZX84)

Správně by se na omezení měla použít křemíková signálová dioda (1N4148 nebo podobná), která ořízne napětí na vstupu A/D převodníku o jeho napájecí napětí, které je zpravidla to maximální, které vstup A/D převodníku bez poškození snese. Proud je již omezen na bezpečnou velikost přítomností napěťového děliče, jehož výstupní odpor je volen i s ohledem na tuto schopnost ochránit vstup převodníku (omezit proud na bezpečnou velikost).
Ideálně by se mělo použít dvojici diod (BAV99, nebo s velmi nízkým závěrným proudem BAV199), kde druhá dioda omezí i přítomnost záporného napětí. Ještě správněji se pak mezi diodový omezovač vloží ochranný sériový rezistor.
Samozřejmě, každá aplikace má svá specifika a tak ne vždy lze tento jednoduchý diodový omezovač použít.


.
..


zase se asi víc nevejde ( takže nějak příště shrnu + schéma a fotka)


..
..
.
.


Hamík 200
34. díl – OctopusLAB

V tomto díle ještě doplníme některé informace k projektu z minulých dílů, kdy jsme experimentovali s ADC na ESP32.

Na obrázku je vidět, jak jsme zapojili dva ADC kanály pro naše měření. K EDU_KIT1 s ESP32 jsme do nepájivého pole (černé vlevo) připojili Zenerovu diodu s resistorem a v pravé části jsme potenciometrem nastavovali vstupní napětí. Zapojení je velmi jednoduché a kromě několika propojovacích kablíků už jsme nepotřebovali nic dalšího. Bílá svorkovnice (vyvedená nahoře) sloužila k připojení voltmetru, který jsme využívali při kalibraci.


Využití Arduino IDE pro nakreslení průběhu

V tomto experimentu využijeme poměrně nové (a zatím poměrně málo využívané možnosti) populárního vývojového prostředí Arduino IDE. V horním menu zvolíme Nástroje | Sériový ploter. Pak nastavíme 115200 Bd pro sériovou komunikaci. Někdy je nutno zvolit i COM port, ale aplikace většinou sama detekuje ESP (respektive sériový převodník).
Jednoduchý program v našem ESP je pouze rozšířením z minula, kdy jsme ho doplnili o tisk (odesílání) hodnot (metodou print). Využíváme toho, že vypisované hodnoty se posílají po sériové lince (naším USB kabelem) a Arduino ploter akceptuje číselné hodnoty oddělené tabulátorem.


from components.analog import Analog

print("--- A/D and Arduino plotter ---")
adc1 = Analog(36)
adc2 = Analog(39)

while True:
     adc1 = str(adc1.get_adc_aver())
     adc2 = str(adc2.get_adc_aver()) 
     print("0"+"\t"+val36+"\t"+"2000"+"\t"+val39+"\t")

Využití Arduino ploteru je proto velmi snadné. Program v reálném čase čte na sériové lince tabelátorem oddělené hodnoty a ty vykresluje v grafu. Graf se vykresluje průběžně a tak, když chceme aby nám neskákal a neplaval, posíláme ještě další hodnoty – v našem případě 0 a 2000 (RAW), což nám ve výsledném plovoucím obrázek zafixuje vertikální osu (horizontální je čas a ten stále ubíhá).


V dalším pokračování (měření proudu, odporu a dalších fyzikálních veličin) budeme veškerá měření převádět na měření napětí. U měření odporu měříme napětí na neznámém odporu ze kterého se dá „trojčlenkou“ výsledek vypočítat. Pro měření proudu můžeme použít i speciální moduly, které nám proud převedou na napětí. Při měření kapacity, frekvence a podobně – potřebujeme zase měřit délku pulzů – čas.


V tuto chvíli, se série článků přeruší a po krátké pauze budeme pokračovat v tomto projektu – jednoduchého měřícího přístroje, kde se zaměřujeme prozatím na principy měření a ukázky, jak se dá ESP32 využívat. Napište nám na info@octopuslab.cz, jaké další projekty by vás zajímaly.


Intel 4004 slaví padesátiny!

Čtyřbitový mikroprocesor Intel4004 byl prvním komerčně dostupným procesorem a předchůdcem osmibitové řady 8080. A jelikož spatřil světlo světa v roce 1971, bude letos slavit kulaté výročí. Rozhodli jsme se proto s některými našimi spolupracovníky vytvořit speciální emulátor na EDU_KIT1 (ESP32 + Micropython). Pokud by to někoho zajímalo, základ už máme:
https://github.com/octopusengine/micropython_4004-emul

Tento velmi „primitivní“ procesor se používal se v jednoduchých kalkulačkách, pro řízení tiskáren a v dalších (dnes již mnohdy zapomenutých) projektech. Programovat se dá v assembleru a má poměrně jednoduchou instrukční sadu. Pokud si chcete pohrát, existuje i on-line simulátor: http://e4004.szyc.org/emu/. Principy, které si osvojíte, se jen v malých obměnách používají i v dnešních procesorech.