education:arduino
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
education:arduino [2023/05/29 08:47] – [Knihovny a příklady použití pro jednotlivé moduly] simurda | education:arduino [2023/10/10 09:59] (aktuální) – [Oživení a ověření základní funkčnosti] xhavlikj | ||
---|---|---|---|
Řádek 21: | Řádek 21: | ||
=== Seriová komunikace === | === Seriová komunikace === | ||
{{: | {{: | ||
+ | |||
+ | === I2C Scanner pro Arduino Nano === | ||
+ | {{ : | ||
==== Knihovny a příklady použití pro jednotlivé moduly ==== | ==== Knihovny a příklady použití pro jednotlivé moduly ==== | ||
seznam dostupných modulů [[https:// | seznam dostupných modulů [[https:// | ||
pozn.: pro zobrazení obsahu je třeba přihlášení přístupovými údaji ČVUT | pozn.: pro zobrazení obsahu je třeba přihlášení přístupovými údaji ČVUT | ||
+ | ---- | ||
=== BMP280 === | === BMP280 === | ||
* **Senzor** barometrického **tlaku** a **teploty** | * **Senzor** barometrického **tlaku** a **teploty** | ||
* Komunikace přes **I2C**, nebo **SPI** | * Komunikace přes **I2C**, nebo **SPI** | ||
>> [[Arduino_BMP280 | Více informací]] << | >> [[Arduino_BMP280 | Více informací]] << | ||
+ | | ||
+ | === BMP180 === | ||
+ | * **Senzor** barometrického **tlaku** a **teploty** | ||
+ | * Komunikace přes **I2C** | ||
+ | >> [[Arduino_BMP180 | Více informací]] << | ||
=== VL53L0X === | === VL53L0X === | ||
* Time-of-Flight **senzor vzdálenosti** | * Time-of-Flight **senzor vzdálenosti** | ||
- | * Měření IR laserem 1. třídy | ||
* Komunikace přes **I2C** | * Komunikace přes **I2C** | ||
- | | + | |
- | * XSHUT shutdown pin pro řízení spotřeby a reset senzoru | + | |
- | * Napájení **2.6 - 3.5V** | + | |
- | * Měření **až do 2m** | + | |
- | + | ||
- | [[https:// | + | |
- | [[https:// | + | |
- | [[https:// | + | |
- | + | ||
- | | ^ VL53L0X ^ ARDUINO ^ ESP32 ^ | + | |
- | ^ I2C | SDA | A4 |GPIO21 | | + | |
- | ^ ::: | SCL | A5 |GPIO22 | | + | |
- | ^ Volitelné((Není nutné zapojovat)) | 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: == | + | |
- | - [[https:// | + | |
- | - [[https:// | + | |
- | - [[https:// | + | |
- | - [[https:// | + | |
- | + | ||
- | Knihovna obsahuje: | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | + | ||
- | <file cpp VL53L0X.ino> | + | |
- | #include " | + | |
- | + | ||
- | Adafruit_VL53L0X lox = Adafruit_VL53L0X(); | + | |
- | + | ||
- | void setup() { | + | |
- | Serial.begin(9600); | + | |
- | Serial.println(" | + | |
- | + | ||
- | if (!lox.begin(0x30, | + | |
- | Serial.println(F(" | + | |
- | while (1) ; | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | VL53L0X_RangingMeasurementData_t measure; | + | |
- | + | ||
- | lox.getSingleRangingMeasurement(& | + | |
- | + | ||
- | switch (measure.RangeStatus) { // Vyhodnocení stavu | + | |
- | case 0: Serial.print(" | + | |
- | case 1: Serial.print(" | + | |
- | case 2: Serial.print(" | + | |
- | case 3: Serial.print(" | + | |
- | case 4: Serial.print(" | + | |
- | case 5: Serial.print(" | + | |
- | case 255: Serial.print(" | + | |
- | } | + | |
- | Serial.print(" | + | |
- | Serial.print(measure.RangeMilliMeter); | + | |
- | + | ||
- | delay(500); | + | |
- | } | + | |
- | </file> | + | |
=== MPU-9250 === | === MPU-9250 === | ||
* Tříosý **gyroskop**, | * Tříosý **gyroskop**, | ||
- | * 16-bit ADC pro každou měřenou veličinu | ||
* Komunikace přes **I2C**, nebo **SPI** | * Komunikace přes **I2C**, nebo **SPI** | ||
- | | + | |
- | * Nastavitelné rozsahy pro maximální přesnost | + | |
- | * Nastavitelných | + | |
- | * WOM((Wake-On-Motion)) režim pro nižší spotřebu | + | |
- | + | ||
- | [[https:// | + | |
- | [[https:// | + | |
- | [[https:// | + | |
- | + | ||
- | | ^ MPU9250 | + | |
- | ^ I2C | SDA | A4 | GPIO21 | + | |
- | ^ ::: | SCL | A5 | GPIO22 | + | |
- | ^ SPI | SCL | 13 | GPIO18 | + | |
- | ^ ::: | AD0 | 12 | GPIO19 | + | |
- | ^ ::: | SDA | 11 | GPIO23 | + | |
- | ^ ::: | NCS | LIBOVOLNÝ | + | |
- | ^ Volitelné((Není nutné zapojovat)) | 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**\\ | + | |
- | '' | + | |
- | V režimu WOM senzor vyhodnocuje data z akcelerometru v nastavených intervalech((wom_rate)). Když pohyb přesáhne nastavenou mez((threshold_mg)), | + | |
- | \\ | + | |
- | **Data Ready Interrupt**\\ | + | |
- | '' | + | |
- | Druhé využití INT pinu je signalizace nových dat\\ | + | |
- | \\ | + | |
- | **Nastavení**\\ | + | |
- | '' | + | |
- | Sample Rate Divider umožňuje nastavit rychlost vzorkování\\ | + | |
- | '' | + | |
- | '' | + | |
- | Tyto funkce umožňují nastavení rozsahu\\ | + | |
- | '' | + | |
- | Funkce umožňuje nastavení digitální dolní propusti (Digital Low Pass Filter)\\ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | == 4 rozsahy: == | + | |
- | ^ [[https:// | + | |
- | | ±250 °/s | ±2 g | ±4800 µT | | + | |
- | | ±500 °/s | ±4 g | ::: | | + | |
- | | ±1000 °/s | ±8 g | ::: | | + | |
- | | ±2000 °/s | ±16 g | ::: | | + | |
- | + | ||
- | <file cpp MPU-9250.ino> | + | |
- | #include " | + | |
- | + | ||
- | bfs:: | + | |
- | + | ||
- | void SensorInterrupt() { | + | |
- | Serial.println(" | + | |
- | } | + | |
- | + | ||
- | void setup() { | + | |
- | Serial.begin(115200); | + | |
- | Serial.println(" | + | |
- | + | ||
- | Wire.begin(); | + | |
- | Wire.setClock(400000); | + | |
- | imu.Config(& | + | |
- | // | + | |
- | + | ||
- | if (!imu.Begin()) { // spuštění komunikace se senzorem | + | |
- | Serial.println(" | + | |
- | while (1) {} | + | |
- | } | + | |
- | + | ||
- | // práh 40mg, rychlost dat z akcelerometru 15.63Hz | + | |
- | // | + | |
- | // | + | |
- | // | + | |
- | + | ||
- | if (!imu.ConfigSrd(19)) Serial.println(" | + | |
- | if (!imu.ConfigAccelRange(bfs:: | + | |
- | if (!imu.ConfigGyroRange(bfs:: | + | |
- | if (!imu.ConfigDlpfBandwidth(bfs:: | + | |
- | + | ||
- | PrintSRD(); | + | |
- | PrintAccelRange(); | + | |
- | PrintGyroRange(); | + | |
- | PrintDlpfBbandwidth(); | + | |
- | delay(5000); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | PrintData(); | + | |
- | delay(500); | + | |
- | } | + | |
- | + | ||
- | void PrintSRD() { | + | |
- | uint8_t srd = imu.srd(); | + | |
- | Serial.print(" | + | |
- | Serial.print(srd); | + | |
- | Serial.print(" | + | |
- | Serial.print(1000.0 / (srd + 1)); | + | |
- | Serial.println(" | + | |
- | } | + | |
- | + | ||
- | void PrintAccelRange() { | + | |
- | Serial.print(" | + | |
- | switch (imu.accel_range()) { | + | |
- | case 0x00: Serial.println(" | + | |
- | case 0x08: Serial.println(" | + | |
- | case 0x10: Serial.println(" | + | |
- | case 0x18: Serial.println(" | + | |
- | }; | + | |
- | } | + | |
- | + | ||
- | void PrintGyroRange() { | + | |
- | Serial.print(" | + | |
- | switch (imu.gyro_range()) { | + | |
- | case 0x00: Serial.println(" | + | |
- | case 0x08: Serial.println(" | + | |
- | case 0x10: Serial.println(" | + | |
- | case 0x18: Serial.println(" | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void PrintDlpfBbandwidth() { | + | |
- | Serial.print(" | + | |
- | switch (imu.dlpf_bandwidth()) { | + | |
- | case 0x01: Serial.println(" | + | |
- | case 0x02: Serial.println(" | + | |
- | case 0x03: Serial.println(" | + | |
- | case 0x04: Serial.println(" | + | |
- | case 0x05: Serial.println(" | + | |
- | case 0x06: Serial.println(" | + | |
- | }; | + | |
- | } | + | |
- | + | ||
- | void PrintData() { | + | |
- | if (imu.Read()) { | + | |
- | Serial.println(" | + | |
- | Serial.print(imu.new_imu_data()); | + | |
- | Serial.print(imu.new_mag_data()); | + | |
- | Serial.print(imu.accel_x_mps2()); | + | |
- | Serial.print(imu.accel_y_mps2()); | + | |
- | Serial.print(imu.accel_z_mps2()); | + | |
- | Serial.print(imu.gyro_x_radps()); | + | |
- | Serial.print(imu.gyro_y_radps()); | + | |
- | Serial.print(imu.gyro_z_radps()); | + | |
- | Serial.print(imu.mag_x_ut()); | + | |
- | Serial.print(imu.mag_y_ut()); | + | |
- | Serial.print(imu.mag_z_ut()); | + | |
- | Serial.println(imu.die_temp_c()); | + | |
- | } | + | |
- | } | + | |
- | </file> | + | |
=== HTU21D(F) === | === HTU21D(F) === | ||
* **Senzor teploty a vlhkosti** | * **Senzor teploty a vlhkosti** | ||
* Komunikace přes **I2C** | * Komunikace přes **I2C** | ||
- | | + | |
- | * Nastavitelné rozlišení | + | |
- | * Vestavěné vyhřívání pro diagnostiku | + | |
- | * Snímání napájecího napětí | + | |
- | * Nastavitelné rozlišení | + | |
- | [[https:// | + | === MLX90614(DAA) === |
- | [[https:// | + | |
- | + | | |
- | | ^ HTU21D | + | >> [[Arduino_MLX90614 |
- | ^ I2C | SDA | A4 |GPIO21 | | + | |
- | ^ ::: | SCL | A5 |GPIO22 | | + | === BH1750 === |
- | + | * **Senzor intenzity osvětlení** | |
- | Výrobce doporučuje senzor po každém spuštění restartovat. Aktuální verze knihovny tuto funkci nenabízí, nicméně definuje | + | * Komunikace přes **I2C** |
- | <code> | + | |
- | Wire.beginTransmission(HTU21D_ADDRESS); | + | |
- | Wire.write(SOFT_RESET); | + | === HMC5883L === |
- | Wire.endTransmission(); | + | * Tříosý **magnetometr** |
- | </code> | + | |
- | + | | |
- | Knihovna obsahuje: | + | |
- | '' | + | === DHT22 === |
- | '' | + | * **Čidlo |
- | '' | + | |
- | '' | + | >> [[Arduino_DHT22 | Více informací]] << |
- | '' | + | |
- | '' | + | === DHT11 === |
- | + | * **Čidlo | |
- | První a poslední bit určuje nastavení rozlišení. | + | * ±2°C ±5% |
- | 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. | + | |
- | + | === DS18B20 | |
- | ^ ROZLIŠENÍ | + | * Digitální **teploměr** |
- | | __Teplota__ | + | * ±0.4°C |
- | | [[https:// | + | >> |
- | | [[https:// | + | |
- | | [[https:// | + | |
- | | [[https:// | + | |
- | + | ||
- | + | ||
- | <file cpp HTU21D.ino> | + | |
- | # | + | |
- | #include " | + | |
- | + | ||
- | HTU21D htu; | + | |
- | + | ||
- | void setup() { | + | |
- | | + | |
- | | + | |
- | | + | |
- | htuReset(); | + | |
- | 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(); | + | |
- | float humd = htu.readHumidity(); | + | |
- | | + | |
- | + | ||
- | Serial.println(" | + | |
- | Serial.print(temp); | + | |
- | Serial.print(humd); | + | |
- | | + | |
- | Serial.print(userReg & USER_REGISTER_HEATER_ENABLED ? " | + | |
- | Serial.print(userReg & USER_REGISTER_DISABLE_OTP_RELOAD | + | |
- | switch (userReg & USER_REGISTER_RESOLUTION_MASK) { // rozlišení [teplota + vlhkost] | + | |
- | case USER_REGISTER_RESOLUTION_RH12_TEMP14: | + | |
- | case USER_REGISTER_RESOLUTION_RH8_TEMP12: | + | |
- | case USER_REGISTER_RESOLUTION_RH10_TEMP13: | + | |
- | case USER_REGISTER_RESOLUTION_RH11_TEMP11: | + | |
- | } | + | |
- | for(int i = 7; i >= 0; i--) Serial.print(bitRead(userReg, | + | |
- | } | + | |
- | </file> | + | |
- | + | ||
- | + | ||
- | === Digitální teploměr DS18B20 === | + | |
- | Dallas Temperature Control Library | + | |
- | praktické poznámky k OneWire sběrnici [[http:// | + | |
- | + | ||
- | příklady použití\\ | + | |
- | {{: | + | |
- | + | ||
- | === Čidlo vlhkosti a teploty | + | |
- | podpora pro sensory DHT11 [[http:// | + | |
- | poznámky k čidlům DHTxx [[http:// | + | |
- | + | ||
- | příklady použití\\ | + | |
- | {{: | + | |
- | + | ||
- | + | ||
- | === Čidlo | + | |
- | pozn.: modul označen GY-30\\ | + | |
- | popis použití modulu BH1750 (s knihovnou BH1750) | + | |
- | popis použití modulu BH1750 (bez knihovny) [[http:// | + | |
- | + | ||
- | příklady použití\\ | + | |
- | {{: | + | |
- | + | ||
- | === Čidlo atmosférického tlaku BMP180 | + | |
- | pozn.: modul označen GY-68, kompatibilní s BMP085\\ | + | |
- | základní popis modulu [[https:// | + | |
- | knihovna Adafruit BMP085 | + | |
- | knihovna Adafruit sensors [[https:// | + | |
- | + | ||
- | příklady použití: | + | |
- | příklad sensorapi z knihovny Adafruit BMP085 | + | |
=== RTC DS1307 === | === RTC DS1307 === | ||
Řádek 475: | Řádek 175: | ||
==== Přenos a záznam dat do PC ==== | ==== Přenos a záznam dat do PC ==== | ||
- | Arduino lze použít jako jednoduchý měřící systém k PC nebo tabletu. Na [[http:// | + | Arduino lze použít jako jednoduchý měřící systém k PC nebo tabletu. Na [[http:// |
==== Vývojové desky s WiFi rozhraním ==== | ==== Vývojové desky s WiFi rozhraním ==== |
education/arduino.1685342835.txt.gz · Poslední úprava: 2023/08/18 12:36 (upraveno mimo DokuWiki)