Электронный компонент:Grove-адаптер для плат Xadow
Черновик |
Grove-адаптер для плат Xadow[1]
Этот адаптер конвертирует данные Grove-порта в данные Xadow-порта, чтобы создать совместимость между Grove-модулями и платами Xadow. Сигнал от двух аналоговых Grove-портов идет через АЦП на Xadow-порт с интерфейсом I2C. Сигнал от Grove-порта с интерфейсом I2C идет напрямую и без конвертации на Xadow-порт с интерфейсом I2C. Аналогового-цифровое преобразование выполняется при помощи 12-битного АЦП ADCC121C021.
Купить Grove-адаптер для плат Xadow можно по этой ссылке.
Характеристики
- Рабочее напряжение – 3.3 вольта
- Разрешение аналогового-цифрового преобразователя – 12 бит
- Частота дискретизации – 188.9 Гц
- I2C-адрес – можно менять
- Размеры – 25.43 мм х 20.35 мм
Демо-проекты
Здесь мы покажем несколько примеров того, как считывать данные с Grove-модулей при помощи Grove-адаптера для плат Xadow.
Считывание аналогового сигнала
Чтобы прочесть аналоговый сигнал, идущий от Grove-модуля, вам нужно подключить Grove-модуль к аналоговому Grove-порту на Grove-адаптере. Всего их два, и они помочены надписями «A0» и «A1».
Все устройства должны быть подключены друг к другу следующим образом:
В данном случае Grove-модуль с датчиком газа подключен к Grove-порту A0, поэтому в тестовом коде нужно будет указать I2C-адрес 0x58 (это I2C-адрес порта A0 по умолчанию). Если бы датчик газа был подключен к Grove-порту A1, нужно было бы использовать I2C-адрес 0x59 (это I2C-адрес порта A1 по умолчанию).
Вот тестовый код:
#include <Wire.h>
#include <Streaming.h>
#define ADDR_ADC121 0x58
#define V_REF 3.00
#define REG_ADDR_RESULT 0x00
#define REG_ADDR_ALERT 0x01
#define REG_ADDR_CONFIG 0x02
#define REG_ADDR_LIMITL 0x03
#define REG_ADDR_LIMITH 0x04
#define REG_ADDR_HYST 0x05
#define REG_ADDR_CONVL 0x06
#define REG_ADDR_CONVH 0x07
unsigned int getData;
float analogVal=0; // конвертация
void init_adc()
{
Wire.beginTransmission(ADDR_ADC121); // начинаем передачу
// данных на устройство
Wire.write(REG_ADDR_CONFIG); // регистр настроек
Wire.write(0x20);
Wire.endTransmission();
}
void read_adc() //unsigned int *data
{
Wire.beginTransmission(ADDR_ADC121); // начинаем передачу
// данных на устройство
Wire.write(REG_ADDR_RESULT); // получаем результат
Wire.endTransmission();
Wire.requestFrom(ADDR_ADC121, 2); // запрашиваем два байта
// у устройства
delay(1);
if(Wire.available()<=2)
{
getData = (Wire.read()&0x0f)<<8;
getData |= Wire.read();
}
Serial.print("getData:"); // "Получили данные:"
Serial.println(getData);
delay(5);
Serial.print("The analog value is:"); // "Аналоговое значение:"
Serial.print(getData*V_REF*2/4096);
Serial.println("V");
}
void setup()
{
Serial.begin(9600);
Wire.begin();
init_adc();
}
void loop()
{
read_adc(); //adcRead);
delay(50);
}
Загрузите этот код на главную плату Xadow, а затем откройте монитор порта, чтобы увидеть результат.
Измерение I2C-сигнала
Если Grove-модуль передает данные через I2C, его нужно подключить к Grove-порту с интерфейсом I2C на Grove-адаптере для плат Xadow. В этом случае Grove-адаптер будет передавать данные на Xadow-порт с интерфейсом I2C, минуя АЦП. Ниже показан пример считывания I2C-данных с Grove-модуля с цифровым датчиком света.
Устройства должны быть подключены друг к другу вот так:
Теперь загрузите с GitHub библиотеку «Grove Digital Light Sensor» и установите ее в IDE Arduino. О том, как устанавливать новые библиотеки в IDE Arduino, читайте здесь или здесь. Установив библиотеку, откройте в IDE Arduino вот этот код:
/* Демонстрационный скетч v1.0 для цифрового датчика света
*
* Подключите датчик к I2C-порту на Arduino.
*
* By:http://www.seeedstudio.com
*/
#include <Wire.h>;
#include <Digital_Light_TSL2561.h>;
void setup()
{
Wire.begin();
Serial.begin(9600);
TSL2561.init();
}
void loop()
{
unsigned long Lux;
TSL2561.getLux();
Serial.print("The Light value is: "); // "Яркость: "
Serial.println(TSL2561.calculateLux(0,0,1));
delay(1000);
}
Откройте монитор порта, чтобы увидеть считанное значение яркости (в люксах). Попробуйте искусственно изменить освещение в комнате – в результате данные в мониторе порта тоже должны измениться.
Чип ADC121C021 – это тот же АЦП, который используется в Grove-модуле с АЦП с интерфейсом I2C. Способ изменения I2C-адреса тот же. О том, как изменить I2C-адрес, читайте в этой статье в разделе «Reference». На Grove-адаптере изменение I2C-адреса выполняется с помощью 4 перемычек, находящихся на лицевой стороне – «0», «1», «2» и «3». Перемычки «0» и «1» предназначены для порта A0, а «2» и «3» – для порта A1.