Vítám vás na mém webu arduinoo.cz

Řekněme, že pět lidí dostane stejné zadání. Je velice pravděpodobné, že každý z nich vyřeší zadání jiným způsobem. Není tedy účelné projekty kritizovat např. to bych udělal tak a tak. Každý má své myšlení a každý se rád dozví něco nového.


ovladač pro analogové kolejiště
Ovladač pro servo vyhýbky
cube 4x4x4
Robotické rameno
Generátor minutových impulzů
Otáčkoměr pro stirling motor
Ovl. panel pro vitrínu
WIFI modul ESP8266



Projekt číslo 1.

pulsní ovladač pro analogové kolejiště



Sestrojil jsem pulsní ovladač pro analog s velmi pomalou jízdou. Jízda se ovládá potenciometrem a
to tak, že v polovině dráhy potenciometru je stop (indikuje LED), vlevo od stop je rozjezd vpřed a
vpravo od stop je rozjezd vzad. Jako u starého PIKO trafa. Ovladač je na 12V ss a má ochranu proti zkratu.
Výkon (střídu) jsem nastavil od 5 do 96%
Jako microcontroler jsem použil Attiny85 (Attiny45) lze použít i Arduino nano, ale je třeba v programu
upravit hodnoty vstupů a výstupů. Podívejte se na schéma zapojení.
Program pro ovladač je níže.
void setup() {
  pinMode(3, OUTPUT); //vystup na darlington (IO pin 2)
  pinMode(0, OUTPUT); //vystup na prepinaci rele (IO pin 5)
  pinMode(1, OUTPUT); //vystup na LED nulova zona (IO pin 6)
}

void loop() {

  int y = analogRead(2);// (IO pin 3) střed potenciometru
  int x = map(y, 0, 1023, 11, 400);
  if ((x > 195) && (x < 216)) {
    digitalWrite(3, LOW);
    digitalWrite(1, HIGH); //sepne LED pro nulovou zonu
  }
  if (x > 215) {
    int z = ((x - 205) * 40);
    int m = ((411 - x) * 10);
    digitalWrite(0, HIGH); //sepne rele
    digitalWrite(3, HIGH);
    delayMicroseconds(z);
    digitalWrite(3, LOW);
    delayMicroseconds(m);
    digitalWrite(1, LOW); //zhasne LED
  }
  if (x < 196) {
    int z = abs(x - 206) * 40;
    int m = (x * 10);
    digitalWrite(0, LOW); //rozepne rele
    digitalWrite(3, HIGH);
    delayMicroseconds(z);
    digitalWrite(3, LOW);
    delayMicroseconds(m);
    digitalWrite(1, LOW); //zhasne LED
  }
}


Projekt číslo 2.

Ovladač pro servo vyhýbky



Sestrojil jsem na své analogové kolejiště přestavníky z pomocí servo motorků, protože jsem chtěl mít přestavníky schované pod deskou.
Ovladač ovládá 5 servo s tím, že každá poloha se dá naprogramovat a uložit do paměti. Dále jsem tam vložil tlačítko reset které serva přesune
na pozici 90 stupňů, aby se neunavovali drátky u přestavníků. Již při nalepování serv musí mít hodnotu 90 stupňů, aby drátek byl přibližně ve středové pozici. obrázek

Postup programování jednotlivých serv je: po stisknutí tlačítka prog. se rozsvítí LED a jednou blikne.
Trimrem nastavíme krajní hodnotu přestavníku jedna stiskneme tl. prog. Tím se hodnota uloží a LED blikne 2x tím nastavíme u prvního přestavníku protilehlou polohu a opět stiskneme tl. prog.
Tím proces pokračuje k druhému až k pátému přestavníku. po ukončení programování LED několikrát problikne. Tím je programování ukončeno.
Poté je třeba Arduino restartovat nebo odpojit a připojit napětí. Napětí pro Arduino postačí baterie 9V. Pro serva je vhodné použít svůj zdroj
napětí. Serva se přesouvají jedno po druhém (ne všechna zaráz) tím není třeba silný zdroj. Já jsem všechna serva částečně odrušil.
Přestavníky přesuneme tím, že přivedeme kladné napětí 5 Voltů z Arduina na žluté body, tedy vstupy 9 až 13.
Program pro ovladač je níže.

#include <EEPROM.h>;
#include <Servo.h>;
Servo pres_1;
Servo pres_2;
Servo pres_3;
Servo pres_4;
Servo pres_5;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int nn = 2;
int eepr = 0;
int seq = 50; //hodnota 50 nastavi rozmezi pro servo od 65 do 115 stupnu
int e_1 = EEPROM.read(1);
int e_2 = EEPROM.read(2);
int e_3 = EEPROM.read(3);
int e_4 = EEPROM.read(4);
int e_5 = EEPROM.read(5);
int e_6 = EEPROM.read(6);
int e_7 = EEPROM.read(7);
int e_8 = EEPROM.read(8);
int e_9 = EEPROM.read(9);
int e_10 = EEPROM.read(10);
int del = 8; // rychlost posunu serva - vyssi hodnota = pomalejsi presun

void pamet() {
  int y = analogRead(A5);
  int mapa = map(y, 0, 1023, 0, seq);
  switch (eepr) {
    case 1:
      EEPROM.update(1, (90 - mapa));
      break;
    case 2:
      EEPROM.update(2, (90 + mapa));
      break;
    case 3:
      EEPROM.update(3, (90 - mapa));
      break;
    case 4:
      EEPROM.update(4, (90 + mapa));
      break;
    case 5:
      EEPROM.update(5, (90 - mapa));
      break;
    case 6:
      EEPROM.update(6, (90 + mapa));
      break;
    case 7:
      EEPROM.update(7, (90 - mapa));
      break;
    case 8:
      EEPROM.update(8, (90 + mapa));
      break;
    case 9:
      EEPROM.update(9, (90 - mapa));
      break;
    case 10:
      EEPROM.update(10, (90 + mapa));
      break;
  }
  return;

}

void setup() {
  pinMode(9, INPUT);
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);
  pinMode(13, INPUT);
  pinMode(3, INPUT);
  pinMode(A1, INPUT);
  pinMode(A3, OUTPUT);

  pres_1.attach(8);
  pres_2.attach(7);
  pres_3.attach(6);
  pres_4.attach(5);
  pres_5.attach(4);

  pres_1.write(e_1);
  pres_2.write(e_3);
  pres_3.write(e_5);
  pres_4.write(e_7);
  pres_5.write(e_9);
}

