Toto je starší verze dokumentu!
Obsah
Podpora pro projekty s Arduinem
Základní informace o Arduinu
používáme moduly Arduino Nano (které jsou fyzicky větší než Arduino Mini Pro)
http://arduino.cc
http://arduino.cc/en/Main/Boards
http://arduino.cc/en/Main/ArduinoBoardUno
http://arduino.cc/en/Main/ArduinoBoardNano
vývojové prostředí je k dipozici na adrese https://www.arduino.cc/en/Main/Software
Moduly původem z Číny používají USB-UART převodník CH340G, ovladač pro Windows lze stáhnout zde (verze 3.6.2021.12), případně na stránkách výrobce převodníku http://www.wch-ic.com/downloads/CH341SER_ZIP.html (anglická jazyková mutace stránek) a http://www.wch.cn/downloads/CH341SER_ZIP.html (čínská jazyková mutace; pozn. 02/2022 verze ovladače na čínských stránkách nemusí být vždy stejná jako na anglických, aktuálně je nejnovější verze pouze na čínských stránkách)
Oživení a ověření základní funkčnosti
Blikání LED
Seriová komunikace
Knihovny a příklady použití pro jednotlivé moduly
seznam dostupných modulů https://docs.google.com/spreadsheets/d/1eXgFiZbOv-FYLSS8f-wMkrtQ7ab7YqBjkbKZQvYHOg0/edit?usp=sharing
pozn.: pro zobrazení obsahu je třeba přihlášení přístupovými údaji ČVUT
BMP280
- Senzor barometrického tlaku a teploty
- Komunikace přes I2C, nebo SPI
» Více informací «
VL53L0X
- Time-of-Flight senzor vzdálenosti
- Měření IR laserem 1. třídy
- Komunikace přes I2C
- Programovatelný digitální výstup GPIO1
- XSHUT shutdown pin pro řízení spotřeby a reset senzoru
- Napájení 2.6 - 3.5V
- Měření až do 2m
Adafruit_VL53L0X
Data sheet
Dokumentace API
VL53L0X | ARDUINO | ESP32 | |
---|---|---|---|
I2C | SDA | A4 | GPIO21 |
SCL | A5 | GPIO22 | |
Volitelné1) | XSHUT | LIBOVOLNÝ | |
GPIO1 | LIBOVOLNÝ |
Senzoru lze přidělit vlastní I2C adresu. To umožňuje používání více těchto senzorů na jedné I2C sběrnici.
3 režimy měření:
- Jednotlivé - Po naměření jedné hodnoty přejde do SW standby
- Stálé - Po dokončení jednoho měření se spustí další
- Stálé s časováním - Stálé měření v nastaveném intervalu
4 profily:
Knihovna obsahuje:
begin(i2c_addr, debug, TwoWire, vl_config); - i2c_addr
- nová adresa, debug
- true/false, TwoWire
- &Wire, vl_config
- profily
getSingleRangingMeasurement(pRangingMeasurementData, debug); - pRangingMeasurementData
- proměnná pro uložení dat, debug
- true/false
RangeStatus
- stav [uint8_t]
RangeMilliMeter
- vzdálenost [mm]
- VL53L0X.ino
#include "Adafruit_VL53L0X.h" // Kód je psaný pro verzi knihovny 1.2.2 Adafruit_VL53L0X lox = Adafruit_VL53L0X(); void setup() { Serial.begin(9600); Serial.println("\nVL53L0X test"); if (!lox.begin(0x30, false, &Wire, Adafruit_VL53L0X::VL53L0X_SENSE_DEFAULT)) { Serial.println(F("Chyba komunikace s VL53L0X")); while (1) ; } } void loop() { VL53L0X_RangingMeasurementData_t measure; lox.getSingleRangingMeasurement(&measure, false); // 'true' pro výpis ladících dat (debug) switch (measure.RangeStatus) { // Vyhodnocení stavu case 0: Serial.print("Valid\t"); break; case 1: Serial.print("Sigma fail"); break; case 2: Serial.print("Signal fail"); break; case 3: Serial.print("Min Range Fail"); break; case 4: Serial.print("Phase Fail"); break; case 5: Serial.print("HardWare Fail"); break; case 255: Serial.print("None\t"); break; } Serial.print("\t"); Serial.print(measure.RangeMilliMeter); Serial.println(" mm"); delay(500); }
MPU-9250
- Tříosý gyroskop, akcelerometr, magnetometr
- 16-bit ADC pro každou měřenou veličinu
- Komunikace přes I2C, nebo SPI
- Napájení 2.4 - 3.6V
- Nastavitelné rozsahy pro maximální přesnost
- Nastavitelných 6 šířek pásma DLPF2)
- WOM3) režim pro nižší spotřebu
invensense-imu
Podrobná dokumentace knihovny
Data sheet
MPU9250 | ARDUINO | ESP32 | |
---|---|---|---|
I2C | SDA | A4 | GPIO21 |
SCL | A5 | GPIO22 | |
SPI | SCL | 13 | GPIO18 |
AD0 | 12 | GPIO19 | |
SDA | 11 | GPIO23 | |
NCS | LIBOVOLNÝ | ||
Volitelné4) | INT | LIBOVOLNÝ | |
FSYNC | LIBOVOLNÝ |
I2C adresa senzoru se nastavuje logickou úrovní na pinu AD0. To umožňuje používání 2 těchto senzorů na jedné I2C sběrnici.
Funkce:
WOM
EnableWom(threshold_mg, wom_rate);
V režimu WOM senzor vyhodnocuje data z akcelerometru v nastavených intervalech5). Když pohyb přesáhne nastavenou mez6), na pinu INT se objeví logická 1.
Data Ready Interrupt
EnableDrdyInt();
Druhé využití INT pinu je signalizace nových dat
Nastavení
ConfigSrd(srd);
-
Sample Rate Divider umožňuje nastavit rychlost vzorkování
ConfigAccelRange(range);
ConfigGyroRange(range);
-
Tyto funkce umožňují nastavení rozsahu
ConfigDlpfBandwidth(dlpf);
-
Funkce umožňuje nastavení digitální dolní propusti (Digital Low Pass Filter)
4 rozsahy:
Gyroskop | Akcelerometr | Magnetometr |
---|---|---|
±250 °/s | ±2 g | ±4800 µT |
±500 °/s | ±4 g | |
±1000 °/s | ±8 g | |
±2000 °/s | ±16 g |
- MPU-9250.ino
#include "mpu9250.h" // Kód je psaný pro verzi knihovny 6.0.3 bfs::Mpu9250 imu; void SensorInterrupt() { Serial.println("Pohyb"); } void setup() { Serial.begin(115200); Serial.println("\nMPU9250 test"); Wire.begin(); // nastavení I2C: Wire.begin(SDA, SCL); Wire.setClock(400000); // rychlost I2C komunikace (400kHz) imu.Config(&Wire, bfs::Mpu9250::I2C_ADDR_PRIM); // I2C, adresa: |AD0=LOW I2C_ADDR_PRIM| |AD0=HIGH I2C_ADDR_SEC| //imu.Config(&SPI, 5); // SPI bus, CS pin if (!imu.Begin()) { // spuštění komunikace se senzorem Serial.println("CHYBA komunikace se senzorem"); while (1) {} } // práh 40mg, rychlost dat z akcelerometru 15.63Hz //imu.EnableWom(40, bfs::Mpu9250::WOM_RATE_15_63HZ); // Wake on motion //pinMode(2, INPUT); // INT pin sentoru na pinu 2 Arduina/ESP32 //attachInterrupt(2, SensorInterrupt, RISING); if (!imu.ConfigSrd(19)) Serial.println("CHYBA nastavovani SRD"); // rychlost vzorkovani[Hz] = 1000/(srd + 1) if (!imu.ConfigAccelRange(bfs::Mpu9250::ACCEL_RANGE_4G)) Serial.println("CHYBA nastavovani rozsahu akcelerometru"); if (!imu.ConfigGyroRange(bfs::Mpu9250::GYRO_RANGE_1000DPS)) Serial.println("CHYBA nastavovani rozsahu gyroskopu"); if (!imu.ConfigDlpfBandwidth(bfs::Mpu9250::DLPF_BANDWIDTH_20HZ)) Serial.println("CHYBA nastavovani DLPF"); PrintSRD(); PrintAccelRange(); PrintGyroRange(); PrintDlpfBbandwidth(); delay(5000); } void loop() { PrintData(); delay(500); } void PrintSRD() { uint8_t srd = imu.srd(); Serial.print("SRD: "); Serial.print(srd); Serial.print(" -> "); Serial.print(1000.0 / (srd + 1)); Serial.println("Hz"); } void PrintAccelRange() { Serial.print("Rozsah akcelerometru: +-"); switch (imu.accel_range()) { case 0x00: Serial.println("2g"); break; case 0x08: Serial.println("4g"); break; case 0x10: Serial.println("8g"); break; case 0x18: Serial.println("16g"); break; }; } void PrintGyroRange() { Serial.print("Rozsah gyroskopu: +-"); switch (imu.gyro_range()) { case 0x00: Serial.println("250°/s"); break; case 0x08: Serial.println("500°/s"); break; case 0x10: Serial.println("1000°/s"); break; case 0x18: Serial.println("2000°/s"); break; } } void PrintDlpfBbandwidth() { Serial.print("Sirka pasma DLPF: "); switch (imu.dlpf_bandwidth()) { case 0x01: Serial.println("184Hz"); break; case 0x02: Serial.println("92Hz"); break; case 0x03: Serial.println("41Hz"); break; case 0x04: Serial.println("20Hz"); break; case 0x05: Serial.println("10Hz"); break; case 0x06: Serial.println("5Hz"); break; }; } void PrintData() { if (imu.Read()) { Serial.println("\nimu\tmag\tacc X\tacc Y\tacc Z\tgyr X\tgyr Y\t gyr Z\tmag X\tmag Y\tmag Z\ttemp"); Serial.print(imu.new_imu_data()); Serial.print("\t"); Serial.print(imu.new_mag_data()); Serial.print("\t"); Serial.print(imu.accel_x_mps2()); Serial.print("\t"); Serial.print(imu.accel_y_mps2()); Serial.print("\t"); Serial.print(imu.accel_z_mps2()); Serial.print("\t"); Serial.print(imu.gyro_x_radps()); Serial.print("\t"); Serial.print(imu.gyro_y_radps()); Serial.print("\t"); Serial.print(imu.gyro_z_radps()); Serial.print("\t"); Serial.print(imu.mag_x_ut()); Serial.print("\t"); Serial.print(imu.mag_y_ut()); Serial.print("\t"); Serial.print(imu.mag_z_ut()); Serial.print("\t"); Serial.println(imu.die_temp_c()); } }
HTU21D(F)
- Senzor teploty a vlhkosti
- Komunikace přes I2C
- Napájení 1.5 - 3.6V
- Nastavitelné rozlišení
- Vestavěné vyhřívání pro diagnostiku
- Snímání napájecího napětí
- Nastavitelné rozlišení
SparkFun_HTU21D_Breakout_Arduino_Library
Data sheet
HTU21D | ARDUINO | ESP32 | |
---|---|---|---|
I2C | SDA | A4 | GPIO21 |
SCL | A5 | GPIO22 |
Výrobce doporučuje senzor po každém spuštění restartovat. Aktuální verze knihovny tuto funkci nenabízí, nicméně definuje příkaz SOFT_RESET. Následující kus kódu lze pro tento účel používat.
Wire.beginTransmission(HTU21D_ADDRESS); Wire.write(SOFT_RESET); Wire.endTransmission();
Knihovna obsahuje:
begin(&wirePort);
- wirePort
- I2C sběrnice
readTemperature();
- vrátí naměřenou teplotu [°C] jako float
readHumidity();
- vrátí naměřenou vlhkost [%] jako float
setResolution(resBits);
- Slouží k nastavení rozlišení pro teplotu a vlhkost
writeUserRegister(val);
- Slouží pro nastavení senzoru, val
- 8 bitů nastavení
readUserRegister();
- Slouží pro přečtení nastavení senzoru
První a poslední bit určuje nastavení rozlišení. Bit 6 indikuje napájecí napětí menší něž 2.25V (End of Battery). Bitem číslo 2 se zapíná nebo vypíná vestavěné vyhřívání. Pokud se senzor zahřeje, měl by měřit vyšší teplotu a nižší vlhkost. Díky tomu lze automaticky ověřit funkčnost senzoru. Více informací je v datasheetu na straně 13.
- HTU21D.ino
#include <Wire.h> #include "SparkFunHTU21D.h" // Kód je psaný pro verzi knihovny 1.1.3 HTU21D htu; void setup() { Serial.begin(9600); Serial.println("\nHTU21D test"); htu.begin(); // Spuštění komunikace se senzorem htuReset(); // Knihovna tuto funkci neobsahuje printInfo(); /* Zápis do registru: vypnutí OTP, změna rozlišení na 8bitů pro vlhkost a 12bitů pro teplotu */ htu.writeUserRegister(USER_REGISTER_DISABLE_OTP_RELOAD | USER_REGISTER_RESOLUTION_RH8_TEMP12); } void loop() { printInfo(); delay(1000); } void htuReset() { Wire.beginTransmission(HTU21D_ADDRESS); Wire.write(SOFT_RESET); Wire.endTransmission(); } void printInfo() { float temp = htu.readTemperature(); // Měření teploty float humd = htu.readHumidity(); // Měření vlhkosti uint8_t userReg = htu.readUserRegister(); // Načtení registru Serial.println("\n\nteplota\t\tvlhkost\t\tbattery\t\theater\t\tOTP reload\trozliseni\tregistr"); Serial.print(temp); Serial.print("°C\t\t"); Serial.print(humd); Serial.print("%\t\t"); Serial.print(userReg & USER_REGISTER_END_OF_BATTERY ? "low" : "ok"); Serial.print("\t\t"); Serial.print(userReg & USER_REGISTER_HEATER_ENABLED ? "on" : "off"); Serial.print("\t\t"); Serial.print(userReg & USER_REGISTER_DISABLE_OTP_RELOAD ? "disable" : "enable"); Serial.print("\t\t"); switch (userReg & USER_REGISTER_RESOLUTION_MASK) { // rozlišení [teplota + vlhkost] case USER_REGISTER_RESOLUTION_RH12_TEMP14: Serial.print("14 + 12\t\t"); break; case USER_REGISTER_RESOLUTION_RH8_TEMP12: Serial.print("12 + 8\t\t"); break; case USER_REGISTER_RESOLUTION_RH10_TEMP13: Serial.print("13 + 10\t\t"); break; case USER_REGISTER_RESOLUTION_RH11_TEMP11: Serial.print("11 + 11\t\t"); break; } for(int i = 7; i >= 0; i--) Serial.print(bitRead(userReg, i)); // Výpis registru }
Digitální teploměr DS18B20
Dallas Temperature Control Library http://www.milesburton.com/?title=Dallas_Temperature_Control_Library
praktické poznámky k OneWire sběrnici http://playground.arduino.cc/Learning/OneWire
příklady použití
nano_ds18b20.zip
Čidlo vlhkosti a teploty DHT11
podpora pro sensory DHT11 http://playground.arduino.cc/Main/DHT11Lib
poznámky k čidlům DHTxx http://playground.arduino.cc/Main/DHTLib
příklady použití
nano_dht.zip
Čidlo úrovně osvětlení BH1750
pozn.: modul označen GY-30
popis použití modulu BH1750 (s knihovnou BH1750) http://blog.venca-x.cz/arduino-mereni-svetelne-intenzity-s-bh1750/
popis použití modulu BH1750 (bez knihovny) http://blog.simtronyx.de/en/measurement-of-illuminance-with-a-bh1750fvi-breakout-board-gy-30-and-an-arduino-uno/
příklady použití
nano_bh1750.zip
Čidlo atmosférického tlaku BMP180
pozn.: modul označen GY-68, kompatibilní s BMP085
základní popis modulu https://laborja.wordpress.com/venta/arduino/gy-68-pressure-sensor-bmp180/
knihovna Adafruit BMP085 https://github.com/adafruit/Adafruit_BMP085_Unified
knihovna Adafruit sensors https://github.com/adafruit/Adafruit_Sensor
příklady použití:
příklad sensorapi z knihovny Adafruit BMP085
RTC DS1307
Time Library http://playground.arduino.cc/code/time
DS1307 RTC Library https://www.pjrc.com/teensy/td_libs_DS1307RTC.html
poznámky k použití Time Library http://forum.arduino.cc/index.php?topic=128928.0
poznámky k použití RTC modulu
http://uart.cz/78/obvod-realneho-casu-ds1307/
http://uart.cz/383/arduino-a-obvod-realneho-casu/
příklady použití
hodiny s knihovnou Time
RTC s knihovnou DS1307RTC
hodiny s knihovnou Time a synchronizací s RTC DS1307
LCD
knihovna LiquidCrystal https://www.arduino.cc/en/Reference/LiquidCrystal
API pro znakové displeje http://playground.arduino.cc/Code/LCDAPI
knihovny pro I2C displeje (rozcestník pro různé I2C čipy) http://playground.arduino.cc/Code/LCDi2c
podpora připojení displeje k Arduinu (rozcestník pro různé typy displejů) http://playground.arduino.cc/Code/LCD
další poznámky
http://www.instructables.com/id/I2C-LCD-Controller-the-easy-way/
http://www.geeetech.com/wiki/index.php/Serial_I2C_1602_16×2_Character_LCD_Module
https://arduino-info.wikispaces.com/LCD-Blue-I2C
příklady použití
nano_lcd_test.zip, pozn. displeje s modrým podsvícením mají adresu 0x27 (obvyklejší adresa i u jiných displejů), displeje se zeleným podsvícením mají adresu 0x3F (méně obvyklá adresa), viz https://forum.arduino.cc/index.php?topic=369998.0
SD Card
knihovna SD Library https://www.arduino.cc/en/Reference/SD
poznámky ke komunikaci s SD kartou https://www.arduino.cc/en/Reference/SDCardNotes
příklady použití
nano_sd_card.zip
Servo
"Digitalni potenciometr"- rotacni enkoder
pozn.: modul označen KY-040
https://bigdanzblog.wordpress.com/2014/08/16/using-a-ky040-rotary-encoder-with-arduino/
http://www.pjrc.com/teensy/td_libs_Encoder.html
TV výstup (kompozitní video)
knihovna TVout http://playground.arduino.cc/Main/TVout
poznámky k použití knihovny
http://robodoupe.cz/2014/arduino-a-vystup-na-tv-prijimac-2/
https://code.google.com/p/arduino-tvout/wiki/FunctionalDescription
příklady použití
nano_tv.zip
Senzory plynů MQ
Senzory plynů řady MQ
(např. MQ3 - senzor koncentrace alkoholu, MQ9 - senzor koncentrance hořlavých plynů atd.)
příklady použití
gas_sensor_mq.zip
další informace
http://playground.arduino.cc/Main/MQGasSensors
https://www.mysensors.org/build/gas
Senzor osvětlení - Flying Fish
příklady použití
flyingfishsensor.zip
další informace
https://defendtheplanet.net/2016/01/01/5v-light-detector-analog-digital-flying-fish-mh-sensor-series/
PIR Senzor
Čidlo pohybu PIR senzor
příklady použití
pir_sensor.zip
další informace
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir
http://playground.arduino.cc/Code/PIRsense
Převodníky úrovní
typické převodníky úrovní 5 V/3,3 V mohou vypadat např. jako https://www.laskarduino.cz/prevodnik-logickych-urovni-i2c-5v-na-3v/ nebo https://www.laskarduino.cz/4-kanaly-obousmerny-prevodnik-logickych-urovni-5v-a-3-3v/, běžně používané zapojení je pak uvedeno např. v https://drive.google.com/open?id=0B4B30jzMyzG8MHVzeWg0dXMwdG8
Přenos a záznam dat do PC
Arduino lze použít jako jednoduchý měřící systém k PC nebo tabletu. Na odkazu najdete program, který umožňuje číst, vizualizovat a ukládat data z Arduina. Je možné i řídít průběh měření. Komunikace s PC nebo tabletem probíhá přes USB kabel nebo BlueTooth.
Vývojové desky s WiFi rozhraním
Vývojové desky s procesorem ESP 8266 (např. desky Wemos D1 mini a NodeMCU)
instalace podpory desek s chipem ESP 8266 do Arduino IDE https://github.com/esp8266/Arduino
příklad použití
wemosd1mini_webserver.zip
Uvedený příklad použití vychází z příkladu zde. Odkazovaný příklad obsahuje kromě možnosti odesílat HTML stránku i možnost připojit se pomocí JSON a ukládat data Google scriptem do tabulky na Google Drive.
Vývojové desky s procesorem ESP-WROOM-32
instalace podpory desek s chipem ESP-WROOM-32 do Arduino IDE https://navody.arduino-shop.cz/navody-k-produktum/jednoducha-instalace-esp32-do-arduino-ide.html
pozn.: aktuální verze jádra jsou na adrese
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
původní adresu v konfiguraci Arduino IDE je potřeba přepsat, nikoli pouze doplnit novou
podpora pro práci s deskami s ESP 8266 a ESP 32
ESP Exception Decoder https://github.com/me-no-dev/EspExceptionDecoder
Další vzorové kódy
autor: Václav Langer
připraveno pro Workshop 2015, doposud neověřeno