Arduino autonomní roboauto


Ukázkový kód pro jednoduché roboautíčko, robotické auto, autonomní elektroauto ovládané malým Arduinem NANO.

Obyčejný, levný 8bit procesor ATmega328P je hlavním řídím prvkem.  Dokáže vyhodnocovat dvě UTRAZVUKOVÉ čidla vzdálenosti, jedno LASEROVÉ čidlo, ovládat čtyři SERVO motory, ovládat signalizační LED světla a vše zobrazovat na OLED displeji.

Napájení je z 5V 2A powerbanky (přímo na 5V větev Arduina). Jedno UZ čidlo detekuje překážky vepředu, druhé vzadu. Infračervený laser je v podvozku a směřuje dolů aby sledoval to, jestli je autíčko na zemi nebo zvednuté. Na OLED displeji se zobrazují hodnoty čidel a provozní módy pro snadnější ladění kódu a odhalování chyb. Také jsou připojeny signalizační LED (samozřejmě přes patřičný rezistor).

Celý princip je jednoduchý a určen pro zábavu dětem (pod dozorem), případně výuku programování. Bez jakéhokoliv ovládacího tlačítka. Jen za pomoci USB se připojí powerbanka jako zdroj napájení (z USB PB na 5V větev Arduina). Následně autíčko setrvává v klidu, ale už proběhne start periferií. Po zvednutí a opětovném položení se uvede do pohybu vpřed. Jelikož PWM regulace pohybu servomotoru snižuje jak rychlost tak i okamžitý výkon, nelze motory příliš zpomalit. Jízda po koberci by byla nepřekonatelná. Proto je navolena střední rychlost a jízda je přerušovaná. Autíčko může náhodně zastavit a změnit směr. Po detekci překážky se zastaví, couvne, otočí apod. Když je autíčko zvednuto, zastaví se. Po položení na zem stále stojí (aby se nerozjelo např. při přemístění na stůl). Pro dalším zvednutí a položení se rozjede (a tak stále dokola). Je třeba brát v potaz, že chování závisí na kvalitě použitých čidel. UZ čidla mají užší detekční záběr než je šířka autíčka, proto není detekce dokonalá.

Vylepšit autíčko by bylo možné mnoha způsoby. Např. pokud se snaží pohybovat vpřed ale vzdálenost se nemění, asi se zaseklo a je třeba se otočit. Také by se dalo oželet třeba zapojení jedné LED nebo přípravy na zvuk a s použitím proudového senzoru sledovat zatížení motorků. Pro více čidel, otáčení čidel, ovládání přes BT, hodiny RTC, sledování GPS, logování a trasování na SD kartu, ovládání přes Android, …, by bylo třeba použít už větší, výkonnější a dalšími vstupy / výstupy vybavenější Arduino MEGA s procesorem ATmega2560.


Níže je základní funkční (neodladěný) kód (C++) pro inspiraci:

////////////////////////////////////////////////////////////////////////////////////////////////////////
// AUTONOMNI elektro ROBOAUTO s Arduino nano (neodladena verze)
// Pohon 4 motory, otaceni smykem, OLED stavovy displej, napajeni z powerbanky 5V/2A mimo USB
// Predni a zadni utrazvukovy senzor vzdalenosti, spodni infra-laserovy senzor vzdalenosti
// Predni svetla trvale sviti, ovladana zadni cervena svetla a blinkry
// Zapojene repro, nenaprogramovane
// Verze s nekontinualnim pomalym popojizdenim a nahodnym otacenim
// Snazi se vyhnout prekazkam, otacet se, couvat
// Po privedeni napajeni stoji, po zvednuti a polozeni jede, po zvednuti a polozeni stoji a tak dokola.
////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Knihovny, zapojeni a promenne pro dane zapojeni ///////////////////////

#include <SPI.h>               //Komunikace SPI pro OLED
#include <Adafruit_GFX.h>      //OLED
#include <Adafruit_SSD1306.h>  //OLED
#include <Servo.h>             //Servo

// Nastaveni displeje //////////////////////////////////////////////

#define SCREEN_WIDTH 128  //Sirka OLED displeje
#define SCREEN_HEIGHT 64  //Vyska OLED displeje

#define OLED_MOSI 3    //Pripojeni OLED DI (PIN)
#define OLED_CLK 2     //Pripojeni OLED D0 (PIN)
#define OLED_DC 6      //Pripojeni OLED DC (PIN)
#define OLED_CS 7      //Pripojeni OLED CS (PIN)
#define OLED_RESET 12  //Pripojeni OLED RST (PIN)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
                         OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

// Ultrazvukove senzory vzdalenosti //////////////////////////////////

int UZ_PRED_VYSILAC = 13;                    //UZ meric vzdalenosti - vysilac predni (PIN)
int UZ_PRED_PRIJIMAC = 17;                   //UZ meric vzdalenosti - prijimac predni (PIN)
int UZ_ZAD_VYSILAC = 14;                     //UZ meric vzdalenosti - vysilac zadni (PIN)
int UZ_ZAD_PRIJIMAC = 15;                    //UZ meric vzdalenosti - prijimac zadni (PIN)
long UZ_PRED_ODEZVA, UZ_PRED_VZDALENOST, UZ_ZAD_ODEZVA, UZ_ZAD_VZDALENOST;  //Promenne pro mereni UZ
int M_UZ_PREDNI = 0;                                                        //UZ predni vzdalenost cm
int M_UZ_ZADNI = 0;                                                         //UZ zadni vzdalenost cm

// Laserove mereni vzdalenosti //////////////////////////////////////////////

int LASER = 19;         //Lidar (infra) (PIN)
int M_LASER_DOLNI = 0;  //Vzdalenost lidar mm
unsigned long LASER_TRVANI;

// Pohon, ovladani driveru servomotoru ///////////////////////

#define MOTOR_PA 9   // Driver motoru pravy (PIN)
#define MOTOR_PB 10  // Driver motoru pravy (PIN)
#define MOTOR_LA 11  // Driver motoru levy (PIN)
#define MOTOR_LB 5   // Driver motoru levy (PIN)

byte MOTOR_P_VPRED = 0;  //vychozi rychlost pohonneho motoru
byte MOTOR_P_ZPET = 0;   //vychozi rychlost pohonneho motoru
byte MOTOR_L_VPRED = 0;  //vychozi rychlost pohonneho motoru
byte MOTOR_L_ZPET = 0;   //vychozi rychlost pohonneho motoru