void loop() {
  int y = analogRead(A5);
  int mapa = map(y, 0, 1023, 0, seq);
  if (eepr == 1) {
    pres_1.write((90 - mapa));
  }
  if (eepr == 2) {
    pres_1.write((90 + mapa));
  }
  if (eepr == 3) {
    pres_2.write((90 - mapa));
  }
  if (eepr == 4) {
    pres_2.write((90 + mapa));
  }
  if (eepr == 5) {
    pres_3.write((90 - mapa));
  }
  if (eepr == 6) {
    pres_3.write((90 + mapa));
  }
  if (eepr == 7) {
    pres_4.write((90 - mapa));
  }
  if (eepr == 8) {
    pres_4.write((90 + mapa));
  }
  if (eepr == 9) {
    pres_5.write((90 - mapa));
  }
  if (eepr == 10) {
    pres_5.write((90 + mapa));
  }

  //-------------------------------------------------
  if ((digitalRead(9) == 0) && a == 0) {
    for (int x = e_2; x > (e_1 - 1); x--) {
      pres_1.write(x);
      delay(del);
    }
    a = 1;
  }
  if ((digitalRead(9) == 1) && a == 1) {
    for (int x = e_1; x < (e_2 + 1); x++) {
      pres_1.write(x);
      delay(del);
    }
    a = 0;
  }
  if ((digitalRead(10) == 0) && b == 0) {
    for (int x = e_4; x > (e_3 - 1); x--) {
      pres_2.write(x);
      delay(del);
    }
    b = 1;
  }
  if ((digitalRead(10) == 1) && b == 1) {
    for (int x = e_3; x < (e_4 + 1); x++) {
      pres_2.write(x);
      delay(del);
    }
    b = 0;
  }
  if ((digitalRead(11) == 0) && c == 0) {
    for (int x = e_6; x > (e_5 - 1); x--) {
      pres_3.write(x);
      delay(del);
    }
    c = 1;
  }
  if ((digitalRead(11) == 1) && c == 1) {
    for (int x = e_5; x < (e_6 + 1); x++) {
      pres_3.write(x);
      delay(del);
    }
    c = 0;
  }
  if ((digitalRead(12) == 0) && d == 0) {
    for (int x = e_8; x > (e_7 - 1); x--) {
      pres_4.write(x);
      delay(del);
    }
    d = 1;
  }
  if ((digitalRead(12) == 1) && d == 1) {
    for (int x = e_7; x < (e_8 + 1); x++) {
      pres_4.write(x);
      delay(del);
    }
    d = 0;
  }
  if ((digitalRead(13) == 0) && e == 0) {
    for (int x = e_10; x > (e_9 - 1); x--) {
      pres_5.write(x);
      delay(del);
    }
    e = 1;
  }
  if ((digitalRead(13) == 1) && e == 1) {
    for (int x = e_9; x < (e_10 + 1); x++) {
      pres_5.write(x);
      delay(del);
    }
    e = 0;
  }
  //-----------------------reset servomotoru-----------------------
  if (digitalRead(3) == 1) {
    pres_1.write(90);
    delay(200);
    pres_2.write(90);
    delay(200);
    pres_3.write(90);
    delay(200);
    pres_4.write(90);
    delay(200);
    pres_5.write(90);
    delay(6000);
  }
  //-----------------------reset servomotoru-----------------------

  //---programovani---
  if (digitalRead(A1) == 1) {
    digitalWrite(A3, HIGH);
    pamet();
    delay(2000);
    digitalWrite(A3, LOW);
    delay(200);
    for (int i = 1; i < nn; i++) {
      digitalWrite(A3, HIGH);
      delay(150);
      digitalWrite(A3, LOW);
      delay(200);
    }
    eepr = eepr + 1;
    nn = nn + 1;
    a = 2;
    b = 2;
    c = 2;
    d = 2;
    e = 2;
  }
  if (eepr == 11) {
    for (int i = 1; i < 13; i++) {
      digitalWrite(A3, HIGH);
      delay(50);
      digitalWrite(A3, LOW);
      delay(50);
    }
    a = 0;
    b = 0;
    c = 0;
    d = 0;
    e = 0;
    eepr = 0;
    nn = 2;
  }
}


Projekt číslo 3.

Cube 4x4x4





Takže co budeme potřebovat? Za prvé Arduino nano, dále desku dle obrázku 1, sletované LED dle obrázku 2,
program pro Arduino a program na naprogramování svitu jednotlivých LED.
Sestavíme LED kostku spájením dle obrázku. Vytvoříme DPS s obvody 74HC595. Vše sestavíme a vložíme dospodu krabičky.
Mini USB z Arduina nano jsem vyvedl ven, abych mohl jednoduše připojit kabel na programování nebo power banku.
Pokud máme vše sestaveno, začneme programovat. Programy jsou tu dva,
jeden čistý a jeden na ukázku již s daty pro LED jako na YOUTUBE.
Pro programování LED potřebujete Excel a v něm mít povolena makra.
Proto jsem vytvořil v excelu program, pro snažší vytvoření programových dat pro Arduino.
Jednotlivé LED se v excelu zapínají vložením libovolného znaku do sítě.
Po stisknutí tlačítka generovat se vygenerují data. Po ukončení generování klikneme na create a poté se vygeneruje část kódu,
která se vloží do schránky. Otevřeme si prostředí Arduina, otevřeme soubor cube4x4x4 nova verze.ino,
přesuňte kurzor pod řádek // zde vloz vytvoreny kod ******************* a pomocí Ctrl+V vložíte vygenerovaný kód z excelu.
Je nutné odstranit uvozovky na začátku i konci našeho právě vloženého kódu. Experimentujte a uvidíte sami, že můžete třeba každý den přidat do kódu další různá svícení.

cube 4x4x4 obr.1
cube 4x4x4 obr.2
ukázka z excelu
soubor pro EXCEL - stažení

//čistá verze bez vloženého kodu pro blikání
#include <avr/pgmspace.h>
const int DS = 5;   //  Arduino PIN 5 to 74HC595 PIN 14
const int SH_CP = 6; //  Arduino PIN 6 to 74HC595 PIN 11
const int ST_CP = 7; //  Arduino PIN 7 to 74HC595 PIN 12
int pause;
const PROGMEM  uint16_t data[] =
  // zde vloz vytvoreny kod *************************************************************************









  // konec  vytvoreneho kodu ************************************************************************
{
  pause = pgm_read_word_near(data + ((i + 1) * 9 - 1));
  for (int n = 0; n < pause; n++) {
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 1)));
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i)));
    digitalWrite(ST_CP, HIGH);
    PORTB = B00000001;
    delayMicroseconds(1000);
    digitalWrite(ST_CP, LOW);

    delayMicroseconds(1000);
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 3)));
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 2)));
    digitalWrite(ST_CP, HIGH);
    PORTB = B00000010;
    delayMicroseconds(1000);
    digitalWrite(ST_CP, LOW);

    delayMicroseconds(1000);
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 5)));
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 4)));
    digitalWrite(ST_CP, HIGH);
    PORTB = B00000100;
    delayMicroseconds(1000);
    digitalWrite(ST_CP, LOW);

    delayMicroseconds(1000);
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 7)));
    shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 6)));
    digitalWrite(ST_CP, HIGH);
    PORTB = B00001000;
    delayMicroseconds(1000);
    digitalWrite(ST_CP, LOW);
    delayMicroseconds(1000);

  }
}
}


// verze s naprogramovaným blikáním dle videa na You tube
#include <avr/pgmspace.h>
const int DS = 5;   //  Arduino PIN 5 to 74HC595 PIN 14
const int SH_CP = 6; //  Arduino PIN 6 to 74HC595 PIN 11
const int ST_CP = 7; //  Arduino PIN 7 to 74HC595 PIN 12
int pause;




const PROGMEM  uint16_t data[] =
  // zde vloz vytvoreny kod *************************************************************************

