Cieľom tohoto cvičenia je zobraziť meranú veličinu na displeji a v počítači.
__TOC__
== Lokálne zobrazenie meranej veličiny ==
V tejto časti cvičenia zobrazíme meranú veličinu na miestnom LED alebo LCD displeji mikropočítača. Displej môžeme použiť buď 7-segmentový s LED alebo komplexnejší
programovateľný LCD. Z tejto časti vám nevyplýva žiadna úloha, len si pozrite príklady aby ste ich vedeli prípadne implementovať na svojom vlastnom reálnom Arduine s nejakým displejom.
Ak sa vám príklad nezobrazí správne priamo tu, použite [https://www.tinkercad.com/things/7X46oojlMjd-misa-7-segment-4-digit-led-display/editel?sharecode=4ygjI4gH8xhMVXSfDyxGeZS8eGEbDSuEEmrfXKvw_to tento odkaz].
<BR>
<BR>
<span class="mw-customtoggle-2020" style="background:#e0e8ff">Návod do labáku (nie pre online štúdium): (kliknutím rozbaliť / zbaliť)</span>
Ak sa vám príklad nezobrazí správne priamo tu, použite [https://www.tinkercad.com/things/gjGgeC1wSPg-misa-lcddemo/editel?sharecode=In_RCwIxVqMhXSORfP1HGFq724LNdf4-8hn1Yr6oN0g tento odkaz].
<span class="mw-customtoggle-2022" style="background:#e0e8ff">Návod do labáku (nie pre online štúdium): (kliknutím rozbaliť / zbaliť)</span>
Najprv sa snažte pochopiť, ako je vytvorený vzorový program, ako sa konfiguruje pripojenie LCD k portom, skontrolujte konfiguráciu. Potom modifikujte program z predošlého cvičenia tak, aby
sa meraná hodnota polohy potenciometra zobrazila na displeji. Zobrazte aj inžinierske jednotky.
==== Programovanie ====
Nasledovný príklad je pre Arduino.
Pozn.: Ak budete vypisovať najprv štvorciferné číslo a potom trojciferné, nezabudnite to štvorciferné najprv vymazať, inak vám tam posledná cifra bude "visieť". Vymazať sa dá napríklad takto:
** Podrobné manuály sú aj u [http://www.hantronix.com/page/index/products/character výrobcu Hantronix].
* Peter Ouwehand: '''[http://home.iae.nl/users/pouweha/lcd/lcd.shtml How to control a HD44780-based Character-LCD]'''
* Ian Harries: ''[http://www.doc.ic.ac.uk/%7Eih/doc/lcd/ HD44780-Based LCD Modules]'''
* Tomáš Dresler: '''[http://www.hw.cz/ART632-Inteligentni-displeje-a-jejich-pripojeni-k-PC.html Inteligentní displeje a jejich připojení k PC]'''. [hw.cz]
* Nuts & Volts: [http://www.parallax.com/dl/docs/cols/nv/vol1/col/nv31.pdf Demystifying Character Based LCDs]
* Stamp Works - pp. 73 and more [http://www.parallax.com/Portals/0/Downloads/docs/books/sw/Web-SW-v2.1.pdf]
</div> <!-- Koniec zabalitelnej casti -->
Riadok 435:
Riadok 154:
Meranú veličinu odmeriame procesorom, po prevode A/D prevodníkom a úprave linearizáciou z predošlých
Meranú veličinu odmeriame procesorom, po prevode A/D prevodníkom a úprave linearizáciou z predošlých
cvičení budeme hodnotu posielať po sériovej linke s parametrami 9600-N-8-1 do PC. Ak máte doma Arduino,
cvičení budeme hodnotu posielať po sériovej linke s parametrami 9600-N-8-1 do PC.
môžete použiť program na vysielanie hodnoty z potenciometra pripojeného na niektorý analógový vstup,
alebo len posielať náhodne vygenerované hodnoty. Program môže vyzerať napríklad takto:
<source lang="c">
int adcValue = 0;
void setup() {
Serial.begin(9600);
}
void loop()
{
/* This part of code is for real measurement from Channel 0 */
adcValue = 0; // Filter - average from 16 values
for (int i = 1; i<=16; i++)
adcValue = adcValue + analogRead(0);
adcValue = adcValue/16;
/* Uncomment this part of code, if you want just simulated values */
/*
if (adcValue < 1023)
adcValue = adcValue + random(-1,2);
else
adcValue = 0;
*/
char tempString[10]; // Used for sprintf
sprintf(tempString, "%4d",adcValue); // Convert into a string that is right adjusted
//sprintf(tempString, "%d", adcValue); // Convert into a string that is left adjusted (requires digit 1 command)
//sprintf(tempString, "%04d", adcValue); // Convert into a string with leading zeros
//sprintf(tempString, "%4X", adcValue); // Convert int HEX, right adjusted
Serial.println(tempString); // Send the value using serial to PC
delay(100);
}
</source>
Hodnoty, ktoré PC prijíma si môžete pozrieť v terminálovom okne priamo v prostredí Arduino, alebo použite
radšej profesionálny sériový terminál (napr. Terminal).
==== Serial Terminal by Bray ====
[[Súbor:IconTerminal.png|left]] Na testovanie a prvé pokusy so sériovým rozhraním sa vám určite zíde aj nejaký terminálový program, masochisti môžu použiť aj Hyperterminál z Windows. Terminál je jednoduchý program, v ktorom sa zobrazujú všetky prijaté znaky a naopak, je možné nejaké iné znaky odvysielať. Dajú sa samozrejme aj nastaviť základné komunikačné parametre.
* [https://sites.google.com/site/terminalbpp/ Terminal by Bray++], neinštaluje sa, len spustí.
==== Ako si v Processingu vyberiem, na ktorý port bude pripojený? ====
==== Ako si v Processingu vyberiem, na ktorý port bude pripojený? ====
Riadok 602:
Riadok 262:
podadresár 'data' a v ňom potrebné bitmapy pre váš program.
podadresár 'data' a v ňom potrebné bitmapy pre váš program.
==== Nemám doma Arduino! ====
Ak nemáte Arduino, môžete si program v Processingu vyskúšať aj tak. Nainštalujete si dvojicu virtuálnych sériových portov
napr. https://www.eltima.com/products/vspdxp/ - stačí základnú verziu Standard, ktorá je bezplatne k dispozícii 14 dní.
V systéme vám vzniknú dva nové sériové porty. Jeden otvoríte v termináli, cez neho budete posielať čísla, ktoré chcete
zobraziť. Druhý port použijete ako prijímací v Processingu.
[[Súbor:VirtualSerialPort.png|1000px]]
<source lang="c">
</source>
== Nepovinne: Grafické priebehy na PC --Serial Plotter ===
[[Súbor:IconSerialPlotter.png|left]] Serial Plotter je trocha sofistikovanejší program ako Terminal, jeho úlohou je zakresliť graficky všetky prijaté informácie. Najjednoduchšie je posielať mu čísla, pričom ich môže byť aj viac, oddelených čiarkami. Každá jedna n-tica hodnôt musí končíť znakom pre nový riadok. V knižnici Serial použite bloky Serial Write Number pre čísla, Serial Write String pre čiarky a Serial Write Line pre ukončenie riadka. Neposielajte hodnoty príliš často, aby sa nepreplnil vstupný buffer.
Na tomto cvičení je cieľom pripojiť odporový senzor k Arduinu a vylepšiť jeho prevodovú charakteristiku vybranou metódou a zlinearizovanú hodnotu zobraziť
na nejakom miestnom displeji (LED, LCD a pod.) prípadne ju odoslať po sériovej linke do PC, kde ju takisto zobrazíme vo vlastnom programe.
Zobrazte aktuálnu hodnotu vo vlastnom programe cez Processing.
Schéma zapojenia
#define mySensor 0 // 0: potenciometer// 3: senzor sily// 5: senzor ohybuintadcValue;floatoutputValue;voidsetup(){// monitor sa otvara dole vpravo Serial.begin(9600);// typicke rychlosti su 9600 alebo 115200}voidloop(){adcValue=analogRead(mySensor);// read ADC valueoutputValue=adcValue;Serial.println(outputValue);// prints value over serialdelay(100);// delay in milliseconds}
Lepší kód na poloautomatické meranie
// Meranie na potenciometrickej doske v.2024// Tlacitko je na A5 a zapiseme nim meranie// Potenciometer je na A4 a da sa citat 0/1023// pricom ak zmenim prepinacom charakteristiku, tak// tym ze je to napatovy delic, funguje stale rovnakounsignedlongintsensorValue;unsignedintcounter;voidsetup(){Serial.begin(115200);pinMode(LED_BUILTIN,OUTPUT);pinMode(18,INPUT);pinMode(19,INPUT);Serial.println("*** MISA measurement (press Red PB to start): ***\n\n");counter=1;}voidloop(){digitalWrite(13,HIGH);// Led ON = Readywhile(digitalRead(19)==1){/* wait here */}digitalWrite(13,LOW);// Led OFF = Measuring.../* odmeraj N hodnot a vypocitaj priemer */sensorValue=0;for(inti=1;i<=64;i++)sensorValue+=analogRead(A4);sensorValue=sensorValue/64;Serial.print(counter++);Serial.print(",");Serial.println(sensorValue);delay(500);// delay in between reads for stability}
Meranú veličinu odmeriame procesorom, po prevode A/D prevodníkom a úprave linearizáciou z predošlých
cvičení budeme hodnotu posielať po sériovej linke s parametrami 9600-N-8-1 do PC.
Hodnoty, ktoré PC prijíma si môžete pozrieť v terminálovom okne priamo v prostredí Arduino.
Prijímač - Processing
Ak hodnoty chodia tak ako potrebujeme (skontrolujte nastavenie parametrov rýchlosť-parita-počet bytov-počet stopbitov)
navrhneme si krajší zobrazovací program (appku, ak chcete).
Na to využijeme prostredie Processing, ktoré vyzerá veľmi podobne ako to Arduinovské, ale generuje
program pre Windows (alebo aj pre linux, či iOS). Prostredie Processing je na počítačoch v laboratóriu už nainštalované,
doma si môžete nainštalovať odtiaľto: https://processing.org/
V prostredí processing preložte a spustite nasledovný program
importprocessing.serial.*;intadcValue=0;// value received from Serial // String Unit="mA";// String Unit="kΩ";// String Unit="°C"; // We can use Unicode chars directlyStringUnit="\u00B0C";// Unicode codes may be entered as wellSerialmyPort;PFontSegment,Units;voidsetup(){// Setup the display window size(480,180);// Size of the windowSegment=createFont("Segment7",150);// Assign fonts and size Units=createFont("Arial",40);textFont(Segment);textAlign(RIGHT);// Text align fill(250,250,0);// Font color is yellow = red + greenprintln(Serial.list());// List all the available serial ports// Then open the port you're using, my is the first, i.e. '0'myPort=newSerial(this,Serial.list()[0],9600);// don't generate a serialEvent() unless you get a newline character:myPort.bufferUntil('\n');}voiddraw(){// Let's start to displaybackground(0,0,0);// set the background color blacktextFont(Segment);text(adcValue,400,150);textFont(Units);text(Unit,465,65);}voidserialEvent(SerialmyPort){StringinString=myPort.readStringUntil('\n');// get the ASCII string:if(inString!=null){inString=trim(inString);// trim off any whitespaceadcValue=int(inString);// convert into an integeradcValue=int(map(adcValue,0,1023,0,1023));// possible range adjusting}}
Ako si v Processingu vyberiem, na ktorý port bude pripojený?
Po spustení programu príkazom println(Serial.list()); do konzoly vypíšeme zoznam dostupných portov.
Na obrázku vyššie vidno, že máme dostupné tri porty, COM1:, COM2: a COM3:
Ak chceme komunikovať cez COM2:, musíme pri otváraní použiť index 1, t.j. Serial.list()[1] a nastaviť rýchlosť 9600.
Ako si v Processingu vyberiem font?
Font musíte najprv normálne nainštalovať do operačného systému (stiahnuť font, kliknúť, zobrazí sa ukážka, nainštalovať).
Potom príkazom Segment = createFont("Segment7", 150); spravíte smerník na príslušný font, ale musíte vedieť,
ako sa volá. Niekedy je problém v tom, že súbor s fontom sa nazýva inak, ako samotný font.
Napokon treba v menu Processing zvoliť Tools -> Create Font. Tým sa vytvorí v priečinku so zdrojákom vášho programu
podadresár 'data' a v ňom potrebné bitmapy pre váš program.
Úlohy
Úlohy, ktoré treba odovzdať:
1. cvičenie: reálna alebo nasimulovaná charakteristika snímača
2. cvičenie: screenshot alebo video z prenosu dát do PC
3. cvičenie: linearizovaná reálna alebo simulovaná charakteristika