04 - Arduino - digitálna komunikácia

Arduino digitálna komunikácia - PDF

Videonahrávka z cvičenia 11.3.

Zdroje:

Experimenty

7-segmentový displej

Cieľom je zistiť, aký typ displeja máte a rozsvietiť jednotlivé segmenty.

https://www.petervis.com/electronics%20guides/7%20Segment%20LED%20Display/7-segment-display-pinout/7-segment-display-pinout.gif
  1. Vyskúšajte nasledovné zapojenie

    • pripojte pin 3 (alebo 8) na 7-segmentovom displeji na GND Arduina.
    • Pripojte niektorý z ostatných pinov na 7-segmentovom displeji (napr. pin 1) na rezistor (niektorú z menšich hodnôt napr. medzi 100Ω a 470Ω)
    • rezistor pripojte následne na 5V na Arduine

    Ak svieti, máte 7-segmentový displej so spoločnou katódou.

    Ak nesvieti, je potrebné zameniť 5V a GND (zapojíme Arduino 5V na displej pin 3, pin 1 na displeji s rezistorom a rezistor prepojíme s GND na Arduine).

    Ak nesvieti ani v jednom prípade, buď to je zlé zapojené alebo máte nefungujúci displej.

  2. Prepojte kábel, ktorý je zapojený na pin 1 na displeji na ostatné piny. (UPOZORNENIE: nezapájajte ho na piny 3 a 8). Zapíšte si, ktorému pinu prislúcha ktorý segment displeja.

I2C expander

Cieľom je napojiť expander a nastaviť adresu. K dispozícii máte buď jednoduchšiu čiernu verziu (PCF8574P alebo PCF8574AP) alebo červenú verziu, ktorá obsahuje expander (PCF8574T). V čiernej verzii si identifikujte hornú stranu (na obrázku aj na samotnej súčiastke je taký výrez). Môžete si prelistovať dokumentáciu.

https://i.pinimg.com/originals/53/fa/a1/53faa1f2e38b668b65fa50911512f264.jpg

https://techfun.sk/wp-content/uploads/2019/11/a-12.jpg
/~opiela/iot/images/iot4-pcf-basic_bb.png

  1. Podľa schémy alebo nasledovných krokov zapojte:

    • VDD (na súčiastke) <–> 5V (na Arduine)
    • VSS <–> GND
    • SDA <–> A4 pin
    • SCL <–> A5 pin
    • Adresný pin A0 <–> 5V alebo GND (podľa toho, či ho chcete zapnúť alebo vypnúť)
    • Adresný pin A1 <–> 5V alebo GND (podľa toho, či ho chcete zapnúť alebo vypnúť)
    • Adresný pin A2 <–> 5V alebo GND (podľa toho, či ho chcete zapnúť alebo vypnúť)
    https://i.pinimg.com/originals/53/fa/a1/53faa1f2e38b668b65fa50911512f264.jpg

    V prípade červenej súčiastky zapájate VCC na 5V, GND na GND, SDA na A4, SCL na A5 a tri adresné piny si nastavíte mechanicky na 0 alebo 1.

  2. Stiahnite si ARDUINO kód na skenovanie pripojených zariadení. Spustite na svojom Arduine a s pomocou Serial Monitor sledujte na akej adrese sa nájde vaše zariadenie. V prípade čiernej súčiastky je to adresa 0-1-0-0-A3-A2-A1. Teda v prípade, že všetky tri adresné bity sú nastavené na logickú 1, tak adresa je 0b0100111 alebo v hexadecimálnom zápise 0x27. Adresu si zapíšte.

  3. Pripojte k I2C expanderu 7-segmentový displej. Môžete napojiť všetky piny naraz alebo to vyskúšať osobitne po jednom pine. Zapája sa príslušný pin na expanderi (P0-P7), ktorý pripojíme cez rezistor na 7-segmentový displej. Spolu urobíme 8 prepojení. Pre úsporu káblov porozmýšľajte ako to elegantne zapojiť - napr. priamo napojte rezistor na displej bez použitia káblu medzi nimi a pod. (vyhlasujem súťaž o najkrajšie zapojenie - víťaz získa nálepku s logom arduina).

  4. Stiahnite si ARDUINO kód na ovládanie displeja. V kóde sa v cykle zobrazujú rôzne číslice na displeji. Skúste nastaviť správne binárne čísla, ktoré rozsvietia displej. Odporúčam začať s jedným číslom, nastavte príslušné segmenty - pravdepodobne využijete pero a papier (prípadne nejakú excel tabuľku) na prepočty. Samozrejme nezabudnite si v kóde nastaviť správnu adresu I2C expandera. Na Wikipedii si viete pozrieť, ktoré písmená a číslice sa dajú na takomto displeji zobraziť.

Buzzer

Cieľom je prehrať nejakú melódiu.

  1. Zapojte si buzzer - kladný pól na niektorý z PWM pinov (napr. D8). Záporný pól prepojte s GND na Arduine. Odporúčam zapojiť aj nejaký rezistor medzi buzzer a GND (rezistory s menšou hodnotou medzi 100Ω a 470Ω zaručia príjemnejšiu hlasitosť). Ak chcete, môžete vyskúšať ovládanie hlasitosti s použitím potenciometra.

  2. Stiahnite si nižšie priložený kód. K dispozícii máte aj zoznam tónov s ich frekvenciami (pitches.h). Melódia sa zahrá iba jedenkrát. Pre opakovanie presuňte časť kódu do loop alebo stlačte RESET button na Arduine. Súbor s tónmi a ich frekvenciami si môžete pridať napríklad tak, že pod ikonou serial monitor vpravo si vyberiete New Tab a vložíte to tam. Prípadne si jednotlivé tóny môžete vložiť priamo do samotného kódu.

  3. Voliteľne si môžete upraviť kód a vyskúšať inú melódiu. Budúci týždeň si môžete melódiu generovať na základe dát z nejakého senzora.

/* Plays a melody - circuit: 8-ohm speaker on digital pin 8 */

#include "pitches.h"

// notes in the melody:
int melody[] = { G3, D3, G3, H3, G3, H3, D4, D4, CIS4, D4, H3, A3 };

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4};

int tempoConstant = 3000;
int pin = 8;

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(int); thisNote++) {

    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = tempoConstant / 4, eighth note = tempoConstant/8, etc.
    int noteDuration = tempoConstant / noteDurations[thisNote];
    tone(pin, melody[thisNote], noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(pin);
  }
}

void loop() {
  // no need to repeat the melody.
}