{ 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 11,    0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 11,    0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 11,
  0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 11,    0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 11,    0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 11,
  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 11,    0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 11,    0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 11,
  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 11,    0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 11,    0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 11,
  0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 11,    0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 11,    0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 11,
  0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 11,    0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 11,    0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 11,
  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 11,    0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 11,    0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 11,
  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 11,    0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 11,    0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 11,
  0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 11,    0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 11,    0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 11,
  0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 11,    0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 11,    0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 11,
  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 11,    0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 11,    0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 11,
  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 11,    0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 11,    0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 11,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11,    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 11,
  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 11,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 11,    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 11,
  0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 11,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 50,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 50,    0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 50,
  0x33, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 50,    0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 50,    0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 50,    0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 0x00, 0x00, 50,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 50,
  0x33, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 50,    0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 50,    0x33, 0x00, 0x33, 0x00, 0xCC, 0x00, 0xCC, 0x00, 50,
  0x33, 0x00, 0x33, 0x00, 0xCC, 0x33, 0xCC, 0x33, 50,    0x33, 0x00, 0x33, 0x00, 0xCC, 0xFF, 0xCC, 0xFF, 50,    0x33, 0x33, 0x33, 0x33, 0xCC, 0xFF, 0xCC, 0xFF, 50,
  0x33, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 50,    0x33, 0xFF, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 50,    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 50,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xF0, 12,
  0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x0F, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,
  0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 12,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x00, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x00, 12,    0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xF0, 12,
  0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x0F, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,
  0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFF, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 12,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0x00, 0xC1, 0x10, 0x2C, 0x60, 0x80, 0x02, 0x04, 12,    0x00, 0x02, 0x10, 0xA0, 0x28, 0x40, 0x08, 0x40, 12,    0x02, 0x08, 0x28, 0x02, 0x02, 0x20, 0x00, 0x11, 12,
  0x10, 0x1C, 0x02, 0x22, 0x90, 0x01, 0x10, 0x04, 12,    0xA0, 0x80, 0x82, 0x48, 0x15, 0x84, 0x20, 0x04, 12,    0x0A, 0x20, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x80, 12,
  0x44, 0x04, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 12,    0x01, 0x35, 0x08, 0x83, 0x20, 0x00, 0x01, 0x10, 12,    0x08, 0x04, 0x00, 0x04, 0xC0, 0x01, 0x82, 0x00, 12,
  0x28, 0x01, 0x3A, 0x00, 0x11, 0x88, 0x18, 0x00, 12,    0x14, 0x80, 0x00, 0x00, 0x50, 0x04, 0x04, 0x00, 12,    0x00, 0x1D, 0x40, 0x01, 0x80, 0x90, 0x40, 0x81, 12,
  0x09, 0x00, 0x02, 0x90, 0x00, 0xA0, 0x08, 0x80, 12,    0x70, 0x40, 0x80, 0x02, 0x04, 0x00, 0x00, 0x23, 12,    0x02, 0x88, 0x00, 0x02, 0x20, 0xA2, 0x20, 0x01, 12,
  0x08, 0x80, 0x00, 0xC0, 0x22, 0x11, 0x02, 0x08, 12,    0x80, 0x08, 0x09, 0x80, 0x00, 0x40, 0x08, 0x00, 12,    0x80, 0x1A, 0x20, 0xA0, 0x44, 0xA7, 0x02, 0x85, 12,
  0x00, 0x00, 0x04, 0x04, 0x00, 0x44, 0x26, 0x26, 12,    0x09, 0x40, 0x00, 0xA8, 0x10, 0x50, 0x01, 0x45, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 50,    0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF, 6,    0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xFF, 0xF7, 6,
  0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0xFF, 0xF7, 6,     0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xF7, 6,     0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0xFF, 0xE7, 6,    0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0xFF, 0xE7, 6,
  0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE7, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE7, 6,    0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xFF, 0xE7, 6,
  0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFB, 0xE7, 6,     0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFB, 0xE7, 6,    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE7, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE7, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFB, 0xE7, 6,    0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xFB, 0xE5, 6,
  0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0xFB, 0xE5, 6,     0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE5, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE5, 6,
  0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFB, 0xE5, 6,     0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0xDB, 0xE5, 6,    0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0xDB, 0xE5, 6,
  0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xE5, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xE5, 6,    0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xDB, 0xE5, 6,
  0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x5B, 0xE5, 6,     0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x5B, 0xE5, 6,    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xE5, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xE5, 6,     0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x5B, 0xE5, 6,    0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x4B, 0xE5, 6,
  0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4B, 0xE5, 6,     0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xE5, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xE5, 6,
  0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x4B, 0xE5, 6,     0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x43, 0xE5, 6,    0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x43, 0xE5, 6,
  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xE5, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xE5, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0xE5, 6,
  0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x43, 0xC5, 6,     0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x43, 0xC5, 6,    0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x43, 0xC5, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xC5, 6,     0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x43, 0xC5, 6,    0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x03, 0xC5, 6,
  0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0xC5, 6,     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC5, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC5, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xC5, 6,     0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x03, 0x45, 6,    0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x03, 0x45, 6,
  0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x45, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x45, 6,    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x45, 6,
  0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x45, 6,     0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x45, 6,    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x45, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x45, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x45, 6,    0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x02, 0x41, 6,
  0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x02, 0x41, 6,     0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x41, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x41, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x41, 6,     0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x40, 6,    0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x40, 6,
  0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 6,     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 6,    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x40, 6,
  0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x40, 6,     0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 6,    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 6,     0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 6,    0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 6,
  0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 6,     0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,
  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 90,    0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 90,    0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 90,
  0xFF, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 165,   0xFF, 0xFF, 0xF0, 0x2F, 0xF0, 0x0F, 0xFF, 0xFF, 11,
  0xFF, 0xFF, 0xF0, 0x2F, 0xF8, 0x0F, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xF8, 0x2F, 0xF8, 0x0F, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xF8, 0x2F, 0xF8, 0x2F, 0xFF, 0xFF, 11,
  0xFF, 0xFF, 0xF9, 0x2F, 0xF8, 0x2F, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xF9, 0x2F, 0xF8, 0xAF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFD, 0x2F, 0xF8, 0xAF, 0xFF, 0xFF, 11,
  0xFF, 0xFF, 0xFD, 0x2F, 0xFA, 0xAF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFD, 0x6F, 0xFA, 0xAF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFD, 0x6F, 0xFB, 0xAF, 0xFF, 0xFF, 11,
  0xFF, 0xFF, 0xFD, 0xEF, 0xFB, 0xAF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFD, 0xEF, 0xFF, 0xAF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xAF, 0xFF, 0xFF, 11,
  0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xBF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 11,    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 11,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110,

  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 12,    0x30, 0x00, 0x30, 0x00, 0x11, 0x00, 0x11, 0x00, 12,    0x60, 0x00, 0x60, 0x00, 0x01, 0x10, 0x01, 0x10, 12,
  0xC0, 0x00, 0xC0, 0x00, 0x00, 0x11, 0x00, 0x11, 12,    0x88, 0x00, 0x88, 0x00, 0x00, 0x03, 0x00, 0x03, 12,    0x08, 0x80, 0x08, 0x80, 0x00, 0x06, 0x00, 0x06, 12,
  0x00, 0x88, 0x00, 0x88, 0x00, 0x0C, 0x00, 0x0C, 12,    0x00, 0x06, 0x00, 0x06, 0x08, 0x80, 0x08, 0x80, 12,    0x00, 0x03, 0x00, 0x03, 0x88, 0x00, 0x88, 0x00, 12,
  0x00, 0x11, 0x00, 0x11, 0xC0, 0x00, 0xC0, 0x00, 12,    0x11, 0x00, 0x11, 0x00, 0x30, 0x00, 0x30, 0x00, 12,
  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 12,    0x30, 0x00, 0x30, 0x00, 0x11, 0x00, 0x11, 0x00, 12,    0x60, 0x00, 0x60, 0x00, 0x01, 0x10, 0x01, 0x10, 12,
  0xC0, 0x00, 0xC0, 0x00, 0x00, 0x11, 0x00, 0x11, 12,    0x88, 0x00, 0x88, 0x00, 0x00, 0x03, 0x00, 0x03, 12,    0x08, 0x80, 0x08, 0x80, 0x00, 0x06, 0x00, 0x06, 12,
  0x00, 0x88, 0x00, 0x88, 0x00, 0x0C, 0x00, 0x0C, 12,    0x00, 0x06, 0x00, 0x06, 0x08, 0x80, 0x08, 0x80, 12,    0x00, 0x03, 0x00, 0x03, 0x88, 0x00, 0x88, 0x00, 12,
  0x00, 0x11, 0x00, 0x11, 0xC0, 0x00, 0xC0, 0x00, 12,    0x11, 0x00, 0x11, 0x00, 0x30, 0x00, 0x30, 0x00, 12,
  0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 12,    0x30, 0x00, 0x30, 0x00, 0x11, 0x00, 0x11, 0x00, 12,    0x60, 0x00, 0x60, 0x00, 0x01, 0x10, 0x01, 0x10, 12,
  0xC0, 0x00, 0xC0, 0x00, 0x00, 0x11, 0x00, 0x11, 12,    0x88, 0x00, 0x88, 0x00, 0x00, 0x03, 0x00, 0x03, 12,    0x08, 0x80, 0x08, 0x80, 0x00, 0x06, 0x00, 0x06, 12,
  0x00, 0x88, 0x00, 0x88, 0x00, 0x0C, 0x00, 0x0C, 12,    0x00, 0x06, 0x00, 0x06, 0x08, 0x80, 0x08, 0x80, 12,    0x00, 0x03, 0x00, 0x03, 0x88, 0x00, 0x88, 0x00, 12,
  0x00, 0x11, 0x00, 0x11, 0xC0, 0x00, 0xC0, 0x00, 12,    0x11, 0x00, 0x11, 0x00, 0x30, 0x00, 0x30, 0x00, 12,

  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,    0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 12,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,    0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 12,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,    0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 12,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,
  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,    0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 12,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,

  0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 12,
  0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 12,
  0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 12,
  0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 12,
  0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 12,

  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 24,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,
  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 24,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,
  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 24,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,
  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 24,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 12,

  0x48, 0xC4, 0xAD, 0x00, 0x41, 0xD0, 0x0A, 0x00, 12,    0x00, 0xA2, 0xA2, 0x43, 0xC6, 0x20, 0xC7, 0x28, 12,    0x18, 0x11, 0x21, 0x29, 0xD8, 0x5C, 0x62, 0xA8, 12,
  0x80, 0x08, 0x01, 0x8A, 0xBA, 0x00, 0x70, 0x43, 12,    0x48, 0x84, 0x13, 0x00, 0xB0, 0x00, 0x11, 0x00, 12,    0xA6, 0x02, 0x51, 0x00, 0x10, 0xC4, 0xAA, 0x21, 12,
  0x81, 0x04, 0x80, 0xAE, 0x08, 0x01, 0x49, 0xCA, 12,    0x50, 0x02, 0x21, 0x09, 0x40, 0x0B, 0x8C, 0x40, 12,    0x08, 0x40, 0x04, 0x00, 0x42, 0x20, 0x19, 0x22, 12,
  0x08, 0x78, 0x40, 0x10, 0x05, 0x50, 0x24, 0x10, 12,    0x0C, 0xA8, 0x84, 0x22, 0x28, 0x43, 0x10, 0x42, 12,    0x40, 0x86, 0x21, 0x40, 0x01, 0x34, 0xD0, 0x00, 12,
  0x0C, 0x27, 0xEC, 0x08, 0xA9, 0x01, 0x89, 0x02, 4,     0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0xA0, 0x84, 4,    0x3D, 0x46, 0x04, 0xE4, 0x55, 0x00, 0x01, 0x3C, 4,
  0x84, 0x84, 0x0D, 0x50, 0x98, 0x02, 0x01, 0xE4, 4,     0x12, 0x05, 0x50, 0x23, 0x58, 0x00, 0x69, 0x10, 4,    0x74, 0x9A, 0x38, 0x68, 0x39, 0x01, 0x81, 0x00, 4,
  0xA8, 0x00, 0x01, 0x1A, 0x4C, 0x36, 0xA2, 0xF1, 4,     0x27, 0x02, 0x11, 0x8A, 0x21, 0x02, 0x4A, 0xC0, 4,    0x05, 0x01, 0x28, 0x0C, 0x21, 0x68, 0x40, 0x01, 4,
  0x00, 0x24, 0x00, 0x00, 0x0A, 0x12, 0x0D, 0x11, 4,     0x00, 0x03, 0x0B, 0x03, 0x21, 0x82, 0x02, 0x60, 4,    0xB1, 0x22, 0x90, 0x02, 0x00, 0x20, 0x12, 0x28, 4,
  0x8A, 0x00, 0x0C, 0x43, 0x60, 0x2E, 0x00, 0x01, 4,     0x20, 0x42, 0x01, 0x94, 0x2B, 0x1B, 0x14, 0x10, 4,    0x20, 0x42, 0x01, 0x94, 0x2B, 0x1B, 0x14, 0x10, 30, //321

  0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 20,    0xF0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x0F, 0x00, 20,    0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 20,
  0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 20,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110,
  0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xFE, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 12,    0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 12,
  0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0xFE, 0xBF, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 12,    0x7E, 0xBF, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 12,
  0x7E, 0xBF, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 12,    0x5E, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 12,    0x5E, 0xBF, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 12,
  0x5E, 0xB7, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 12,    0x5E, 0xB5, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 12,    0x5E, 0xB5, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 12,
  0x5E, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 12,    0x5E, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0x5E, 0xB4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 12,
  0x5E, 0xB0, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 12,    0x5E, 0xB0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 12,    0x1E, 0xB0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 12,
  0x16, 0xB0, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 12,    0x14, 0xB0, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 12,    0x14, 0xB0, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 12,
  0x14, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 12,    0x14, 0x30, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 12,    0x14, 0x30, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 12,
  0x14, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 12,    0x14, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 12,    0x10, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 12,
  0x10, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 12,    0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 12,    0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 12,
  0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 12,    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 12,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50,

  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 25,    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 22,    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 18,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 14,    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 11,
  0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 13,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11,    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 10,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8,     0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 6,    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6,
  0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 6,     0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6,    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 6,
  0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 40,

  0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5,    0x68, 0x40, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 5,    0x02, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 5,
  0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x02, 5,    0x00, 0x00, 0x12, 0x02, 0x04, 0x00, 0x00, 0x00, 5,    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 5,
  0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 5,    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5,    0x00, 0x62, 0x90, 0x00, 0x08, 0x00, 0x00, 0x00, 5,
  0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 5,    0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x20, 5,    0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5,
  0x50, 0x28, 0x10, 0x00, 0x00, 0x04, 0x00, 0x10, 5,    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x02, 5,    0x00, 0x00, 0x20, 0x00, 0x00, 0x90, 0x01, 0x00, 5,
  0x40, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 5,    0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x04, 5,    0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x42, 0x00, 5,
  0x11, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x01, 5,    0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x09, 5,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 5,
  0x00, 0x22, 0x08, 0x08, 0x8C, 0x00, 0x0B, 0x00, 5,    0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x80, 0x20, 5,    0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 5,
  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x04, 5,    0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 5,    0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 5,
  0x00, 0x04, 0x41, 0x00, 0x00, 0x00, 0x02, 0x08, 5,    0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 5,    0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 5,
  0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 5,    0x30, 0x08, 0x00, 0x50, 0x00, 0x06, 0x00, 0x00, 5,    0x00, 0x00, 0x08, 0x08, 0x20, 0x00, 0x00, 0x40, 5,
  0x90, 0x00, 0x02, 0x64, 0x00, 0x00, 0x00, 0x84, 5,    0x00, 0x01, 0x00, 0x04, 0x41, 0x45, 0x00, 0x20, 5,    0x0E, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x20, 5,
  0x00, 0x00, 0x20, 0x20, 0x40, 0x00, 0x00, 0x05, 5,    0x00, 0x00, 0x00, 0x40, 0x40, 0x03, 0x00, 0x00, 5,    0x18, 0x80, 0x00, 0x10, 0x80, 0x04, 0x00, 0x00, 5,
  0x00, 0x00, 0x00, 0xC0, 0x00, 0xD2, 0x00, 0x40, 5,    0x08, 0x00, 0x00, 0x80, 0x02, 0x08, 0x00, 0x00, 5,    0x00, 0x02, 0x80, 0x80, 0x40, 0x00, 0x70, 0x80, 5,
  0x80, 0x00, 0x00, 0x20, 0x00, 0x05, 0x00, 0x00, 5,    0x0E, 0x00, 0x24, 0x41, 0x04, 0x01, 0x00, 0x68, 5,    0x64, 0x28, 0x00, 0x0C, 0x00, 0x01, 0x14, 0x00, 5,
  0x00, 0x00, 0x80, 0x41, 0x01, 0x06, 0x20, 0x00, 5,    0x00, 0x10, 0x80, 0x04, 0x20, 0x04, 0x01, 0x02, 5,    0x00, 0x2E, 0xA0, 0x00, 0x21, 0x04, 0x01, 0x41, 5,
  0x20, 0x00, 0x00, 0x1C, 0xA0, 0x20, 0x01, 0x60, 5,    0x00, 0x00, 0x10, 0x00, 0x08, 0x80, 0x00, 0x02, 5,    0x00, 0x28, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 5,
  0x00, 0x20, 0x11, 0x04, 0xD0, 0x00, 0x0B, 0x00, 5,    0x00, 0x10, 0x00, 0x90, 0x02, 0x01, 0x82, 0x48, 5,    0x00, 0x10, 0x00, 0x04, 0x01, 0x4E, 0x00, 0x00, 5,
  0x00, 0x10, 0x40, 0x80, 0x64, 0x90, 0xA0, 0x04, 5,    0x84, 0x00, 0x0C, 0x06, 0x41, 0x18, 0x01, 0x02, 5,    0x00, 0x02, 0x0D, 0x82, 0x28, 0x53, 0x00, 0x02, 5,
  0x00, 0x40, 0x00, 0x84, 0x00, 0x00, 0x00, 0xD0, 5,    0x11, 0x88, 0xD8, 0x00, 0x20, 0x01, 0x20, 0xB5, 5,    0x42, 0x12, 0x24, 0x06, 0x06, 0x05, 0xC1, 0x05, 5,
  0x21, 0x04, 0x88, 0x02, 0x00, 0x40, 0x80, 0x08, 5,    0x84, 0x40, 0x2C, 0x24, 0x01, 0xC9, 0x01, 0x48, 5,    0xD2, 0xDF, 0xE3, 0x5D, 0x07, 0x6F, 0x90, 0x64, 5,
  0x4A, 0x00, 0x20, 0x17, 0x42, 0xA3, 0xE4, 0x8E, 5,    0x98, 0xAB, 0xFA, 0xFE, 0x03, 0xA8, 0xC2, 0xEA, 5,    0x08, 0x12, 0xA2, 0x2C, 0xFD, 0x7F, 0x15, 0x35, 5,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 5,    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 20,    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 20, //459

  0xFF, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 11,    0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 11,
  0xFF, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 11,    0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 11,


  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 11,    0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 11,    0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 11,
  0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 11,    0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 11,    0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x80, 11,
  0xF8, 0x88, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x88, 11,    0xF8, 0x8C, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x8C, 11,    0xF8, 0x8E, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x8E, 11,
  0xF8, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x8F, 11,    0xF8, 0x9F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x9F, 11,    0xF9, 0x9F, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x9F, 100,

  0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 11,    0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 11,    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 11,
  0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 11,    0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 11,    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 11,
  0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 11,    0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 11,    0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 11,
  0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 11,    0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 11,
  0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 11,    0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 11,    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 11,
  0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 11,    0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 11,    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 11,
  0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 11,    0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 11,    0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 11,
  0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 11,    0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 11,

  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 50,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2,    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 45,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2,     0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 40,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2,
  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 35,    0x00, 0x00, 0x00, 0xCC, 0xFF, 0xFF, 0xFF, 0x33, 12,    0x00, 0xCC, 0x00, 0xCC, 0xFF, 0x33, 0xFF, 0x33, 12,
  0x00, 0xCC, 0x00, 0x00, 0xFF, 0x33, 0xFF, 0x33, 12,    0x00, 0x00, 0x00, 0x00, 0xFF, 0x33, 0xFF, 0x33, 12,    0x00, 0x00, 0x33, 0x00, 0xFF, 0x33, 0xCC, 0x33, 12,
  0x33, 0x00, 0x33, 0x00, 0xCC, 0x33, 0xCC, 0x33, 12,    0x33, 0x00, 0x00, 0x00, 0xCC, 0x33, 0xCC, 0x33, 12,    0x00, 0x00, 0x00, 0x00, 0xCC, 0x33, 0xCC, 0x33, 12,
  0x00, 0x00, 0xCC, 0x00, 0xCC, 0x33, 0x00, 0x33, 12,    0xCC, 0x00, 0xCC, 0x00, 0x00, 0x33, 0x00, 0x33, 12,    0xCC, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 12,    0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x00, 0x00, 12,    0x00, 0x33, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 12,
  0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 40
};


