Lekce 4 - Analogový vstup

11.01.2013 12:53

    Dneska si vyzkoušíme jak na našem Arduinu fungují analogové vstupy. V připadě Arduino MEGA jich máme k dostpozici 16. Analogový převodník má rozlišení 10 bitů a vrací celá čísla od 0 do 1023. Standardně je referenční napětí nastaveno na 5V resp. při Arduinech s napájením 3,3V na tuto hodnotu. Ttot lze samozřejmně změnit pomocí funkce

analogReference(typ);

     kde můžeme typ nastavit podle svého přání na:

  • DEFAULT: defaultní nastavení - buď 5V nebo 3,3V dle napájení
  • INTERNAL: 1.1V ATmega168 nebo ATmega328 a 2.56V on the ATmega8 (není dostupné na  Arduino Mega)
  • INTERNAL1V1: 1.1V (pouze Arduino Mega)
  • INTERNAL2V56: 2.56V (poutze Arduino Mega)
  • EXTERNAL: napětí přivedené na pin AREF (pouze od 0 do 5V) je použito jako referenční

k samontému přečtení hodnoty slouží funkce

analogRead(pin);

která brací jak jsme si již uvedli celé čislo (integer) v tozsahu 0 až 1023. K tomu, aby jsme si naší funkci otestovali, budeme potřebovat:

  • Arduino MEGA (UNO nebo jiné)
  • nepájivé kontaktní pole
  • propojovací vodiče
  • odporový trimr nebo poteciometr cca 10k

Obvod zapojíme jako na obrázku níže:

program pro arduino:

 

 
const int analogPin = A0;  // Analogový vstup je nastaven na pi A0
int hodnota = 0;           // Proměná pro hodnotu přečtenou z A0
 
 
void setup() {
  // Nastaví rychlost komunika na sériovám portu na 9600 bps:
  Serial.begin(9600); 
}
 
void loop() {
  
  hodnota = analogRead(analogPin);  // přečte hodnotu z A0          
  
  // aby jsme videli vysledek, hodnotu odešleme přes sériový port
  Serial.print("hodnota = " ); // zapiše text hodnota =                      
  Serial.print(hodnota);       // zapiše proměnou hodnotu 
  Serial.println();            // nezapíše nic a přeskočí na nový řádek
 
  delay(1000);                 // čekej 1000ms                    
}
 
Aby jsme po spuštění programu viděli výsledek, protože zatím jsme nepřipojili žádný displej, musíme si otevřít v okně programu arduina monitor sériového portu. Tlačítko pro něj je v okně programu v pravém horním rohu jak vidíte na obrázku.
Po spuštění programu by jsme v okně monitoru sériového portu vidět hodnoty od 0 do 1023 podle nastavení vašeho trimru nebo potenciometru. Pokud vidíte nesmyslné nebo žádné znaky, zkontrolujte zda nastavení rychlosti seriového portu odpovidá nastevení v programu Arduina. Viz obrázek níže:
 
     Pokud jste všechno udělali spávně, mělo by to fungovat. Správný výsledek můžete shlédnout také na videu na konci stránky. 
     Aby jsme si trošku pohráli, náš program trošku modifikujeme. Místo výstupu na sériový port použijeme hodnotu, kterou jsme získali z analogového pinu k nastavení času a rychlosti blikání LED diody. Aby jsme nemuseli modifikovat a přidávat další součástky na nepájivé kontaktní pole, použijeme LED diodu integrovanou na Arduinu a připojenou na pin 13.
     Program upravíme následovně:
 
const int analogPin = A0;  // Analogový vstup je nastaven na pi A0
const int LED = 13;        // LED je pin 13
int hodnota = 0;           // Proměná pro hodnotu přečtenou z A0
 
 
void setup() {
pinMode(LED, OUTPUT);      // Nastaví pin 13 (LED) na výstup
}
 
void loop() {  
  hodnota = analogRead(analogPin);   // přečte hodnotu z A0          
  digitalWrite(LED, HIGH);           // nastaví na pinu 13 (LED) vysokou hodnotu (rozsvítí LED)
  delay(hodnota);                    // čekej 0 až 1023 milisekund (dle nastavení trimru)
  digitalWrite(LED, LOW);            // nastaví na pinu 13 (LED) nízkou hodnotu (zhasne LED)
  delay(hodnota);                    // čekej 0 až 1023 milisekund (dle nastavení trimru)
}
     
 

 

