Модуль датчика GY-471 на микросхеме MAX471, аналоговый датчик тока, позволяет измерять ток до 3А при напряжении от 3 до 36 В .
Особенности модуля:
- Аналоговый датчик тока, усилитель сигнала встроенного шунта.
- Изменение тока на положительной шине.
- Возможно параллельное подключение нескольких датчиков для увеличения измеряемого тока
- Напряжение питания: 3 В — 36 В (Датчик не измеряет напряжение, питается от измеряемой шины)
- Максимальный ток: 3 А.
- Разрешение на аналоговом выходе: 1А/1В
Распиновка модуля:

- RS- — К выходу подключается нагрузка.
- RS+ — К выходу подключается источник питания.
- SIGN — Логический выход с открытым коллектором, состояние выхода указывает в какую сторону течет ток, низкий уровень означает что ток течет от RS- к RS+.
- OUT — Аналоговый выход, на выходе формируется напряжение в зависимости от величины протираемого тока, 1 вольт на выходе соответствует 1 амперу через шунт.
- GND — Масса.
Подключение к Arduino:


Датчик подключается на любой аналоговый вход ардуино.
Софт:
Для модуля не требуется сторонних библиотек, принцип работы аналогичен измерению напряжения на аналоговом входе. Можно воспользоваться стандартным примером, который не дает точных измерений.
/* ReadAnalogVoltage Reads an analog input on pin 0, converts it to voltage, and prints the result to the Serial Monitor. Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu). Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. http://www.arduino.cc/en/Tutorial/ReadAnalogVoltage */ // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): float current = sensorValue * (5.0 / 1024.0); // print out the value you read: Serial.println(current); }
Проблема в том, что в качестве источника опорного напряжения для АЦП используется напряжение питания, которое практически не когда не является стабильным и равным 5,0 вольт. Правильным решением будет использовать встроенный источник опорного на 1,1 вольт (для ATmega328), но в данном случаи диапазон измерений будет ограничен 1,1 А.
void setup() { Serial.begin(9600); analogReference(INTERNAL); } void loop() { float current = (analogRead(A0) * 1.1) / 1024.0; Serial.println(current); }
Если это не подходит, можно воспользоваться внешним источником опорного, например MAX6125 на 2,5 В.