void setup() {
  DDRB = B001111;
  pinMode(SH_CP, OUTPUT);
  pinMode(DS, OUTPUT);
  pinMode(ST_CP, OUTPUT);
}
void loop() {
  for (int i = 0; i < 520; i++)








    // konec  vytvoreneho kodu ************************************************************************
  {
    pause = pgm_read_word_near(data + ((i + 1) * 9 - 1));
    for (int n = 0; n < pause; n++) {
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 1)));
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i)));
      digitalWrite(ST_CP, HIGH);
      PORTB = B00000001;
      delayMicroseconds(1000);
      digitalWrite(ST_CP, LOW);

      delayMicroseconds(1000);
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 3)));
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 2)));
      digitalWrite(ST_CP, HIGH);
      PORTB = B00000010;
      delayMicroseconds(1000);
      digitalWrite(ST_CP, LOW);

      delayMicroseconds(1000);
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 5)));
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 4)));
      digitalWrite(ST_CP, HIGH);
      PORTB = B00000100;
      delayMicroseconds(1000);
      digitalWrite(ST_CP, LOW);

      delayMicroseconds(1000);
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 7)));
      shiftOut(DS, SH_CP, LSBFIRST, pgm_read_word_near(data + (9 * i + 6)));
      digitalWrite(ST_CP, HIGH);
      PORTB = B00001000;
      delayMicroseconds(1000);
      digitalWrite(ST_CP, LOW);
      delayMicroseconds(1000);

    }
  }
}