Zpět

Diskusní téma: Lekce 4 - Analogový vstup

Datum
Vložil
Titulek

Divné chování ADC vstupů

Narazil jsem na tento kód:
// program TEST ADC
void setup() {
Serial.begin(9600); // prenos do PC 9600Bd
}

void loop() {
for (int i = 0; i < 8; i++) { // pro AD vstupy 0 - 7
Serial.print(analogRead(i)); // vypis - zmerene napeti
Serial.print(" "); // odsazeni
}
Serial.println(" "); // odradkovani
delay(200);
}

a zjistil jsem že se navzájem ovlivňují ADC vstupy. Zkoušeno na NANO a UNO.
Je to možné nebo je to tím že mam "klony"

Diky

Datum
Vložil
Titulek

vzorkovacia frekvencia

Prosím Vás, nevedeli by ste mi povedať, akú vzorkovaciu frekvenciu má arduino uno?

Datum
Vložil
Titulek

Napětí

Je to tak, že maximální napětí, které lze změřit na analogovém vstupním pinu je rovno referenčnímu napětí?
Pak by bylo šikovné doplnit začátečnické vysvětlení v tom smyslu, že pokud se použije jako referenční napětí napájecí (defaulní stav), tak je možné na analogovém vstupu měřit napětí od 0V do napájecího (např. 3.3V nebo 5V). V takovém případě bude naměřená hodnota 1023 odpovídat napájecímu napětí. A pokud jsem to správně pochopil, tak při použití jiného referenčního napětí bude max. naměřená hodnota rovna použitému referenčnímu napětí, je to tak? Pak bych tento velice pěkný článek doplnil o základní informaci, že naměřené hodnoty mikroprocesorem jsou vždy od 0 do 1023 a je nutno si je přepočítat v závislosti na tom, jaké je použito referenční napětí. Nejsem si ale jist, zda to říkám správně, protože osobně používám jenom referenční napětí = napájecí a proto bych si toto rád nechal od někoho objasnit.

Datum
Vložil
Titulek

Wau

nemám slov wau

Datum
Vložil
Titulek

loop

Zdravím chtěl bych se zeptat jestli a jak lze vložit více hlavních smyček programu:
void loop()

Předem děkuji.

Datum
Vložil
Titulek

Re: loop

Pokud se nepletu tak to už pak musíš dělat přes pole. Ale nechci kecat nejsem v tom až takový profík jak Admin webu ale myslím, že do loopu lze vložit pouze jednu hlavní smyčku a do ní pak vkládat příslušné příkazy. Jestli kecám tak sorry ;)

Datum
Vložil
Titulek

Re: Re: loop

Arduinový framework zavolá jednou setup() a pak v nekonečném cyklu volá loop(). Jednoduchá cesta je ty "další loop" prostě vypsat za sebe do loop(), složitá cesta je taky možná, ale podstatně složitější, než pouhé pole.

Datum
Vložil
Titulek

Port Com

Mohl by jsi mi prosím tě nastínit jak zapojit arduino do portu COM?
Předem děkuji.

Datum
Vložil
Titulek

Re: Port Com

pokud to dobře chápu, tak tady meleš úplný nesmysly.
když arduino připojíš usb k počítači, tak se samo připojí na port COM# , kde # se vybere podle nejnižší volné při prvním připojením. když se podíváš do správce zařízení, tak to tam najdeš a vyčteš ho i z arduino ide.
radši si přečti tohle:
https://arduino8.webnode.cz/news/zaciname-s-arduinem/

Datum
Vložil
Titulek

Re: Re: Port Com

Není to nesmysl. Může se setkat s problémem s ovladačem i to se bohužel někdy stane. Musí se dostat do správce zařízení a tam dát aktualizovat ovladač případně ho vybrat v místě kde jej má v počítači (pokud má). Tento problém jsem měl také když jsem s Arduinem začínal. Většinou v Arduinu je to ten druhý COM který se musí nastavit poprvé ručně! Ale to až po vyhledání ovladače až se Arduino přidá ve správci zařízení z neznámého do zařízení poté by měl systém vyhodit že zařízení bylo úspěšně nainstalováno a až poté v Arduinu ručně nastavit ten druhý COM. Snad jsem to napsal nějak srozumitelně ;)

1 | 2 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.