Rubrika: Arduino programování

Motory

SERVOMOTOR

princip: motor, kterému zadáváme úhel, na který se má natočit

zapojení:

How Servo Motor Works & Interface It With Arduino - Last Minute Engineers                               Arduino Servo Motor: Reference Code and Wiring Example

kód:

#include <Servo.h>

Servo myservo;

int pos = 0;

void setup() {
  myservo.attach(9);
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) {
    myservo.write(pos);
    delay(15);
  } 
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);
  }
}

 

 

KROKOVÝ MOTOR

———–

STEJNOSMĚRNÝ MOTOR

———–

IR ovládání

https://www.hwkitchen.cz/navody-hwkitchen/bezdratove-ovladani-pomoci-ir-ovladace-arduino-navody/

IR přijímače

 

IR vysílače

 

 

  • Princip

    • Světlo v oblasti neviditelné pro člověka
    • Vysílání impulsů skrývající kód
    • Komunikace na krátké vzdálenosti
    • Modulace signálu v určité frekvenci

Infrared (IR) Communication Using PHPoC - PHPoC Forum

 

Zapojení

schéma zapojení IR diody, jako ovladač k TV - Arduino návody

How to use IR Receiver and IR Remote | IR RECEIVER module - SriTu Hobby

u IR diody 220 Ohm rezistor

 

 

Program

kódy doporučuju nekopírovat, stránka vkládá neviditelné znaky a mění znak a kód poté není funkční

 

příjimač

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results  results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();  // Start the receiver
}

void loop() {
  if (irrecv.decode(&results))  {
   
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive  the next value
  }
}

//

vysílač

#include <IRremote.h>

IRsend irsend;

void setup() {
  Serial.begin(9600);
  pinMode(5, INPUT_PULLUP); // button
  // The IR LED is connected to pin 3 (PWM ~) on the Arduino
}

void loop() {
  if (digitalRead(5) == LOW) {
    irsend.sendNEC(0x34895725, 32);
    Serial.println("Code sent!");
    delay(30);
  } 

  delay(100);
}

 

Otázky

  • Mohu pomocí infračervené diody posílat dálkovým ovládáním data do arduina?
    • Ano, můžeme. Ale potřebné data či příkazy zakódujeme do binární kombinaci. Takže například pokud získáme kód 0x12 rozsvítíme červenou LED a pokud kód 0x15 tak modrou LED.
  • Může infra-dioda data také odesílat?
    • Infradioda může data pouze odesílat. Data jako taková neodesílá, ale rozsvicí se a zhasíná v určité frekvenci a kódu, který šifrujeme. Pro čtení tohoto světla se využívá IR příjimač.
  • Můžou komunikovat dvě arduina?
    • Ano, můžou. Obě arduina musí mít příjimač a vysílač. Vytvoříme si kódy pro jednotlivé příkazy a tyto příkazy musí znát obě arduina.

 

Úkoly

  1. Mějme IR ovladač a tři LED různých barev, pomocí tlačítek 1, 2 a 3 na ovladači zapínejme a vypínejme LED. První zmáčknutí znamená zapnout, druhé vypnout atd.
  2. Mějme dvě arduina, jedno s příjímačem a druhý s vysílačem. Odešleme text a přijmeme ho na druhém arduinu.
  3. Mějme jednu LED a arduino s příjímačem. Pomocí tlačítek plus a mínus na ovladačí ovládáme intenzitu svitu LED.
  4. Mějme sedmisegmentový displej a arduino s příjimačem. Podle zmáčknutého tlačítka na ovladači rozsvítíme cifru na displeji.

Základní příkazy

  1. Základní struktura programu

void setup() {

// Kód zde se provede jednou po spuštění

}

 

void loop() {

// Kód zde se opakuje stále dokola

}

 

  1. Funkce pro práci s piny
  • pinMode(pin, režim) – Nastaví pin do režimu INPUT, OUTPUT

 

  • digitalWrite(pin, hodnota) – Nastaví pin na HIGH (logická 1, napětí 5V) nebo LOW (logická 0, napětí 0V).
  • digitalRead(pin) – Čte stav digitálního pinu (HIGH nebo LOW).

 

  • analogWrite(pin, hodnota) – Přiřadí pin na PWM hodnotu

(rozsah 0–255, kde 0 je LOW a 255 je HIGH).

  • analogRead(pin) – Čte hodnotu z analogového pinu (rozsah 0–1023).

int hodnota = analogRead(A0);  // Čte hodnotu z pinu A0

 

  1. Proměnné

Proměnné slouží k ukládání dat různých typů.

  • Datové typy: int, float, char, boolean, long

 

int cislo = 42;     // celé číslo (−32,768 až 32,767)

long velkeCislo = 484564; // velké celé číslo (−2,147,483,648 až 2,147,483,647)

float teplota = 36.5;     // desetinné číslo

char znak = ‚A‘;     // jeden znak

bool stav = true;     // pravda/nepravda – true/false

 

  1. Podmínky

Podmínky slouží k rozhodování na základě různých podmínek.

  • if, else

 

if (…) {

// Pokud platí podmínka, provede se tento blok

} else {

// Jinak se provede tento blok

}

  • podmínky
    • rovnost –     if (a == b){ }
    • větší než –    if (a > b){ }
    • menší než –    if (a < b){ }

 

  1. Cykly

Cykly umožňují opakování bloku kódu.

  • for: Opakuje blok kódu daný počet opakování.

for (int i = 0; i < 10; i++) {

// Tento blok se provede 10x

}

 

  • while: Provádí blok kódu, dokud je podmínka splněna.