Projekt číslo 4.

Robotické programovatelné rameno.





Na stavbu ramene jsem použil sololit. Tady to bude chtít trochu šikovnosti jak rameno sestrojit, aby se plynule točila základna.
Pár fotografií pro upřesnění
robotic arm obr.1
robotic arm obr.2
robotic arm obr.3
Co budeme potřebovat je schéma zapojení. Já použil univerzální DPS je to jednodušší při tak malém zapojení.
robotic arm schema
Na napájení Arduina nano jsem použil baterii 9V. Pro napájení servo motorků jsem použil power banku. Jelikož ale má pojistku
proti zkratu což po zapojení power banky k servům dojde k vyššímu odběru a banka se vypla, tak tuto špičku jsem omezil výkonostnějším odporem
1,1 ohmu. Jak to celé po sestavení funguje?
Zapojení má vypínač "smyčka" a dvě tlačítka. T1 (start/konec) a T2 (program)
Po zapojení na napájení pohybujeme ramenem pomocí potenciometrů. Stiskem T2 uložíme pozici všech ramen a blikne LED 13 na Arduinu pro kontrolu.
Opět nastavíme jinou pozici a stiskem T2 uložíme pozici. Takto můžeme uložit až 250 pozic.
Pokud máme hotovo stiskneme T1, tím ukončíme programování a LED 13 několikrát problikne.
Pak už stačí opět stiskem T1 spustit program a rameno začne provozovat naučené pohyby.
Pokud vypínač "smyčka" zůstane rozpojený, rameno se zastaví po dojetí našeho programu.
Pokud vypínač sepnutý, začne rameno po skončení programu zase od začátku. (bude se opakovat stále dokola)

Upravte si pak v programu Arduino některé hodnoty typu map např. "int x=map((analogRead(A1)),0,1023,12,168)"> protože každé servo je trochu jiné
a nebo si nastavíte jiné mezní hodnoty jednotlivých ramen. Budete také potřebovat knihovnu VarSpeedServo.h tu najdete výše v PŘÍKLADU ČÍSLO 3
Myslím, že na tom není až tak nic složitého. Je třeba pečlivě sestrojit rameno. Na úchopové kleště jsem použil stahovací pásku.
A níže je program do prostředí Arduina.
#include <VarSpeedServo.h>;
#include <EEPROM.h>;
VarSpeedServo motor1;
VarSpeedServo motor2;
VarSpeedServo motor3;
VarSpeedServo motor4;
int start = 0;
int prog = 0;
int eep = 0;
int cykl = 0;
int a;
int b;
int c;
int d;


void program() {
  int x = EEPROM.read(1000);
  int s = (x * 4);
  for (int i = 0; i < s; i = i + 4) {
    int a = EEPROM.read(i);
    int b = EEPROM.read(i + 1);
    int c = EEPROM.read(i + 2);
    int d = EEPROM.read(i + 3);
    motor1.write(a, 40, true);
    motor2.write(b, 40, true);
    motor3.write(c, 40, true);
    motor4.write(d, 30, true);
    delay(40);
  }
  if (digitalRead(12) == 1) {
    cykl = 1;
  }
  if (digitalRead(12) == 0) {
    cykl = 0;
  }
}

