LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
SoM / SBC

[PRZYKŁAD] Moduł z czujnikiem natężenia prądu oraz KAmduino UNO

Teraz można przejść do napisania programu, który na początku będzie załączał przekaźnik, co w rezultacie spowoduje uruchomienie silnika. Następnie kod mierzy wartość analogową na pinie A0 połączonym z wyjściem czujnika. Odczyt z przetwornika cyfrowo-analogowego jest przeliczana na mV, a następnie na prąd w mA. Obliczony prąd porównywany jest z wartością progową, a po jej przekroczeniu przekaźnik zostanie odłączony, co spowoduje zatrzymanie silnika. Aby silnik pracował ponownie potrzebny jest restart programu na płytce KAmduino UNO (pełen kod programu znajduje się na końcu artykułu, w sekcji Do pobrania).

Na początku programu zadeklarowano niezbędne zmienne, które będą przechowywać informacje o wartości odczytanej z portu A0, napięciu w mV oraz natężeniu w mA.

// [PRZYKŁAD] Moduł z czujnikiem natężenia prądu oraz KAmduino UNO
// Autor: Patryk Mądry 
// Mikrokontroler 2017-2018 r.

// Zmienne
int mVperAmp = 185; // dla modułu 20A - 100, dla modułu 30A - 66
int Wartosc_analogowa= 0; // 
int ACSoffset = 2472;
float  napiecie = 0;
double natezenie= 0;
double srednie_natezenie =0;

Następnie w funkcji konfiguracyjnej setup() ustawiono prędkość portu szeregowego, rolę pinu do sterowania przekaźnikiem (pin 3 ustawiony jako wyjście) oraz  stan wysoki na tym pinie, co uruchomi pracę silnika.

void setup() 
{
   Serial.begin(9600);
   pinMode(3, OUTPUT);
   digitalWrite(3,HIGH);
}

W pętli głównej loop() odczytywana jest wartość na pinie A0, a następnie jest przeliczana na napięcie w mV, oraz natężenie prądu przepływającego przez sensor wyrażone w mA. Wartość ta jest wyświetlana w monitorze portu szeregowego.

void loop() {

Wartosc_analogowa = analogRead(A0);
napiecie = (Wartosc_analogowa / 1024.0) * 5000; // napięcie w mV
natezenie = ((napiecie - ACSoffset) / mVperAmp)*1000; // natężenie w mA

Serial.println(natezenie);

Po skompilowaniu i uruchomieniu programu należy otworzyć Kreślarkę (Crtl+Shift+L). Teraz zatrzymując wał silnika można zobaczyć podobny wykres.

Rysunek 5. Wykres natężenia od czasu – bez filtracji 

Na rysunku 5 wyraźnie widać, w którym momencie silnik pobierał więcej prądu. Sygnał jest jednak mocno zaszumiony, ale można temu zapobiegać stosując proste uśrednianie wyników. Wystarczy w pętli for sumować 10 kolejnych pomiarów natężenia prądu, a następnie wypisywać na ekran wartość średnią.

void loop() {

  srednie_natezenie = 0;
  for(int i=0;i<=100;i++)
  {
     Wartosc_analogowa = analogRead(A0);
     napiecie = (Wartosc_analogowa / 1024.0) * 5000; // napięcie w mV
     natezenie = ((napiecie - ACSoffset) / mVperAmp)*1000; // natężenie w mA

     srednie_natezenie =  srednie_natezenie+ natezenie;

     delay(1);
  }
  
  srednie_natezenie= srednie_natezenie/100;
  Serial.println(srednie_natezenie);

Sygnał po zastosowaniu tego kroku wygląda następująco:

Rysunek 6. Wykres natężenia od czasu – z filtracją

Teraz można napisać warunek, który będzie sprawdzał uśredniony prąd pobierany przez silnik. Jeśli będzie on większy niż ustawiony próg, nastąpi wyłączenie silnika (ustawienie stanu niskiego na pinie 3).

 if (srednie_natezenie >800)
  {
      digitalWrite(3,LOW);
  }

Aby uruchomić ponownie silnik należy zrestartować płytkę KAmduino UNO.

Działanie programu zostało pokazane na poniższym materiale wideo:

Autor: Patryk Mądry