Pro M5stick jednotky lze zakoupit různé rozšiřovací moduly, kdy pro měření analogových signálů můžeme použít například tento ADC HAT. Tento modul obsahuje obvod ADS1100, který umožňuje měřit signály o velikosti 0-12 Voltů a s rozlišením 16 bitů.

M5stick ADC HAT ADS1100

Pro jeho spojení s M5stick deskou stačí propojit 4 vodiče. Připojíme GND s GND, VCC s pinem 5V a datové piny s I2C sběrnicí. U M5stick-C modulu pak stačí použít existující pinovou lištu a jednoduše propojit modul se senzorem.

Ukázkový program najdete níže, přičemž jeho popis můžete najít na videu, které je připojeno na konci návodu. Je v něm uvedena ukázka měření napětí 0-5 Voltů díky připojenému potenciometru:

// M5 stick a jednotka ADC
// Analogově-digitální převodník
// navody.dratek.cz

// připojení potřebných knihoven
#include <M5StickC.h>
#include <Wire.h>
#include "ADS1100.h"
// vytvoření objektu ads z knihovny
ADS1100 ads;
// nastavení konstant pro měření
#define REF_VOL    3.3
#define ADC_BASE   REF_VOL/32768

void setup(void) {
  // zahájení komunikace s M5 stick jednotkou
  M5.begin();
  // zahájení komunikace po sériové lince
  Serial.begin(115200);
  // vymazání obsahu displeje a nastavení oranžové barvy pro text
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextColor(ORANGE);
  // nastavení I2C adresy pro ADS modul, výchozí je 0x48
  ads.getAddr_ADS1100(ADS1100_DEFAULT_ADDRESS);
  // nastavení zesílení
  ads.setGain(GAIN_ONE);          // 1x gain(default)
  // ads.setGain(GAIN_TWO);       // 2x gain
  // ads.setGain(GAIN_FOUR);      // 4x gain
  // ads.setGain(GAIN_EIGHT);     // 8x gain

  // nastavení měřícího režimu
  ads.setMode(MODE_CONTIN);       // Průběžné měření (default)
  // ads.setMode(MODE_SINGLE);    // Mód jednorázového měření

  // nastavení počtu měření za sekundu (SPS)
  ads.setRate(RATE_8);
  // ads.setRate(RATE_16);
  // ads.setRate(RATE_32);
  // ads.setRate(RATE_128);

  // nastartování měření
  ads.setOSMode(OSMODE_SINGLE);
  ads.begin();
}

void loop(void) {
  // proměnné pro kontrolu připojeného modulu
  byte error;
  // otestování komunikace s I2C modulem
  Wire.beginTransmission(ads.ads_i2cAddress);
  error = Wire.endTransmission();
  // při vrácení hodnoty 0 je připojen I2C modul
  if (error == 0) {
    // proměnné pro uložení výsledků
    int16_t result, vol;
    float temp;
    Serial.println("Zahajeni diferencialniho mereni s ADS1100");
    Serial.println(" ");
    // načtení výsledku měření
    result = ads.Measure_Differential();
    Serial.print("Digitalni hodnota mezi kanaly 0 a 1: ");
    Serial.println(result);
    M5.Lcd.fillScreen(BLACK);
    // proměnná pro výpis dat na displej
    char data[20] = { 0 };
    // uložení výsledku ve formě celého čísla
    sprintf(data, "%d", result);
    // přepočet načtené hodnoty na napětí
    temp = result * ADC_BASE * 4;
    vol = temp * 1000;
    // výpis dat na displej M5 stick
    M5.Lcd.drawCentreString("Raw data ", 0, 10, 2);
    M5.Lcd.drawCentreString(data, 0, 30, 4);
    sprintf(data, "%d", vol);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.drawCentreString("Vysledek ", 0, 90, 2);
    M5.Lcd.drawCentreString(data, 0, 110, 4);

    M5.Lcd.drawCentreString("mV", 70, 110, 2);

    Serial.println(" ");
    Serial.println("        ***************************        ");
    Serial.println(" ");
  }
  else {
    Serial.println("ADS1100 neni pripojen!");
    Serial.println(" ");
    Serial.println("        ************        ");
    Serial.println(" ");
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
    M5.Lcd.drawString("Modul nenalezen.", 0, 20, 2);
  }
  // krátká pauza před novým měřením
  delay(300);
}

Sestřih ze streamu:

Celý záznam:

Na eshopu můžete tento M5stack modul zakoupit zde:
https://dratek.cz/arduino/20761-m5stickc-esp32-pico-iot-vyvojovy-kit.html
https://dratek.cz/arduino/20943-m5stickc-adc-hat-ads1100.html

FB tw

Další podobné články