void setup() {

  pinMode(12, INPUT);
  pinMode(13, OUTPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  motor1.attach(3);
  motor2.attach(4);
  motor3.attach(5);
  motor4.attach(6);

}

void loop() {

  if (cykl == 1) {
    program();
  }

  int x = map((analogRead(A1)), 0, 1023, 12, 168);
  int xx = map((analogRead(A2)), 0, 1023, 40, 160);
  int xxx = map((analogRead(A3)), 0, 1023, 170, 10);
  int xxxx = map((analogRead(A4)), 0, 1023, 170, 95);
  motor1.write(x, 255, false);
  motor2.write(xx, 255, false);
  motor3.write(xxx, 255, false);
  motor4.write(xxxx, 255, false);
  if (digitalRead(8) == 1) {
    prog = 1;
    digitalWrite(13, HIGH);
    delay(250);
    digitalWrite(13, LOW);
    EEPROM.update(eep, x);
    EEPROM.update((eep + 1), xx);
    EEPROM.update((eep + 2), xxx);
    EEPROM.update((eep + 3), xxxx);
    eep = eep + 4;
    delay(250);
  }

  if (digitalRead(9) == 1 & prog == 1) {
    delay(250);
    EEPROM.update(1000, (eep / 4));
    for (int p = 0; p < 10; p++) {
      digitalWrite(13, HIGH);
      delay(30);
      digitalWrite(13, LOW);
      delay(30);
    }
    prog = 0;
  }

  if (digitalRead(9) == 1 & prog == 0) {
    delay(250);
    program();
  }

}



Projekt číslo 5.

Generátor minutových impulzů pro podružné hodiny až 10 hodin




pozn: jedná se o prototyp, proto mám některé součástky ze strany spojů
nejsou tedy vidět.

Zrekonstruované hodiny Pragotron IPJ 061/1

A tady je schéma zapojení





Co budeme potřebovat je schéma zapojení. DPS není těžká tu zvládnete sami.
Na stavbu použijeme Arduino nano a modul reálného času DS3231. V našem zapojení nebude potřeba záložní baterie pro DS3231.
Tento modul je velmi přesný a vše sem postavil z toho co jsem měl doma, ale vše se dá koupit.
Původně sem chtěl použít trafo do DPS 24 voltů, ale nebylo použitelné, protože dávalo na prázdno 55 voltů (fuj)
Našel jsem zdroj do zásuvky a ten dával 23 voltů takže stačí. Dalo by se použít při malé změně zapojení použít i trafo
2x9 voltů. Zapojení indikuje krátkým probliknutím každou sekundu na pinu D13.
Zapojení má dvě posuvné vypínače a jedno tlačítko. Při poloze "aut." hodiny každou minutu vyšlou impuls o délce 700 ms.
Každou minutu se změní polarita výstupního impulzu pro hodiny
Vypínač v poloze "ruční" znamená, že můžeme hodiny nastavit a to takto:
Jeji druhý vypínač v poloze "automatický posun" tak asi každou sekundu se hodiny posunou o jednu minutu
Pokud bude v poloze "tlačítko" můžeme posouvat po minutě co stisk tlačítka a navíc se nastavuje přesný čas.
Jakmile stiskneme tlačítko vynulujeme tím sekundy. Pak můžeme přesunout vypínač do "aut." a je nastaveno.
Jakmile je na vstup D5 přivedeno vypínačem +5 voltů nastaví se režim "ruční"
Jakmile je na vstup D6 přivedeno vypínačem č.2 +5 voltů nastaví se režim "automatický posun"
Jakmile je na vstup D7 přivedeno tlačítkem +5 voltů posunou se hodiny o minutu a vynulují se sekundy
No a tady je program do prostředí Arduina.
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
int x = 0;
int y = 0; //polarita
int sec = 0;
int aut = 0;
byte decToBcd(byte val) {
  return ( (val / 10 * 16) + (val % 10) );
}
byte bcdToDec(byte val) {
  return ( (val / 16 * 10) + (val % 16) );
}
void setup() {
  Wire.begin();
  pinMode(3, OUTPUT); //vystup na hodiny
  pinMode(12, OUTPUT); //vystup na hodiny
  pinMode(13, OUTPUT);
  pinMode(5, INPUT); //aut
  pinMode(6, INPUT); //posun po minutach
  pinMode(7, INPUT); //tlacitko

}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) {
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));
  Wire.endTransmission();
}
void readDS3231time(byte *second) {
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  *second = bcdToDec(Wire.read() & 0x7f);

}



