M5stick ADC HAT ADS1100

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ů.

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

Další podobné články