Arduino Pro Mini + токовый датчик GY-712
 Всем привет. Хочу поделится одним из проектов созданным на базе Arduino Pro Mini.
Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.

Arduino Pro Mini + токовый датчик GY-712

 Если вам уже интересно, тогда продолжим.
 Здесь я расскажу об одном модуле, так как описывать и зарисовывать 7 модулей не очень-то и легко.
 Было тех задание:
1) Лампы(фонари) 50-65ВТ 220В переменка или 24В постоянка;
2) Индикация работы лампы (светодиод на панели);
3) Звуковая индикация перегоревшей лампы.
 Решение было принято такое — используем токовый датчик GY-712 5А

Arduino Pro Mini + токовый датчик GY-712

По причинам:
1) Меряет переменный и постоянный ток;
2) Легко подключается к контроллеру Arduino Pro Mini;
3) Компактный;
4) Недорогой при заказе с Китая.
Давайте посмотрим на схему:

Arduino Pro Mini + токовый датчик GY-712

Как работает программа.
  При старте он проверяется, включен ли тумблер, если включен ты выдается звуковой сигнал и световая индикация, что бы датчик можно было откалибровать без нагрузки. Если тумблер выключить то прога выдаст звук + индикация.
 Далее идет калибровка. После калибровки – звуковой сигнал.
 И стартует основная программа. Контроль тумблера, если включен то контроль тока нагрузки лампы, если ток выше заданного порога то включить индикацию если тока нет, то выключить индикацию и выдать звуковой сигнал.
 Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик
Arduino Pro Mini + токовый датчик GY-712.
 Фото тестов:

Arduino Pro Mini + токовый датчик GY-712 Arduino Pro Mini + токовый датчик GY-712

Этим проектом всё не закончилось, далее поступил заказ на очередное устройство с корректировкой техзадания(напряжения,токи). Всё это Вы можете увидеть во втором Видео ролике(лайф канал).

 

 

 Пример IDE1.5.2:

float srab = 0.650;
const int currentPin1 = 0; // Аналоговый вход с датчика тока
const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
//const int adc_zero = 512; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
int adc_zero1; //Переменная автоматической калибровки
float first;
void setup()
{
 pinMode(13, OUTPUT);// Пин индикатора 
 pinMode(12, OUTPUT); // пин звука
 pinMode(2, INPUT); // пин входа реле (тумблер)
 digitalWrite(13, LOW); 
 digitalWrite(12, LOW);
while(digitalRead(2)==0 ) { // Если включен тумблер то выдать звуковой и световой сигнал пока не отключат для возможности калибровки
 tone(12,2000,500);
 digitalWrite(13, HIGH);
 delay(500);
 digitalWrite(13, LOW);
 delay(500);
 }
 tone(12,1500,100); // Звук старта калибровки
 delay(180);
 tone(12,1500,100);
 delay(180);
 tone(12,1500,100);

//Serial.begin(9600);
 adc_zero1 = determineVQ(currentPin1); //Quiscent output voltage — the average voltage ACS712 shows with no load (0 A)
 digitalWrite(13, HIGH);
 tone(12,1000,100);
 delay(150);
 digitalWrite(13, LOW);
}

void loop(){
// Serial.print(«ACS712@A2_1:»);Serial.print(readCurrent(currentPin1,adc_zero1),3);Serial.println(" mA");
 delay(300);

 if(digitalRead(2)==0){ // Если включен тумблер то:
  if (readCurrent(currentPin1,adc_zero1)> srab) // Если ток больше указанного порга сработки то:
 {
  digitalWrite(13, HIGH); // Включить индикатор
 }
else // Иначе
 {
 if(digitalRead(2)==0){ //Если тумблер все еще включен то:
 digitalWrite(13, LOW); // Погасить индикатор 
 tone(12,2000,500); } // и выдать звуковой сигнал
 }
}
else { // Иначе
digitalWrite(13, LOW); // // Погасить индикатор 
} 
//------------------------------------------------------------------------------------------------------------------------------------------------- 
delay(250);
}
int determineVQ(int PIN) {
//Serial.print(«estimating avg. quiscent voltage:»);
long VQ = 0;
//read 5000 samples to stabilise value
for (int i=0; i<5000; i++) {
VQ += analogRead(PIN);
delay(1);//depends on sampling (on filter capacitor), can be 1/80000 (80kHz) max.
}
VQ /= 5000;
//Serial.print(map(VQ, 0, 1023, 0, 5000));Serial.println(" mV");
return int(VQ);
}

float readCurrent(int PIN, int adc_zero0)
{
unsigned long currentAcc = 0;
unsigned int count = 0;
unsigned long prevMicros = micros() — sampleInterval;
while (count < numSamples)
{
if (micros() — prevMicros >= sampleInterval)
{
int adc_raw = analogRead(PIN) — adc_zero0;
currentAcc += (unsigned long)(adc_raw * adc_raw);
++count;
prevMicros += sampleInterval;
}
}
float rms = sqrt((float)currentAcc/(float)numSamples) * (75.7576 / 1024.0);
return rms;
//Serial.println(rms);
}

 

Ссылки на модули: Arduino Pro Mini , GY-712, Реле, DC-DC .

от Alex Link

4 комментария к «Arduino Pro Mini + токовый датчик GY-712 ведут контроль перегорания ламп»

Добавить комментарий

X