void aut_posun() {
  digitalWrite(3, HIGH);
  digitalWrite(12, LOW);
  delay(700);
  digitalWrite(3, LOW);
  digitalWrite(12, LOW);
  delay(300);
  y = 1;
  digitalWrite(3, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);
  delay(700);
  digitalWrite(3, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  delay(300);
  y = 0;
}


void minuta() {
  byte second;
  readDS3231time(&second);
  if (sec != second) {
    digitalWrite(13, HIGH);
    delay(20);
    digitalWrite(13, LOW);
    sec = second;
  }
  if (second == 58) {
    x = 0;
  }
  if (second == 0 & x == 0 & y == 0) {
    digitalWrite(3, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
    delay(700);
    digitalWrite(3, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    x = 1;
    y = 1;
  }
  if (second == 0 & x == 0 & y == 1) {
    digitalWrite(3, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
    delay(700);
    digitalWrite(3, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    x = 1;
    y = 0;
  }


}

void tlacitko() {
  if (y == 0) {
    digitalWrite(3, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
    delay(700);
    digitalWrite(3, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    y = 1;
    delay(50);
    return;
  }
  if (y == 1) {
    digitalWrite(3, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
    delay(700);
    digitalWrite(3, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    y = 0;
    delay(50);
  }
}

void loop() {
  if (digitalRead(5) == 0) {
    minuta();
  }
  if (digitalRead(5) == 1 & digitalRead(6) == 1) {
    aut_posun();
  }
  if (digitalRead(5) == 1 & digitalRead(7) == 1) {
    setDS3231time(0, 0, 0, 4, 1, 1, 18);
    tlacitko();
  }

  delay(50);
}



Projekt číslo 6.

Otáčkoměr pro setrvačník Stirlingova motoru


celkovější pohled na model.

pohled na OLED displej

Mini USB od arduina nano, možnost kdykoliv změnit program.

schéma zapojení.



obrázek setrvačníku, níže pak soubor v pdf pro tisk.


Co budeme potřebovat je schéma zapojení. DPS není těžká tu zvládnete sami.
případně ani nemusí být, protože jsou tam jen dva odpory. Tedy tyto dva odpory, Arduino nano, CNY60 (případně jiný senzor)
vypínač, IIC I2C OLED LCD 1,3" displej 128x64, pouzdo na čtyři 1,5V baterie.
Zapojení je opravdu snadné. Setrvačník je polepený hliníkovou páskou a jen centimetr je černý pro snímání senzoru.
Pokud se někdo chce pustit do výroby setrvačníku tak níže je ke stažení v pdf a měřítku 1:1 pro tisk.
Jen pár slov o výrobě setrvačníku. Potřeboval jsem čelní brusku, vrtačku, pilku a frézku.
Je to dělané ze slepeného sololitu. Setrvačník je vyrobený z dvou kusů: střední část s lopatkami
a okruží je druhá část. Středová je poté vlepena do okruží. Pokud máte vymyšlený postup výroby
vyrobíte si dokonale vyvážený setrvačník.
Na OLED se zobrazují max. dosažené otáčky, tyto se ukládají do EEPROM, zůstávají tedy uloženy i po odpojení baterie.
Dále momentální ujetá vzdálenost v metrech a aktuální otáčky.
Uvádím tady dvě varianty programu
První verze počítá počet impulzů ze CNY60 za určitý časový úsek v našem případě za 1,25 sekundy.
Druhá verze k níž se přikláním, počítá za jak dlouho se setrvačník dvakrát otočí.
setrvačník v pdf

#include "U8glib.h"  //verze 1
#include <EEPROM.h>

U8GLIB_SSD1306_128X64 oledd(U8G_I2C_OPT_NONE);

long int prepis = 0;
int zmena = 1;
int pocet = 0;
int val;
int maxi;
float vzdalenost = 0;
int cas = 48; //1000/mereni*60//
int mereni = 1250;
int kdyz;

void setup(void) {
  pinMode(8, INPUT);

  maximalni();

}
void maximalni(void) {

  maxi = EEPROM.read(10) + ((EEPROM.read(11)) << 8);
}

void oled(void) {

  oledd.setFont(u8g_font_10x20);
  oledd.setFont(u8g_font_unifont);
  oledd.setPrintPos(0, 10);
  oledd.print("max: ");
  oledd.print(maxi);
  oledd.print(" RPM");
  oledd.setPrintPos(0, 24);
  oledd.print("DST: ");
  oledd.print(vzdalenost);
  oledd.print(" m");
  oledd.setFont(u8g_font_10x20);
  oledd.setPrintPos(90, 55);
  oledd.print("RPM");
  oledd.setFont(u8g_font_helvR24);
  if (kdyz < 10) {
    oledd.setPrintPos(60, 55);
  }
  if (kdyz < 100 && kdyz > 9) {
    oledd.setPrintPos(42, 55);
  }
  if (kdyz > 99 && kdyz < 1000) {
    oledd.setPrintPos(24, 55);
  }
  oledd.print(pocet * cas);
}

void loop(void) {

  int val = digitalRead(8);

  if ((val == 0) & (zmena == 1)) {
    pocet++;
    zmena = 0;

  }
  if (millis() - prepis > mereni) {
    prepis = millis();
    vzdalenost = vzdalenost + (pocet * 0.46);
    kdyz = pocet * cas;


    oledd.firstPage();
    do {
      maximalni();
      oled();

    } while ( oledd.nextPage() );
    if ((pocet * cas) > maxi) {
      byte byte1 = (pocet * cas);
      byte byte2 = (pocet * cas) >> 8;
      EEPROM.update(10, byte1);
      EEPROM.update(11, byte2);
    }
    pocet = 0;
  }

  if ((val == 1) & (zmena == 0)) {
    zmena = 1;
  }
}


#include "U8glib.h"  //verze 2
#include <EEPROM.h>

U8GLIB_SSD1306_128X64 oledd(U8G_I2C_OPT_NONE);

float prepis = 0;
int zmena = 0;
int pocet = 0;
int rpm;
int val;
int maxi;
float vzdalenost = 0;
float alfa;
int long nulace;

void setup(void) {
  pinMode(8, INPUT);
  maxim();
}
void maxim(void) {

  maxi = EEPROM.read(10) + ((EEPROM.read(11)) << 8);
}

void oled(void) {

  oledd.setFont(u8g_font_10x20);
  oledd.setFont(u8g_font_unifont);
  oledd.setPrintPos(0, 10);
  oledd.print("max: ");
  oledd.print(maxi);
  oledd.print(" RPM");
  oledd.setPrintPos(0, 24);
  oledd.print("DST: ");
  oledd.print(vzdalenost);
  oledd.print(" m");
  oledd.setFont(u8g_font_10x20);
  oledd.setPrintPos(90, 55);
  oledd.print("RPM");
  oledd.setFont(u8g_font_helvR24);
  if (rpm < 10) {
    oledd.setPrintPos(60, 55);
  }
  if (rpm < 100 && rpm > 9) {
    oledd.setPrintPos(42, 55);
  }
  if (rpm > 99 && rpm < 1000) {
    oledd.setPrintPos(24, 55);
  }
  if (rpm > 1000) {
    oledd.setPrintPos(6, 55);
  }
  oledd.print(rpm);
  nulace = millis();
}

void loop(void) {

  int val = digitalRead(8);

  if ((val == 0) && (zmena == 1)) {
    pocet++;
    zmena = 0;
  }
  if (pocet == 0) {
    prepis = millis();
  }
  if (millis() - nulace > 5000) { //vynuluje oled rpm pokud se setrvačním netočí více jak 5 sekund.
    rpm = 0;
    oledd.firstPage();
    do {
      oled();
    } while ( oledd.nextPage() );
  }

  if (pocet == 2) {
    prepis = millis() - prepis;
    vzdalenost = vzdalenost + 0.88; // 0.88 je obvod setrvačníku krát dvě v metrech.
    alfa = 1000 / prepis * 60;
    rpm = alfa * 1;               // zaokrouhlí na celé číslo.
    oledd.firstPage();
    do {
      maxim();
      oled();
    } while ( oledd.nextPage() );
    pocet = 0;
  }
  if (rpm > maxi) {
    byte byte1 = (rpm);
    byte byte2 = (rpm) >> 8;
    EEPROM.update(10, byte1);
    EEPROM.update(11, byte2);
  }

  if ((val == 1) && (zmena == 0)) {
    zmena = 1;
  }
}



Projekt číslo 7.

Ovládací panel pro vitrínu na pěstování rosnatek.



Jak to funguje? panel je zapojený do spínacích hodin ty mám nastaveny na 10 hod denně.
Na LCD se zobrazuje: teplota uvnitř, vlhkost uvnitř, teplota chladiče a probíhající akce
Ve vitríně mám ventilátor pro ventilaci vzduchu a mlžič. Na chladiči ventilátor pro chlazení
Jako osvětlení mám LED (220V), dále LED pásky bílé, modré a červené a ze spodní strany skla UV LED pásky
Po spuštění panelu spínacími hodinami se zapne ventilace s mlžičem na nastavenou dobu (2 min.)
Poté nastane pauza v mém případě 12 minut, dále nasleduje ventilace vzduchu a to následovně:
podle teploty uvnitř. Příklad: při 20 stupních je to 133 sek. při 25 st. je to 208 sek. a při 30 st. je to 300 sek.
Délka ventilace se zobazuje na LCD
Po ventilaci následuje pauza a začíná vše znovu. Vstupní hodnoty se dají měnit
Ventilátory na chladiči se spínají nad 35 stupňů a vypínají pod 30 stupňů
Jako zobrazovací panel je možno použít OLED pro úsporu místa, já použil LCD protože sem ho měl po ruce
Na relé modul můžete připojit cokoliv a měnit program dle libosti, mám vyvedený mini USB arduina nano pro snadné připojení
A kolik to stálo? Box 550, elektronika+zdroje napětí+LED asi 1000 (aliexpress)
Dál mlžič, sklo a další. Myslím, že mě to vše stálo od 2 do 3 tis. korun
zbytek jako chladič alu deska, ventilátor apod. to byly domácí nálezy. Krabička je moje výroba.
butete potřebovat knihovnu knihovka DHT22
Rozhodně pokud by vitrína byla větší tak se tento panel na ovládání vyplatí, protože rostlinám svědčí


co budeme potřebovat



schéma zapejení



vnitřek zapojení modulu



chladič se zdroji napětí.


 
//Ovládací program pro vitrínu masožravých rostlin.
#define pinDHT 6
#define typDHT22 DHT22
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int pinCidlaDS = 7;
OneWire oneWireDS(pinCidlaDS);
DallasTemperature senzoryDS(&oneWireDS);



int long prepis_1 = 0;
int long prepis_2 = 0;
int teplota;
int cas = 0;
int sec = 0;
int zmena = 1;
int ch_min = 30; //min teplota chladiče (ventilátor vypnut)
int ch_max = 35; //max teplota chladiče (ventilátor zapnut)
int pauza = 720; //v sekundách
int vent_1 = 120; //v sekundách mlha
/*---------------------------------------------------------------------------
   vysvětlení:
   Po zapnutí spínacími hodinami bude probíhat tento sled programu:
   asi po 3 sekundách se zapne ventilace s mlhou na dobu (int vent_1)
   následuje pauza (int pauza)
   dále po pauze se spustí pouze ventilace na dobu (int vent_2)
   dále následuje pauza (int pauza)
   po pauze se program opakuje
   --------------------------------------------------------------------------
*/


byte a0[8] = {B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000};  //znak stupně celsia
byte a1[8] = {B01000, B01100, B01110, B01111, B01110, B01100, B01000, B00000};  //znak šipky
byte a2[8] = {B00000, B00000, B10011, B10100, B01110, B00101, B11001, B00000};  //znak chlazení

DHT mojeDHT(pinDHT, typDHT22);

void senzory() {
  senzoryDS.requestTemperatures();
  float tep = mojeDHT.readTemperature();
  int vlh = mojeDHT.readHumidity();
  float t_chl = senzoryDS.getTempCByIndex(0);
  String tep_lcd = String(tep, 1);                                  //zaokrouhlení na jedno des. místo
  String chl_lcd = String(t_chl = senzoryDS.getTempCByIndex(0), 1); //zaokrouhlení na jedno des. místo
  //-----------------------------------------
  lcd.setCursor(9, 0);
  lcd.print(tep_lcd);
  lcd.createChar(0, a0);
  lcd.setCursor(13, 0);
  lcd.write(byte(0));
  //-----------------------------------------
  lcd.setCursor(9, 1);
  lcd.print(vlh);
  lcd.print("%");
  //-----------------------------------------
  lcd.setCursor(9, 2);
  lcd.print(chl_lcd);
  lcd.createChar(0, a0);
  lcd.setCursor(13, 2);
  lcd.write(byte(0));
  if (senzoryDS.getTempCByIndex(0) > ch_max) {
    digitalWrite(10, LOW);
    lcd.createChar(2, a2);
    lcd.setCursor(15, 2);
    lcd.write(byte(2));
  }
  if (senzoryDS.getTempCByIndex(0) < ch_min) {
    digitalWrite(10, HIGH);
    lcd.setCursor(15, 2);
    lcd.print(" ");
  }
  delay(200);
  //-----------------------------------------

}
void setup() {
  lcd.begin();
  lcd.backlight();
  mojeDHT.begin();
  senzoryDS.begin();
  pinMode(9, OUTPUT); //LED 220V
  pinMode(10, OUTPUT); //chlazení chladiče
  pinMode(11, OUTPUT); //mlžič 24V
  pinMode(12, OUTPUT); //ventilace
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  lcd.setCursor(0, 0);
  lcd.print("teplota:");
  lcd.setCursor(0, 1);
  lcd.print("vlhkost:");
  lcd.setCursor(0, 2);
  lcd.print("chladic:");
  delay(500);
  lcd.noBacklight();
  digitalWrite(9, LOW); //zapne UV světlo
}

void loop() {

  if ((millis() - prepis_1) > 1000) {
    cas++;
    prepis_1 = millis();
  }

  if ((millis() - prepis_2) > 1000) {
    sec++;
    prepis_2 = millis();
  }
  if (sec >= 5) {                   // každých 5 sekund získání dat ze senzorů
    sec = 0;
    senzory();
  }
  if (zmena == 1) {                 //zapne ventilaci s mlhou na dobu (vent_1)
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    lcd.createChar(1, a1);
    lcd.setCursor(0, 3);
    lcd.write(byte(1));
    lcd.setCursor(1, 3);
    lcd.print(" VENTILACE s MLHOU ");
    zmena = 2;
    cas = 0;
  }
  if ((zmena == 2) && (cas >= vent_1)) { //vypne ventilaci s mlhou
    digitalWrite(11, HIGH);
    digitalWrite(12, HIGH);
    lcd.setCursor(1, 3);
    lcd.print("                   ");
    lcd.setCursor(1, 3);
    lcd.print(" PAUZA ");
    lcd.print(pauza / 60);
    lcd.print(" min");
    zmena = 3;
    cas = 0;
  }
  if ((zmena == 3) && (cas >= pauza)) {  //po (int pauza) zap ventilaci
    senzoryDS.requestTemperatures();
    teplota = pow (mojeDHT.readTemperature(), 2) / 3; //čím vyšší teplota tím delší ventilace do proměnné teplota
    digitalWrite(12, LOW);
    lcd.setCursor(1, 3);
    lcd.print(" VENTILACE        ");
    lcd.setCursor(12, 3);
    lcd.print(teplota);
    lcd.print(" s");
    zmena = 4;
    cas = 0;
  }
  if ((zmena == 4) && (cas >= teplota)) { //po teplota vypne ventilaci
    digitalWrite(12, HIGH);
    lcd.setCursor(1, 3);
    lcd.print("                   ");
    lcd.setCursor(1, 3);
    lcd.print(" PAUZA ");
    lcd.print(pauza / 60);
    lcd.print(" min");
    zmena = 5;
    cas = 0;
  }
  if ((zmena == 5) && (cas >= pauza)) {  // po (int pauza) začne program od začátku.
    zmena = 1;
    cas = 0;
  }



}




Projekt číslo 8.

WIFI modul ESP8266





Cílem projektu bylo odesílání dat ze senzorů na server thingspeak.com a následně zobrazovat aktuální údaje o teplotě a vlhkosti
z vnitřku vitríny na mých stránkách rosnatky.cz
Na aliexpressu jsem koupil wifi modul za 65 a DHT22 za 60. Stálo mě to tedy jen 125 Kč. Jako napájení jsem použil starou USB nabíječku
od nějakého telefonu. Modul DHT22 (měří teplotu a vlhkost) jsem použil již s odporem 1Ok. Pokud použijete jen samotný senzor,
je třeba doplnit zmíněný odpor podle projektu 7. Celé zapojení dle obrázku je otázkou chvilky.
Nejdříve je třeba se zdarma zaregistrovat na thingspeak.com kde po registraci kliknete na NEW CHANNEL, zadáte NAME (třeba stanice-3),
dále zaškrknete FIELD 1 a FIELD 2 a pojmenujete si je. Dole dáte SAVE CHANNEL. V záložce API KEYS najdete Write API key
ten budete potřebovat pro program do IDE prostředí Arduina viz níže. Dále knihovnu pro DHT22 knihovka DHT22
Dále je třeba nainstalovat do IDE arduina desku ESP8266 a to v prostedí IDE nástroje/manažér deseka do vyhledávače zadat ESP8266 a
instalovat nejnovější verzi. Po vložení programu do IDE prostředí je třeba zatat API key, název vaší wifi sítě a přístupové heslo.
Je třeba zvolit správnou desku. nástroje/vývojová deska/WeMos D1R1
Pokud je vše v pořádku připojte desku ESP8266 pomocí USB a podotýkám bez připojeného DHT22 nahrajte program do desky.
Já mám na konci programu Delay(60000) což je odesílání dat jednou za minutu. Poté můžeme sledovat již data na thingspeak.com na svém účtu.
Pokud chceme tyto data prezentovat na své stránce je třeba zkopírovat HTML kód z thingspeak.com a to my channels/public wiev
tam najdeme budíky a grafy co jsme vytvořili. Pak stačí vybrat graf a kliknout na ikonku bubliny a zobrazený kód zkopírovat na své stránky.
Pokud máte 3D tiskárnu, můžete si vytisknout krabičku a víčko.
krabička.stl
víčko.stl
#include <ESP8266WiFi.h>
#include "DHT.h"
#define DHTTYPE DHT22

uint8_t DHTPin = D5;
DHT dht(DHTPin, DHTTYPE);

float tep;
int vlh;


String apiKlic = "ZZZZZZZZZZZZZZZZ"; //write API key
const char* nazevWifi = "YYYYYYYYYYYY";  // název vaší wifi sítě
const char* hesloWifi = "XXXXXXXXXXXX";  //heslo k vaší wifi siti
const char* server = "api.thingspeak.com";
WiFiClient client;

void setup() {
  Serial.begin(9600);
  WiFi.begin(nazevWifi, hesloWifi);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void loop() {
  tep = dht.readTemperature();
  vlh = dht.readHumidity();
  if (client.connect(server, 80)) {

    String zprava = apiKlic;
    zprava += "&field1=";
    zprava += String(tep);
    zprava += "&field2=";
    zprava += String(vlh);
    zprava += "\r\n\r\n";

    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + apiKlic + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(zprava.length());
    client.print("\n\n");
    client.print(zprava);
  }
  client.stop();


  delay(60000);
}



Děkuji za návštěvu
info@arduinoo.cz