while (digitalRead(7) == LOW) {

// Tento blok se provádí, dokud je pin 7 LOW

}

 

  1. Zpoždění
  • delay(ms) – Zastaví program na určitou dobu (v milisekundách).

 

  1. Sériová komunikace

Pro komunikaci mezi Arduinem a počítačem.

  • Serial.begin(9600) – Spustí sériovou komunikaci na určité rychlosti (9600)
  • Serial.print() a Serial.println() – Tiskne data do sériového monitoru.

 

Arduino základy programování

Převzato z článku:

https://www.root.cz/clanky/arduino-jak-pro-nej-zacit-programovat/

Wiring

Programovací jazyk, v němž můžete pro Arduino psát, se jmenuje Wiring (lépe řečeno „vychází z jazyka Wiring“, ale rozdíly jsou minimální). Podle autorů jde o „jazyk podobný C++“ – ve skutečnosti je to jakýsi metajazyk či „vylepšená sada maker“ nad C++. Wiring původně vznikl pro vývojový kit podobný Arduinu a vychází z dalšího open source projektu, který se jmenuje Processing (můžete si všimnout určité podobnosti v logu Arduina a Processingu).

Návrh sledoval maximální jednoduchost a srozumitelnost pro programátora, co s jednočipy začíná: Syntakticky lze použít všechny návyky, co máme z C-like jazyků. Všechny ty složené závorky, středníky, definice funkcí a proměnných, poznámky, bloky i řídicí konstrukce budou povědomé každému, kdo kdy prošel kolem C (viz základy jazyka Wiring). Přitom není potřeba zabývat se vší tou objektovou veteší – z objektové syntaxe zůstává v podstatě jediný operátor „.“ (tečka).

Pokud budeme pro Arduino vytvářet knihovny (a to budeme v některém z dalších dílů), sestoupíme i o úroveň níž, k C++, ale zatím si vystačíme s Wiring.

Předpokládám, že čtenáři seriálu znají C, a že tedy není potřeba popisovat základy jazyka. Ostatně to hlavní uvidíme např. při pohledu do cheat sheetu (uložte si, bude se hodit) a odlišnosti si vysvětlíme, když na ně narazíme. prozatím nám stačí vědět, že můžeme psát „céčkové programy“.

Hello World!

Každý správný programátorský manuál začíná příkladem „Hello World“, tedy něčím, co ukáže, že to všechno funguje. Přidržíme se tohoto modelu a napíšeme si jednoduchý program, na kterém si ověříme, že vše funguje tak jak má. Ekvivalentem „Hello World“ v elektronice je blikání LEDkou, budeme tedy blikat i my. Ale nejdřív ještě krátký pohled na hardware, abychom věděli, s čím máme vlastně blikat.

 

Blikáme!

Program v C má vždy hlavní funkci, nazvanou main(), která je volána při spuštění programu. U Arduina máme takové funkce dvě a nazývají se setup() a loop()  – toto rozvržení vychází z nejčastější kostry programů pro jednočipy, kde po RESETu proběhne nějaká inicializace a pak se dokola provádí v nekonečné smyčce nějaká akce, až do vypnutí napájení. Zkušení návrháři používají postupy, kdy se ona „nekonečná smyčka“ nahrazuje kombinací obslužných rutin, vyvolaných na základě nějaké akce (přerušení) a uspávání jednočipu do stavu s nízkým odběrem. U Arduina, které slouží především pro experimenty a seznámení s elektronikou, je vše zjednodušeno do výše zmíněné podoby. Lze si to představit zhruba takto:

1
2
3
4
5
6
7
8
void main()
{
   setup();
   while (1)
   {
      loop();
   }
}

Ve funki setup si tedy nastavíme digitální port 13 jako výstupní, a ve smyčce (loop) uděláme to nejjednodušší, co udělat můžeme: Rozsvítíme LED (=pošleme na výstup logickou 1), počkáme, zhasneme LED a zase počkáme. A protože je loop() voláno stále dokola, bude i Arduino stále blikat.

Program („skeč“) může vypadat třeba takto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define LED 13  // číslo pinu, kde je připojena LED
void setup()   {               
  // nastavíme pin jako výstupní
  pinMode(LED, OUTPUT);    
}
void loop()                    
{
  digitalWrite(LED, HIGH);     // rozsvítíme LED
  delay(1000);                 // počkáme
  digitalWrite(LED, LOW);      // zhasneme LED
  delay(300);                  // ... a zase počkáme
}

Kód je velmi jednoduchý – definujeme si číslo pinu s LED. Ve funkci setup() zavoláme funkci pinMode, která nastaví pin jako výstupní. A konečně ve funkci loop() děláme to, co jsme si popsali výše – nastavíme pin na log. 1 nebo log. 0 (HIGH / LOW) pomocí systémové funkce digitalWrite a čekáme (delay).

Zkusíme si kód přeložit a ověřit, že jsme se neupsali – klikneme proto na Verify:

Arduino IDE

IDE bude chtít skeč uložit – uložte ho třeba pod názvem Blink. Pokud jsme vše napsali dobře, vypíše se ve spodním okně něco jako Binary sketch size: 934 bytes (of a 30720 byte maximum). Tedy že skeč přeložený do binární podoby zabírá 934 bajtů.

Pokud máme přeloženo, připojené Arduino, nastavený správný model a port v IDE, tak můžeme se zatajeným dechem kliknout na Upload:

Arduino IDE

IDE přeloží skeč, nahraje ho do Arduina, počká pár sekund a pošle signál RESET. A nám to…