// Svetla, zvuky ///////////////////////////////////////////////////

int PIEZO = 16;        //Pripojeny reproduktor (PIN)
int BLINKR_PRAVY = 4;  //Připojene blinkry (PIN)
int BLINKR_LEVY = 8;   //Připojene blinkry (PIN)
int ZPATECKA = 1;      //Připojene zadni svetla (PIN)

// Dalsi promenne //////////////////////////////////////////////

byte MOD_A = 0;
byte MOD_B = 0;
byte MOD_M = 0;
byte BOOT = 0;
byte POCET_COUVANI = 0;
unsigned long MOD_M_CAS_RUN;
unsigned long MOD_M_CAS_STOP;

unsigned long BLINKR_CAS;
byte BLINKR;
unsigned long MOTOR_CAS;

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Uvodni nastaveni, setup pri startu //////////////////////////////////////////////

void setup() {

  display.begin();         // Start displeje
  display.clearDisplay();  //Vymazani pameti displeje

  // Vstupy, vystupy

  pinMode(UZ_PRED_VYSILAC, OUTPUT);
  pinMode(UZ_PRED_PRIJIMAC, INPUT);

  pinMode(UZ_ZAD_VYSILAC, OUTPUT);
  pinMode(UZ_ZAD_PRIJIMAC, INPUT);

  pinMode(MOTOR_PA, OUTPUT);
  pinMode(MOTOR_PB, OUTPUT);
  pinMode(MOTOR_LA, OUTPUT);
  pinMode(MOTOR_LB, OUTPUT);

  digitalWrite(MOTOR_PA, LOW);
  digitalWrite(MOTOR_PB, LOW);
  digitalWrite(MOTOR_LA, LOW);
  digitalWrite(MOTOR_LB, LOW);

  pinMode(BLINKR_PRAVY, OUTPUT);
  pinMode(BLINKR_LEVY, OUTPUT);
  pinMode(ZPATECKA, OUTPUT);

  pinMode(LASER, INPUT);

  delay(1000);  // 1s prodleva pro dobeh periferii
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Smycka hlavniho programu //////////////////////////////////////////////

void loop() {
  mereni_vzdalenosti_predni();  //Zmer predni vzdalenost
  mereni_vzdalenosti_zadni();   //Zmer zadni vzdalenost
  mereni_laser();               //Zmer spodni vzdalenost
  set_mod_a();                  //Nastav MOD A (je na zemi a muze jezdit ci ne)
  set_mod_b();                  //Nastav MOD B (dle prekazek)
  motory_mod();                 //Nastav MOD M (rychlost motoru dle rezimu v MODECH A a B, popojizdeni)
  set_svetla();                 //Nastav svetla
  zobrazeni_mereni();           //Zobraz hodnoty a mody na displeji
  //tone(PIEZO, 100, 500);    //Piezo frekvence Hz a trvani, test
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram zobrazeni na displeji //////////////////////////////////////////////

void zobrazeni_mereni() {

  display.clearDisplay();               //Vymaze displej s predeslymi udaji
  display.setTextSize(1);               //Velikost bodu textu na 1px
  display.setTextColor(SSD1306_WHITE);  //Barva textu bila

  display.setCursor(0, 0);  //Pozice kurzoru
  display.println((String) "    ROBOAUTO STAV");

  display.setCursor(10, 14);  //Pozice kurzoru
  display.println((String) "MOD A: " + MOD_A);

  display.setCursor(70, 14);  //Pozice kurzoru
  display.println((String) "MOD B: " + MOD_B);

  display.setCursor(0, 28);  //Pozice kurzoru
  display.println((String) "IL D: " + M_LASER_DOLNI);
  display.setCursor(65, 28);  //Pozice kurzoru
  display.println((String) "us");

  display.setCursor(0, 40);  //Pozice kurzoru
  display.println((String) "UZ P: " + M_UZ_PREDNI);
  display.setCursor(65, 40);  //Pozice kurzoru
  display.println((String) "cm");

  display.setCursor(0, 52);  //Pozice kurzoru
  display.println((String) "UZ Z: " + M_UZ_ZADNI);
  display.setCursor(65, 52);  //Pozice kurzoru
  display.println((String) "cm");

  //display.drawCircle(110, 40, 12,SSD1306_WHITE);   //Prazdny kruh pro test
  //display.fillCircle(110, 40, 12,SSD1306_WHITE);   //Plny kruh pro test
  //display.drawTriangle(104, 34, 116, 34, 110, 46,SSD1306_WHITE);   //Prazdny trojuhelnik dolu pro test
  display.drawTriangle(104, 46, 116, 46, 110, 34, SSD1306_WHITE);  //Prazdny trojuhlenik nahoru

  display.display();  //Vypis na displej
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram mereni vzdalenosti predni //////////////////////////////////////////////

void mereni_vzdalenosti_predni() {
  digitalWrite(UZ_PRED_VYSILAC, LOW);  //Na 2us GND pro vypnuti UZ
  delayMicroseconds(2);
  digitalWrite(UZ_PRED_VYSILAC, HIGH);  //Na 5us 5V pro zapnuti UZ
  delayMicroseconds(5);
  digitalWrite(UZ_PRED_VYSILAC, LOW);                //Vypnuti UZ
  UZ_PRED_ODEZVA = pulseIn(UZ_PRED_PRIJIMAC, HIGH);  //Trvani do zachyceni odrazu UZ
  UZ_PRED_VZDALENOST = UZ_PRED_ODEZVA / 58.31;       //Prepocet podle rychlosti zvuku pri 20°C
  M_UZ_PREDNI = UZ_PRED_VZDALENOST;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram mereni vzdalenosti zadni //////////////////////////////////////////////

void mereni_vzdalenosti_zadni() {
  digitalWrite(UZ_ZAD_VYSILAC, LOW);  //Na 2us GND pro vypnuti UZ
  delayMicroseconds(2);
  digitalWrite(UZ_ZAD_VYSILAC, HIGH);  //Na 5us 5V pro zapnuti UZ
  delayMicroseconds(5);
  digitalWrite(UZ_ZAD_VYSILAC, LOW);               //Vypnuti UZ
  UZ_ZAD_ODEZVA = pulseIn(UZ_ZAD_PRIJIMAC, HIGH);  //Trvani do zachyceni odrazu UZ
  UZ_ZAD_VZDALENOST = UZ_ZAD_ODEZVA / 58.31;       //Prepocet podle rychlosti zvuku pri 20°C
  M_UZ_ZADNI = UZ_ZAD_VZDALENOST;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram mereni vzdalenosti spodni //////////////////////////////////////////////

void mereni_laser() {
  uint16_t distance = 0;
  M_LASER_DOLNI = pulseIn(LASER, HIGH);
  //distance=LASER_TRVANI/10;  // prepocet na mm
  //M_LASER_DOLNI = distance;  // prepocet na mm
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro konfiguraci rychlosti motoru //////////////////////////////////////////////

void motory_mod_RUN() {
  //Stop
  if (MOD_M == 0) {
    MOTOR_P_VPRED = 0;  //Motor pravy vpred - Hodnota PWM pro rychlost 0-255
    MOTOR_P_ZPET = 0;   //Motor pravy zpet - Hodnota PWM pro rychlost 0-255
    MOTOR_L_VPRED = 0;  //Motor levy vpred - Hodnota PWM pro rychlost 0-255
    MOTOR_L_ZPET = 0;   //Motor levy zpet - Hodnota PWM pro rychlost 0-255
    pohon_motor();      //Podprogram pro nastaveni rychlosti
  }

  //Vpred
  if (MOD_M == 1) {
    MOTOR_P_VPRED = 140;
    MOTOR_P_ZPET = 0;
    MOTOR_L_VPRED = 140;
    MOTOR_L_ZPET = 0;
    pohon_motor();
  }

  //Vzad
  if (MOD_M == 2) {
    MOTOR_P_VPRED = 0;
    MOTOR_P_ZPET = 140;
    MOTOR_L_VPRED = 0;
    MOTOR_L_ZPET = 140;
    pohon_motor();
  }

  //Doleva
  if (MOD_M == 3) {
    MOTOR_P_VPRED = 230;
    MOTOR_P_ZPET = 0;
    MOTOR_L_VPRED = 0;
    MOTOR_L_ZPET = 230;
    pohon_motor();
  }

  //Doprava
  if (MOD_M == 4) {
    MOTOR_P_VPRED = 0;
    MOTOR_P_ZPET = 230;
    MOTOR_L_VPRED = 230;
    MOTOR_L_ZPET = 0;
    pohon_motor();
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro ovladani motoru, nastaveni rychlosti //////////////////////////////////////////////

void pohon_motor() {
  analogWrite(MOTOR_PA, MOTOR_P_VPRED);
  analogWrite(MOTOR_PB, MOTOR_P_ZPET);
  analogWrite(MOTOR_LA, MOTOR_L_VPRED);
  analogWrite(MOTOR_LB, MOTOR_L_ZPET);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro zpomaleni pohybu prerusovanou jizdou //////////////////////////////////////////////

void motory_mod() {
  //Pohon vychozi
  if ((MOD_M_CAS_RUN == 0) and (MOD_M_CAS_STOP == 0)) {
    MOD_M_CAS_RUN = millis();
    motory_mod_RUN();
  }

  //Pohon stop
  if ((MOD_M_CAS_RUN != 0) and (MOD_M_CAS_STOP == 0) and (MOD_M_CAS_RUN + 50 < millis())) {
    MOD_M_CAS_STOP = millis();
    MOTOR_P_VPRED = 0;
    MOTOR_P_ZPET = 0;
    MOTOR_L_VPRED = 0;
    MOTOR_L_ZPET = 0;
    pohon_motor();
    MOD_M_CAS_RUN = 0;
  }

  //Pohon aktivni
  if ((MOD_M_CAS_RUN == 0) and (MOD_M_CAS_STOP != 0) and (MOD_M_CAS_STOP + 50 < millis())) {
    MOD_M_CAS_RUN = millis();
    motory_mod_RUN();
    MOD_M_CAS_STOP = 0;
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro zmenu modu zvednutim auta //////////////////////////////////////////////

void set_mod_a() {

  //Po zapnuti napajeni stoji
  //Po zvednuti stoji
  //Po polozeni jede
  //Po daslim zvednuti stoji a po polozeni take (parkovani)

  if ((MOD_A == 0) and (M_LASER_DOLNI > 1000)) {
    MOD_A = 1;
  }

  if ((MOD_A == 1) and (M_LASER_DOLNI < 700)) {
    MOD_A = 2;
  }

  if ((MOD_A == 2) and (M_LASER_DOLNI > 1000)) {
    MOD_A = 3;
  }

  if ((MOD_A == 3) and (M_LASER_DOLNI < 700)) {
    MOD_A = 0;
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro zmenu modu prekazkami //////////////////////////////////////////////
// Pouzity UZ ukazuje hodnotu vetsi nez 2000cm i kdyz je prekazka tesne u u nej, proto v podmince
// Zpozdeni pomoci millis je pouzito pro zastaveni motoru pred zmenou smeru jizdy

void set_mod_b() {

  // Nesmi se pohybovat kdyz je s autem rucne zvedano dle MOD A
  if (MOD_A != 2) {
    MOD_M = 0;
    motory_mod();
  }

  //Pokud je na zemi dle MOD A
  if (MOD_A == 2) {

    //Nahodna zmena smeru jizdy
    if (MOD_B == 1) {
      int rndNumberSmer = random(0, 1000);
      if (rndNumberSmer > 990) {
        digitalWrite(ZPATECKA, HIGH);
        MOD_M = 0;
        motory_mod();
        MOTOR_CAS = millis();
        MOD_B = 40;
      }
    }

    //Stop kdyz je tesna prekazka vpredu a vzadu
    if ((MOD_B == 0) or (MOD_B == 1) or (MOD_B == 9)) {
      if ((M_UZ_PREDNI < 5) and (M_UZ_ZADNI < 5)) {
        MOD_M = 0;
        motory_mod();
        MOD_B = 9;
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, LOW);
        digitalWrite(ZPATECKA, LOW);
      }
    }

    //Dopredu
    if ((MOD_B == 0) or (MOD_B == 1) or (MOD_B == 9)) {
      if ((M_UZ_PREDNI >= 25) and (M_UZ_PREDNI < 2000)) {
        MOD_M = 1;
        motory_mod();
        MOD_B = 1;
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, LOW);
        digitalWrite(ZPATECKA, LOW);
      }
    }

    //Stop kdyz je prekazka vpredu
    if ((MOD_B == 0) or (MOD_B == 1)) {
      if ((M_UZ_PREDNI < 25) or (M_UZ_PREDNI > 2000)) {
        MOTOR_CAS = millis();
        MOD_M = 0;
        motory_mod();
        MOD_B = 2;
        digitalWrite(ZPATECKA, HIGH);
      }
    }

    //Couvani po prekazce vpredu
    if ((MOD_B == 2) and (POCET_COUVANI < 2) and (MOTOR_CAS + 300 < millis())) {
      if (((M_UZ_PREDNI < 20) or (M_UZ_PREDNI > 2000)) and (M_UZ_ZADNI >= 20)) {
        MOD_M = 2;
        motory_mod();
        MOD_B = 3;
        digitalWrite(ZPATECKA, HIGH);
        POCET_COUVANI = POCET_COUVANI + 1;
      }
    }

    //Couvani po prekazce vpredu
    if ((MOD_B == 2) and (POCET_COUVANI >= 2) and (MOTOR_CAS + 300 < millis())) {
      if (((M_UZ_PREDNI < 20) or (M_UZ_PREDNI > 2000)) and (M_UZ_ZADNI >= 25)) {
        MOD_M = 2;
        motory_mod();
        MOD_B = 4;
        digitalWrite(ZPATECKA, HIGH);
        MOTOR_CAS = millis();
        POCET_COUVANI = 0;
      }
    }

    //Couvani po prekazce vpredu ALT
    if ((MOD_B == 2) and (MOTOR_CAS + 300 < millis())) {
      if ((M_UZ_PREDNI > 20) and (M_UZ_PREDNI < 2000) or (M_UZ_ZADNI < 25)) {
        MOTOR_CAS = millis();
        MOD_M = 2;
        motory_mod();
        MOD_B = 4;
        digitalWrite(ZPATECKA, HIGH);
        POCET_COUVANI = 0;
      }
    }

    //Stop po couvani po prekazce vpredu
    if (MOD_B == 3) {
      if ((M_UZ_PREDNI >= 20) and (M_UZ_PREDNI < 2000) and (M_UZ_ZADNI > 20)) {
        MOTOR_CAS = millis();
        MOD_M = 0;
        motory_mod();
        MOD_B = 4;
        digitalWrite(ZPATECKA, HIGH);
      }
    }

    //Volba smeru otaceni nahodne
    if ((MOD_B == 4) and (MOTOR_CAS + 300 < millis())) {
      int rndNumber = random(0, 10);
      if (rndNumber <= 5) { MOD_B = 5; }
      if (rndNumber > 5) { MOD_B = 6; }
      digitalWrite(ZPATECKA, LOW);
      POCET_COUVANI = 0;
    }

    //Otaceni doleva smykem doleva
    if (MOD_B == 5) {
      if (((M_UZ_PREDNI < 50) or (M_UZ_PREDNI > 2000)) and (M_UZ_ZADNI >= 15)) {
        MOD_M = 3;
        motory_mod();
        MOD_B = 5;
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, HIGH);
      }
    }

    //Otaceni doprava smykem doprava
    if (MOD_B == 6) {
      if (((M_UZ_PREDNI < 50) or (M_UZ_PREDNI > 2000)) and (M_UZ_ZADNI >= 15)) {
        MOD_M = 4;
        motory_mod();
        MOD_B = 6;
        digitalWrite(BLINKR_PRAVY, HIGH);
        digitalWrite(BLINKR_LEVY, LOW);
      }
    }

    //Stop po otaceni smykem
    if ((MOD_B == 5) or (MOD_B == 6)) {
      if ((M_UZ_PREDNI >= 50) and (M_UZ_PREDNI < 2000) and (M_UZ_ZADNI >= 15)) {
        MOD_M = 0;
        motory_mod();
        MOD_B = 7;
        MOTOR_CAS = millis();
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, LOW);
      }
    }

    //Stop po prekazce vepredu i vzadu
    if ((MOD_B == 0) or (MOD_B == 2) or (MOD_B == 3) or (MOD_B == 1) or (MOD_B == 9)) {
      if ((M_UZ_PREDNI < 14) and (M_UZ_ZADNI < 14)) {
        MOTOR_CAS = millis();
        MOD_M = 0;
        motory_mod();
        MOD_B = 4;
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, LOW);
        digitalWrite(ZPATECKA, LOW);
      }
    }

    //Prepnuti na vychozi stav
    if ((MOD_B == 7) and (MOTOR_CAS + 300 < millis())) {
      MOD_B = 0;
    }

    //Nahodna zmena smeru pro jizde vpred otacenim
    if ((MOD_B == 40) and (MOTOR_CAS + 300 < millis())) {
      int rndNumber = random(0, 10);
      if (rndNumber <= 5) { MOD_B = 50; }
      if (rndNumber > 5) { MOD_B = 60; }
      digitalWrite(ZPATECKA, LOW);
      MOTOR_CAS = millis();
    }

    //Otaceni doleva smykem - nahodne
    if (MOD_B == 50) {
      if (MOTOR_CAS + 500 > millis()) {
        MOD_M = 3;
        motory_mod();
        MOD_B = 50;
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, HIGH);
      }
    }

    //Otaceni doprava smykem - nahodne
    if (MOD_B == 60) {
      if (MOTOR_CAS + 500 > millis()) {
        MOD_M = 4;
        motory_mod();
        MOD_B = 60;
        digitalWrite(BLINKR_PRAVY, HIGH);
        digitalWrite(BLINKR_LEVY, LOW);
      }
    }

    //Konec otaceni smykem - nahodne
    if ((MOD_B == 60) or (MOD_B == 50)) {
      if (MOTOR_CAS + 500 < millis()) {
        MOD_M = 0;
        motory_mod();
        MOD_B = 7;
        MOTOR_CAS = millis();
        digitalWrite(BLINKR_PRAVY, LOW);
        digitalWrite(BLINKR_LEVY, LOW);
      }
    }
  }
}


////////////////////////////////////////////////////////////////////////////////////////////////////////
// Podprogram pro ovladani svetel //////////////////////////////////////////////

void set_svetla() {

  if ((MOD_A == 1) or (MOD_A == 3)) {
    digitalWrite(ZPATECKA, LOW);
    if ((BLINKR == 0) and (BLINKR_CAS + 100 < millis())) {
      BLINKR_CAS = millis();
      BLINKR = 1;
      digitalWrite(BLINKR_PRAVY, HIGH);
      digitalWrite(BLINKR_LEVY, HIGH);
    }
    if ((BLINKR == 1) and (BLINKR_CAS + 100 < millis())) {
      BLINKR_CAS = millis();
      BLINKR = 0;
      digitalWrite(BLINKR_PRAVY, LOW);
      digitalWrite(BLINKR_LEVY, LOW);
    }
  }

  if (MOD_A == 0) {
    digitalWrite(BLINKR_PRAVY, HIGH);
    digitalWrite(BLINKR_LEVY, HIGH);
    digitalWrite(ZPATECKA, LOW);
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////


Zapojení křížového přepínače, vypínače


Jak zapojit křížový přepínač?

Pro ovládání svítidla ze tří míst je třeba použít dva schodišťové přepínače a jeden křížový.

  1. Nejdříve vypneme jistič a zkontrolujeme nepřítomnost napětí na všech vodičích!
  2. Na kovové kryty svítidla se nesmí dostat elektřina. Pro případ takové závady je třeba připojit ochranný žlutozelený vodič na svorku PE. Tento vodič je nejdelší aby při náhodném vytržení kabelu zůstal tento vodič připojen nejdéle.
  3. Na závit objímky N svítidla připojíme pracovní modrý vodič (nulák, střední vodič). Tudy jde elektřina pouze pokud žárovka svítí.
  4. Křížový přepínač se chová jako dva spojené schodišťové vedle sebe a ovládané současně. Využívá se zapojení, kdy se jeden vždy zapne a druhý vypne (a obráceně).
  5. Hnědý či černý vodič fáze jenž je trvale pod napětím 230V připojíme nejdříve do prvního schodišťového přepínače (A-A).
  6. Z prvního schodišťového přepínače vedeme vodiče do krajních svorek křížového přepínače (B-B,B) tak, aby jedna část v křížovém přepínači byla sepnuta a druhá rozepnuta (a po přepnutí obráceně).
  7. Z prvního schodišťového přepínače vedeme vodiče do středních svorek křížového přepínače (C-C,C) tak, aby jedna část v křížovém přepínači byla rozepnuta a druhá sepnuta (a po přepnutí obráceně).
  8. Z jedné poloviny spodní strany křížového přepínače vedeme vodiče do druhého schodišťového přepínače (D-D).
  9. Z druhé poloviny spodní strany křížového přepínače vedeme vodiče do druhého schodišťového přepínače na vedlejší svorku (E-E).
  10. Z vrchní svorky druhého schodišťového přepínače vedeme vodič na spodní kontakt objímky svítidla L (F-F). Tento kontakt je hůře přístupný při výměně žárovky aby se omezil nechtěný dotyk.
  11. Modrý, hnědý (černý) a žlutozený vodič se nesmí nikde propojit mezi sebou vzájemně.
  12. Fázové vodiče jsou černé, šedé a hnědé. Pro lepší orientaci jsou v nákresu směrem k přepínačům znázorněny dalšími barvami.
  13. Zkontrolujeme zapojení a zapneme jistič. Vyzkoušíme funkčnost.
  14. Zapojení by měla prováděl osoba s platnou vyhláškou.

 

Lze použít schodišťové (střídavé) přepínače (č.6) a křížový přepínač (č.7)


Schéma zapojení


Je třeba dbát aby kabely nebyly zlomené a aby se odizolované části nedotýkaly jiných vodičů či kovových částí mimo svorkovnice. Šrouby je třeba utáhnout aby se vodiče nepovolily. Při špatném zapojení může dojít k ohrožení majetku, zdraví či života osob a zvířat.

Vodiče umístěte kolem šroubů tak, aby se dotahováním šroubu více zasunovaly. Používejte odpovídající průřez vodiče dle zátěže spotřebiče. Každý okruh pečlivě jistěte jističem jenž přeruší pouze fázový vodič (hnědý, černý). Jistič ani pojistka nesmí přerušit pracovní ani ochranný vodič (modrý a zelený).

Ani improvizované řešení nesmí být nebezpečné. Nikdy se nesmí dostat napětí 230V na místa snadno přístupná dotykem. Pamatujte i na kvalitní mechanické provedení tak, aby se používáním kabely či krabice neuvolnily nebo aby nebyly náchylné umístěním k poškození, přestřižení, lámání.

V místech kde se vyskytuje voda (koupelna, kuchyně) umístěte veškerou elektroinstalaci s ohledem na možnost stříkající vody z vodovodních baterií či sprchových hlavic. Tam kde není možné zvolit ochranu vhodnou polohou instalujte krabice a zařízení se zvýšenou ochranou proti stříkající vodě. V těchto prostorech je třeba užívat i proudový chránič. Všechny kovové plochy, předměty, potrubí pospojujte žlutozeleným vodičem a spojte s hlavní zemnící svorkou domu.


Horoskop a čínský horoskop v Pascalu

Program po zadání data narození (den, měsíc a rok) určí horoskopové znamení. Rovněž se určí i čínské znamení. Program má jednoduché zabezpečení proti špatnému rozsahu vstupních dat – toto zabezpečení lze vylepšit dalšími podmínkami.


program ZNAMENI;

var
     d: integer;     {cislo dne}
     m: integer;     {cislo mesice}
     r: integer;     {cislo roku}
     z: string;      {znameni}
     c: string;      {cinske znameni}

     cpkrysa:  shortint;
     cpbuvol:  shortint;
     cptygr:   shortint;
     cpzajic:  shortint;
     cpdrak:   shortint;
     cphad:    shortint;
     cpkun:    shortint;
     cpkoza:   shortint;
     cpopice:  shortint;
     cpkohout: shortint;
     cppes:    shortint;
     cpprase:  shortint;

     cprok:  shortint;


begin
     {--------------------------zadani vstupnich dat---------------------------}

     writeln ('...::: Program zjisti vase znameni dle datumu narozeni :::...');
     writeln ('');
     writeln ('1. Zadejte den narozeni v mesici (1-31) a stisknete ENTER: ');
     readln (d);
     writeln ('');
     writeln ('2. Zadejte mesic narozeni(1-12) a stisknete ENTER: ');
     readln (m);
     writeln ('');
     writeln ('3. Zadejte rok narození (1900-2020) a stisknete ENTER: ');
     readln (r);
     writeln ('');

     {--------------------------vypis udaju------------------------------------}

      if (m>12) or (d>31) then
         begin
          writeln ('');
          writeln ('Chyba: Vase datum narozeni je mimo rozsah!');
          writeln ('');
         end;
       if (m<=12) or (d<=31) then
         begin
          writeln ('_________________________________________________');
          writeln ('');
          writeln ('Vase datum narozeni je: ',d,'.',m,'.',r);
          writeln ('_________________________________________________');
         end;

     {-----------------------zjisteni mesice a nasledne znameni----------------}

     case m of
          1:
            begin
                 if d<=20 then
                    z:='KOZOROH'
                   else
                     z:='VODNAR'
            end;

          2:
            begin
                 if d<=20 then
                    z:='VODNAR'
                   else
                     z:='RYBY'
            end;

          3:
            begin
                 if d<=20 then
                    z:='RYBY'
                   else
                     z:='BERAN'
            end;

          4:
            begin
                 if d<=20 then
                    z:='BERAN'
                   else
                     z:='BYK'
            end;

          5:
            begin
                 if d<=21 then
                    z:='BYK'
                   else
                     z:='BLIZENCI'
            end;

          6:
            begin
                 if d<=21 then
                    z:='BLIZENCI'
                   else
                     z:='RAK'
            end;

          7:
            begin
                 if d<=22 then
                    z:='RAK'
                   else
                     z:='LEV'
            end;

          8:
            begin
                 if d<=22 then
                    z:='LEV'
                   else
                     z:='PANNA'
            end;

          9:
            begin
                 if d<=22 then
                    z:='PANNA'
                   else
                     z:='VAHY'
            end;

          10:
            begin
                 if d<=23 then
                    z:='VAHY'
                   else
                     z:='STIR'
            end;

          11:
            begin
                 if d<=22 then
                    z:='STIR'
                   else
                     z:='STRELEC'
            end;

          12:
            begin
                 if d<=21 then
                    z:='STRELEC'
                   else
                     z:='KOZOROH'
            end;

          end;

{------------------------vypocet cinskeho znameni------------------------------}

     cpkrysa:=2008 mod 12;
     cpbuvol:=2009 mod 12;
     cptygr:=2010 mod 12;
     cpzajic:=2011 mod 12;
     cpdrak:=2012 mod 12;
     cphad:=2013 mod 12;
     cpkun:=2014 mod 12;
     cpkoza:=2015 mod 12;
     cpopice:=2016 mod 12;
     cpkohout:=2017 mod 12;
     cppes:=2018 mod 12;
     cpprase:=2019 mod 12;

     cprok:=r mod 12;

{----------------------prirazeni cinskeho zanmeni------------------------------}

     if cprok=cpkrysa then
         c:='PRASE'
        else if cprok=cpbuvol then
              c:='BUVOL'
             else if cprok=cptygr then
                  c:='TYGR'
                 else if cprok=cpzajic then
                      c:='ZAJIC'
                     else if cprok=cpdrak then
                          c:='DRAK'
                         else if cprok=cphad then
                              c:='HAD'
                             else if cprok=cpkun then
                                  c:='KUN'
                                 else if cprok=cpkoza then
                                      c:='KOZA'
                                     else if cprok=cpopice then
                                          c:='OPICE'
                                         else if cprok=cpkohout then
                                              c:='KOHOUT'
                                             else if cprok=cppes then
                                                  c:='PES'
                                                 else if cprok=cpprase then
                                                      c:='PRASE'
                                                     else
                                                         c:='Nastala chyba';

{----------------------zobrazeni udaju na monitor------------------------------}


           writeln('________________________________________________________');
           writeln ('');
           writeln('Vase znameni je: ',z);
           writeln ('');
           writeln('Narodil/a jste se dle cinskeho kalendare ve znameni: ',c);
           writeln('________________________________________________________');
           writeln ('');
           writeln('Pro ukonceni stisknete ENTER');


      readln;
end.

Porovnání dvou čísel v Pascalu

Po zadání dvou celých (kladných či záporných) čísel, porovná program tyto čísla a vypíše zprávu o tom, které z nich je větší.


 

program ROVNITKO;

var
   a: integer;   {prvni cislo}
   b: integer;   {druhe cislo}

begin
     writeln ('...::: Program porovnavajici dve zadana cisla :::...');
     writeln ('');

     writeln ('Zadejte prvni cislo a stisknete ENTER: ');
     readln (a);

     writeln ('');
     writeln ('Zadejte druhe cislo a stisknete ENTER: ');
     readln (b);

     writeln ('');
     writeln ('Prvni zadane cislo je: ',a);
     writeln ('Druhe zadane cislo je: ',b);
     writeln ('');

     {----------------porovnani cisel------------------------------------------}
      if a>b then
        writeln ('Prvni cislo: ',a, ' je vetsi nez druhe cislo: ',b)
       else if a=b then
         writeln ('Prvni cislo: ',a, ' se rovna druhemu cislu: ',b)
        else
          writeln ('Druhe cislo: ',b, ' je vetsi nez prvni cislo: ',a);

     writeln ('');
     writeln ('Stisknutím ENTER ukoncite program.');
     readln;


end.

Výpočet vzdálenosti od blesku v Pascalu

Výpočet vzdálenosti od bouřkového blesku. Program po zadání rozdílného času mezi zpozorováním blesku a zaslechnutím hromu vypočítá vzdálenost od tohoto blesku.


program BLESK;

const
     s = 299792458;     {rychlost svetla mps}
     z = 340;           {rychlost zvuku mps}
     m = 1000;          {1000m}

var
     t: integer;     {stopnuty cas}
     v: integer;     {vysledek v m}
     k: integer;     {vysledek v km - cele cislo}
     d: integer;     {vysledek v km - zbytek}

begin
         writeln ('...::: Program na vypocet priblizne vzdalenosti od blesku :::...');
         writeln ('');
         writeln ('1. Nachystejte si stopky. Ihned, jakmile uvidite blesk, stopky spustte.');
         writeln ('2. V okamziku, kdy uslysite hrom, stopky zastavte.');
         writeln ('');
         writeln ('3. Zadejte namereny cas (v sekundach) a stisknete ENTER:');
         writeln ('');
         readln (t);
         writeln ('');
         v:=t*z;             {vypocet m}
         k:=v div m;         {vypocet km - cele cislo}
         d:=v mod m;         {vypocet km - zbytek po deleni}
         writeln ('Vase vzdalenost od blesku je: ',v,'m = ',k,'.',d,'km');
         writeln ('');
         writeln ('');
         writeln ('');
         writeln ('Pro ukonceni programu stisknete ENTER');
         readln;

end.

Zjištění měsíce dle jeho čísla v Pascalu

Po zadání čísla (1-12) program zjistí o který měsíc se jedná.


program ROK;

var
     m: integer;     {cislo mesice}

begin
     writeln('...::: Program vypise nazev mesice dle jeho cisla (1-12) :::...');
     writeln('');
     writeln('3. Zadejte cislo mesice (1-12) a stisknete ENTER: ');
     readln (m);
     writeln('');

     {--------------------------zjisteni mesice dle cisla----------------------}

     case m of
          1:
            begin
              writeln(m,'. mesic je leden.');
            end;

          2:
            begin
              writeln (m,'. mesic je unor.');
            end;

          3:
            begin
              writeln (m,'. mesic je brezen.');
            end;

          4:
            begin
              writeln (m,'. mesic je duben.');
            end;

          5:
            begin
              writeln (m,'. mesic je kveten.');
            end;

          6:
            begin
              writeln (m,'. mesic je cerven.');
            end;

          7:
            begin
              writeln (m,'. mesic je cervenec.');
            end;

          8:
            begin
              writeln (m,'. mesic je srpen.');
            end;

          9:
            begin
              writeln (m,'. mesic je zari.');
            end;

          10:
            begin
              writeln (m,'. mesic je rijen.');
            end;

          11:
            begin
              writeln (m,'. mesic je listopad.');
            end;

          12:
            begin
              writeln (m,'. mesic je prosinec.');
            end;

          end;

      writeln('');
      writeln('Ukoncete program stisknutim ENTER');
      readln;

end.

SDR – Programově definované rádio

SDR (Software Defined Radio) – programově definované rádio umožňuje pomocí programu upravit vlastnosti zařízení (HW) pro příjem rádiového signálu. Programem tak můžete zvolit přijímanou frekvenci, modulaci, různé kódovací standardy, šířku pásma apod.

Velmi povedeným a dostupným SDR může být TV tuner do USB s čipem Realtek RTL2832U. Pokud máte takový tuner k dispozici, můžete za pomoci upravených ovladačů skenovat frekvence od přibližně 24MHz do 1760MHz. Existují však i návody jak doupravit modul pro jiné rozsahy. Lze tak naladit pásma radioamatérů, běžné FM rádia, letecký provoz, meteodružice apod.



Instalace

  • Jako první krok doporučuji nainstalovat velmi povedený obslužný program HDSDR. Při instalaci zvolíme složku, kam se bude SW instalovat.
  • Po dokončení instalace HDSDR stáhněte knihovnu ExtIO_RTL.dll a tu vložte do složky s nainstalovaným HDSDR. Program bude pracovat právě s touto knihovnou.

SLOZKA


Originální ovladače od TV tuneru je třeba přeinstalovat upravenými. Zařízení však nebude od této chvíle fungovat jako TV tuner pro sledování televize. Stáhněte aplikaci Zadig a spusťte ji (je vyžadováno oprávnění správce PC). V zálože Options zvolte List All Devices . Níže bude nabídka dostupného HW pro přeinstalování. Zda-li se jedná o správný HW, zjistíte tak, že po vysunutí zařízení z USB zmizí HW z nabídky. Vložte tedy zařízení do USB a vyberte k instalaci Driver WinUSB .


SDR1


Po kliknutí na Install Driver či Reinstall Driver se přeinstalují ovladače.

V případě, že jste přeinstalovali špatný HW, přestane fungovat např. myš, klávesnice atd. Toto napravíte odinstalováním ovladače např. přes ovládací panely a správce zařízení. Po opětovném připojení myši či klávesnice se ovladače nainstalují správně.

Pokud jsou ovladače nainstalovány správně, spusťte program HDSDR .


Program HDSDR

Po spuštění programu se většinou nastaví vše automaticky. Tlačítko Start (F2) spustí skenování navoleného frekvenčního rozsahu (ten nesmí být mimo možnosti přijímače).

Kolečkem myši můžeme přeladit např. na FM pásmo běžných rádií nad 88MHz . Posuňte se tedy myší nad frekvenci ladění LO a nalaďte postupně jednotky, desítky, stovky MHz . Máte-li připojenu anténu, uvidíte zeleně až červeně silné stanice . Kliknutím do středu této plochy program demoduluje zvolenou stanici. Kliknutím na FMpřepnete demodulaci z FM.

Jestliže nic nelyšíte, tlačítkem Soundcard (F5) zvolte audio vstup a výstup zvukové karty. Pokud je zvuk neposlouchatelný. Je třeba nastavit parametry zvukové karty tlačítkem Bandwitch (F6). Položku Output zvolte většinou na 96000 nebo 192000 .

SDR3

Zvuk lze vylepšit po opětovném kliknutí na FM a horizontílním posuvníkem FM-BW můžete nastavit šířku pásma FM .

Pokud by se zvuk sekal apod. pak pomůže natavení pod tlačítkem ExtIO . Většinou vyhoví hodnoty Sample Rate 2,4 Msps a Bufer Size 64kB.

SDR4

V této chvíli by měl být zvuk čitý. Po připojení lepší antény můžeme ladit požadované frekvence, volit demodulaci, šířku pásma atd.


Až budete chtít opět provozovat TV tuner ke svému původnímu účelu, jednoduše nainstalujte původní ovladače z CD jenž byly k TV tuneru přímo od výrobce.


Příjem a dekódování meteorologického satelitu

Jak snadno a rychle za pár korun přijímat signál z meteorologického satelitu? Postačí TV tuner (Televizní karta) s čipem Realtek RTL2832U do PC a anténa. Tuner lze zakoupit např. na www.dx.com

TV tuner čipem Realtek RTL2832U se použije jako SDR příjímač pro příjem meteorologických satelitů NOAA na 137MHz.

Nejvhodnější programy pro ovládání a demodulaci jsou SDRSharp a HDSDR. Po jejich instalaci vložte jejich hlavního adresáře knihovnu ExtIO_RTL.dll .

(Více o zprovoznění HW a SW pro RTL2832U, o TV Tuneru naleznete v předešlém článku.)


Pro příjem polárních satelitů (obíhajících kolem pólů) na 137MHz je potřeba použít dobrou anténu. Pokud nevadí občasný šum, postačí λ/4 anténa.

ANT

Anténa je vytvořena ze samonosného měděného drátu s izolací – jen v místě pájení se odizoluje. Pro 4+1 prvkovou anténu potřebujeme 5x 51cm drátu a cca 2x2cm cuprextitu. Do cuprextitu vyvrtáme otvor na provlečení drátu i s izolací. Přibližně 1cm z 4ks 51xm drátů odizolujeme a připájíme na rohy cuprextitu (tak aby zůstal vyvrtaný otvor volný). Odizolujeme cca 7 mm posledního 51cm drátu a ten prostrčíme otvorem v kuprexitu (tak aby se odizolovaná část nedotýkala vodivě kuprextitu). Na tento drát připájíme střed koax. kabelu. Stínění koax. kabelu je třeba připájet na kuprextit spojený se čtveřicí drátů. Zajistíme aby přesahovalo cca 50cm drátu nad kuprextit a vše zatavíme tavnou pistolí. Čtveřice postranních drátů musí být ohnuta o 45°. Koax. kabel by měl být rovnoběžně s anténou min. 2m (bez kroucení apod.).


Po připojení antény lze několikrát za den zachytit signál na 137MHz z NOAA nad územím Evropy. Většinou se jedná o 5-7 hodinu, 12-14 hodinu a 16-18 hodinu. Trvání je skrz přelet cca do 15ti minut.

Nejčastější frekvence:
– NOAA 15 (137.620 MHz)
– NOAA 18 (137.912 MHz)
– NOAA 19 (137.100 MHz)

Read more »


Změny počasí, tlaku a vlhkosti – vliv na lidské tělo

Teplota je veličina, která ovlivňuje náš každodenní život. Ráno je to nejdůležitější údaj pro volbu oblečení do práce či do školy. Teplotu sledujeme při sportu, doma, v kanceláři či v automobilu. Někomu stačí pohled z okna, někdo sleduje přesnou teplotu teploměrem či meteostanicí. Samotná teplota však může být velmi klamavý údaj.


Ochlazování větrem
Povrch našeho těla má přibližně 31°C. Chladnější vítr způsobuje odvanutí této tělesné teploty z povrchu pokožky. Lidské tělo tak může vnímat pocitově mnohem nižší teplotu než je ta skutečná. Např. při -10°C a rychlosti větru 20km/h je pocitová teplota -18°C. Naopak teplejší vítr než +31°C zabraňuje ochlazování těla a teplotu pokožky ještě zvyšuje.

V zimním období i malý vítr dokáže pěkně znepříjemnit pobyt venku. V létě chladný vánek ochladí tělo ale jakmile teplota vzduchu vystoupá nad 31°C, může být vítr také nepříjemný.

Vlhkost vzduchu
Množství vodní páry ve vzduchu souvisí zdravím ale i okamžitým pocitem okolní teploty. Vlhkost vzduchu ovlivňuje odpařování potu z kůže, ale také zajišťuje správné fungování sliznic. Vlhkost mění vnímanou teplotu až od přibližně +27°C (např. při teplotě 35°C a vlhkosti vzduchu 60% vnímáme teplotu až na úrovni +47°C). Při vysoké vlhkosti se snižuje schopnost odpařování potu z povrchu pokožky a tím se tělo hůře ochlazuje. Proto při letních vedrech může vlhkost nad 45% snížit sportovní výkony ale i samotný pocit ze sportu nemusí být příjemný. Především v létě je menší vlhkost vzduchu a přísun tekutin při sportu nejlepší kombinace pro snadnější a zdravější ochlazování.

Naopak v zimě, v interiéru (domě, bytě) při vytápění by měla být vlhkost okolo 55%. Menší hodnota vodních par (pod 45%) vysušuje sliznice a pokožku což snižuje imunitu a celkově oslabuje tělo. Větší vlhkost podporuje plísně a může mít také negativní vliv na klouby a kosti. Vhodným poměrem zateplení, topení a větrání můžeme dosáhnout zdravé vzdušné vlhkosti v prostorech kde trávíme velké množství času (kancelář, pracovna, ložnice). Přetápěním se vzduch vysušuje, nesprávným zateplením se vzduch zvlhčuje.

Atmosférický tlak
Tak jako na nás při potápění působí tlak celého vodního sloupce nad námi, na souši na nás působí tlak vzduchového (vzdušného) sloupce. U moře je tedy nad námi největší vzdušný sloupec a je tedy i nejvyšší tlak. Tento tlak vzduchu (atmosféry) se ale mění vlivem proudění vzduchu. Např. při přicházející bouřce většinou atmosférický tlak klesá. Čím výraznější pokles tlaku, tím větší změna teploty, silnější vítr a větší srážky nás můžou zastihnout – týká se ale větší plochy a záleží kam přesně oblačnost doletí.

Změna atmosférického tlaku může mít vliv na kondici člověka. Někteří lidé také říkají, že tlak vnímají a dokáží předpovědět změnu počasí. Změnou venkovního (atmosférického tlaku) se nepatrně ovlivní vnitřní tlak v našem těle jenž se snaží naše tělo mírně rozpínat. U citlivějších lidí tak může dojít k jakémusi vnímání porušeným nervovým zakončením. Spolehnout se na toto ale nelze. Prudké změny tlaku však mohou mít vliv na kondici člověka (krevní tlak, dýchání atd.)

Lidské tělo tedy vnímá mnoho faktorů počasí. Proto pokročilé meteostanice neměří jen teplotu. Čidla teploty se většinou instalují do stínu nebo pod radiační štít dále od staveb aby nedocházelo k jejich ovlivnění. Je domluvena výška 2m nad zemí (přibližná poloha lidské hlavy). Vítr se měří v 10m nad zemí (avšak amatérské meteostanice většinou nejsou na tak vysokých stožárech). I když nám meteostanice dokáží udat hodně veličin pro zjištění „jak nám bude“ při plánované aktivitě, velkou roli také hraje změna teploty a aklimatizace. Prudké ochlazení či oteplení může organismus velmi vyčerpat (záleží na zdraví a tukových zásobách). Např. při rychlém nástupu léta se člověk může cítit unavený (nárůst venkovní teploty o +30°C člověk zvládá bez potíží až za cca 30 – 60 dnů).


Vitamíny a minerály

Read more »