Skocz do zawartości

Przygotowania do projektu - zdalny pomiar natężenia prądu [Arduino, Raspberry , SCT013-000]


Pomocna odpowiedź

Napisano

Witam Państwa, 

Jestem na etapie przygotowywania się do projektu, który będzie polegał na zbieraniu danych i kumulowania ich w jednym miejscu.

Wątek ten zakładam, aby poszukać ram tego projektu i skupić się już na szczegółach. Nigdy nie byłem elektronikiem/automatykiem, wszystkiego nauczyłem się poprzez zajawkę i chęć poznawania czegoś nowego, co zaowocowało sporą wiedza dodatkową, ale przez chodzenie "po łebkach" - nigdy nie zgłębiłem żadnej z konkretnych 'odnóg' elektroniki i nie wiem czy potrafię dany element wykorzystać "do cna" czy nie.

Meritum:

- Mamy czujnik  typu SCT013-000 (natężenia prądu), który zapinamy na przewodzie fazowym.
Interesują mnie dane z czujnika (ilość rozruchów/użycia).

- Gromadzi/odczytuje je arduino lub raspberry i przesyła za pomocą WiFi lub GSM do chmury/MySQL/serwer, które mogę sobie odczytać z poziomu aplikacji, przeglądarki lub inaczej.

- Z czasem tych czujników będzie więcej - a dokładniej odczytów, każdy z niezależnej lokalizacji, więc odczyta musi mieć możliwość segregacji lokalizacji.

Być może dla Wielu z Was jest za mało szczegółów - więc pytajcie, podpowiadajcie. Będę wdzięczny. Chcę ten projekt umieścić w "workflow", więc będzie dalszy ciąg.

Będę wdzięczny za pomoc, pozdrawiam :)

@malesiak witam na forum 🙂

Łatwiej będzie, jeśli to Ty zadasz jakieś pytania. Masz z czymś konkretnym problemem lub masz jakieś wątpliwości co do wybranych rozwiązań?

  • Lubię! 1

Wyjaśnij co nazywasz czujnikiem. W jednym miejscu piszesz o samym transformatorze (SCTcośtam) a w innym wydaje się, że czujnikiem nazywasz kompletne urzadzenie z jakimś komputerkiem i komunikacją. Pytam, dlatego że inaczej powienieneś podjeść do projektu w którym jednen sterownik będzie obsługiwał kilk(naście?) transformatorków pomiarowych a inaczej gdy zawsze jeden transformator będzie podłączony do jednej płytki cyfrowej z własnym radiem W tym pierwszym przypadku możesz poszaleć i wstawić nawet spory zestaw z modemem GSM, fafnastoma wejściami analogowymi, zasilaczem z podtrzymaniem akumulatorowym itp a drugim część "wykonawcza" powinna być raczej ograniczona, bo będzie powielana w wielu sztukach. Wtedy nawet jakieś małe Arduino (ESP?) z modułem WiFi i miniaturowym zasilaczykiem 230VAC/5V/2W za 8zł wystarczy.

Jak chcesz to zasilać? Wprost z sieci AC przez jakiś zasilacz (będzie w każdym miejscu dostępna?), bateryjnie? z podtrzymaniem? itd.

No i jeszcze o funkcjach. Transformator oddaje dość niefajny sygnał AC 50Hz. Trzeba go "przysposobić" do wejść analogowych typowego przetwornika A/C więc musisz być przygpotowany na kawałek własnego sprzętu - to może być kilka oporników, ale zawsze nie jest to łączenie gotowych klocków. Ten sygnał trzeba próbkować ciągle i wyciagać ze strumienia danych potrzebne Ci informacje, czyli zrobić jakieś proste(?) cyfrowe przetwarzanie sygnałów (DSP). Napisałeś o prądzie. Chodzi o jego wielkość RMS czy szczytową? Czy tylko detekcję obecności on-off? Powyżej jakiegoś progu oznaczającego włączenie maszyny? Czy chcesz mierzyć też napięcie? A może jakieś pochodne parametry typu zniekształcenia, zawartość harmonicznych (czyli "jakość" zasilania)?

O aplikację na poziomie przesyłania i prezentacji wyników nie pytam, bo się na tym nie znam. Tu już inni koledzy na pewno Cię wymęczą albo podsuną coś ciekawego.

  • Lubię! 1

Już zaczyna mi się podobać i dzięki za pierwszy odzew.

Napisałem o Wifi, bo na etapie konstruowania/budowania całości, ten sposób komunikacji będzie łatwiejszy do weryfikacji poprawności odczytów. Finalnie będzie to musiało być GSM, a podobno jest to więcej zabawy - nie wiem, akurat GSM/GPRS nigdy nie przerabiałem.

Wspomniany czujnik jest konkretny, ponieważ zapewnia NIEINWAZYJNY pomiar natężenia prądu. W docelowym projekcie jest założenie, że nie mogę ingerować w obcą maszynę, a muszę odczytać ilość uruchomień, czyli wzrost i spadek natężenia prądu w przewodzie. Jest to mój pomysł, ale wydaje mi się jak najbardziej słuszny. Trochę @marek1707 dałeś mi do myślenia z tym transformatorem i zastanawiam się czy będę miał prosty i czytelny pomiar.

Tak, na końcu ważną sprawą będzie powtarzalność i prostota tego układu, aby w miarę możliwości łatwo to kopiować. Zbieranie danych to już wisienka na torcie.

Przepraszam narazie za czystą teorię, ale mam nadzieję, że za chwilę pochylimy się nad praktyką.

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ja do transformatora nic nie mam. To dobry i uznany sposób bezdotykowego pomiaru prądów AC, szczególnie dużych. Zwróciłem tylko uwagę, że jakoś go trzeba do komputerka podłączyć, bo wprost się nie da. Pytałem też czy przewidujesz konfigurację jedno "Arduino" + jeden transformator (co daje prosty układ ale trzeba ich zrobić dużo), czy raczej jeden komputerek + kilka transformatorów (co trochę komplikuje układ i wymaga większej mocy obliczeniowej, ale kilka maszyn obok siebie może być "obsłużonych" jednym węzłem pomiarowym/komunikacyjnym). Chodzi o to, że być może nie ma sensu wstawiać w każde miejsce Maliny jak można wstawić Arduino NANO, ale ja tego nie wiem, bo wciąż nie widzę tego Twojego systemu jako całości. Na pewno będzie potrzebne próbkowanie przetwornika A/C ze stałą częstotliwością min. kilkuset Hz a takie rzeczy łatwiej się robi na prostych maszynkach niż na Linuxowych monstrach. Z przetwarzaniem takiego strumienia danych głuipie Arduino sobie jeszcze poradzi, ale gdyby podpiąć mu 8 takich transformatorów to już niekoniecznie. Z drugiej strony komunikacja jest dużo łatwiejsza na większych urządzeniach, bo i interfejsów mają więcej wbudowanych i pamięci raczej nie braknie. Biorą za to nieporównywalnie więcej prądu więc wchodzi kwestia sposobu zasilania, ew. podtrzymywania pracy (komunikacji?) bez zasilania AC itp. Wszystko tu splata się ze sobą i dlatego pytałem o Twoje wyobrażenie albo realia pracy takiego zestawu.

  • Lubię! 2

Oczywiście - biorę tutaj po uwagę raczej Arduino w wydaniu NANO. Przeglądając inne wątki oraz internet po raz 100, natrafiłem na taki zestaw:
https://botland.com.pl/pl/czujniki-pradu/6932-dfrobot-gravity-czujnik-pradu-zmiennego-ac-sct-013-020-do-20a.html <-- ten zestaw praktycznie załatwia mi cały problem.

Tutaj pytanie - czy jest jakieś źródło tych modułów od DFRobot lub zamiennik? Czujników mam już chyba 10szt i nie bardzo chcę kupować kolejny, a samych tych sensorów bym chętnie kupił kilka sztuk. Dzięki temu też mogę od razu wykorzystać Jacka z czujnika, zamiast przecinać przewód. Jeśli to się okaże strzałem w 10, to w następnym etapie spróbowałbym odtworzyć taką "przejściówkę", ale to na późniejszym etapie.

Być może serwer zbierający dane mógłby być na Malince, ale czas na wybieranie też przyjdzie.

Załączam schemat "technologiczny". Zasilanie Arduino weźmiemy z akumulatora, a drugie z zasilacza z gniazdka. Schemat narysowany z zastosowaniem zestawu z DFRobota 🙂

schemat.thumb.png.4a67ed9d939305ea9fd100b81bf98d96.png

Ten moduł DFGravity jest moim zdaniem dość głupio pomyślany. Do wejścia analogowego nie przenosi bowiem kompletnej sinusoidy (z której można by programowo wyciągnąć wiele ciekawych rzeczy) tylko:

  • obcina ujemną połówkę,
  • dodatnią prostuje szczytowo na idealnym prostowniku.

To oznacza, że na wyjściu otrzymujesz napięcie stałe "po szczytach" prądu. Nie zobaczysz zatem prądu udarowego przy włączaniu dużego obciążenia, nie zobaczysz sinusoidy przebiegu prądu w czasie normalnej pracy i nie będziesz mógł oszacować np. jakości zasilania. Za to w ogóle nie musisz się przejmować częstotliwością próbkowania itp rzeczami, bo możesz co jakiś czasem wywołać funkcję analogRead(), dostać jakąś wartość i tyle. Nie będzie to miało to nic wspólnego z wartością RMS ani z mocą pobieraną czynną czy bierną. Nie oszacujesz cos fi ani niczego podobnego. Jeśli urządzenie którego prąd będziesz mierzył będzie wyposażone w prymitywny zasilacz impulsowy, to wartość zmierzona prądu może być 10 krotnie większa niż prawdziwe RMS. A jeśli będzie składało się głównie z silników indukcyjnych, to odczytasz wartość prądu generującego moc bierną. Mam nadzieję, że to wszystko rozumiesz i że pomiary AC masz w małych palcach...

  • Lubię! 2

Odpowiem wymijająco - coś tam w temacie liznąłem. Generalnie chylę już czoła Twojej wiedzy i chęci pomagania, ale napewno przeniesienie 2% Twoich założeń/sugestii do mojego projektu, będzie sukcesem 🙂

Od początku czułem i to się potwierdza, że podstawowym problemem mojego projektu jest prawidłowy odczyt czujnika. A kwestie komunikacyjne i programowe to już pestka.

Może podpowiesz mi jakiś typ czujnika lub kierunek jaki powinienem obrać. Mam obecnie czujniki natężenia prądu zmiennego AC SCT 013-xxx (od 10A do 100A) i sądziłem, że to mi wystarczy jako gwóźdź programu.

Na wstępie chcę odczytywać tak naprawdę stan pracy maszyny/silnika, czyli dosłowne 0 i 1. Kiedy jest w zakresie stania, czyli gotowości, a kiedy w czasie swojej pracy, czyli realizacji. Dodatkową analizą będzie długość trwania pracy i długość przestoju. Napewno będą zakresy pracy, ponieważ silnik może pracować na pusto i przy obciążeniu, ale zakładam, że tą granice uda się znaleźć.

Uh, robi się ciekawie 🙂

  • 1 miesiąc później...

Cześć!

Stanąłem w miejscu. Nawet pomyślałem, aby zapisywać odczyt na kartę SD, a następnie co godzinę wysłać log do bazy danych (mniejsza ilość połączeń), ale to też mnie przerosło, więc wróciłem do pierwotnej wersji. Potrzebuje pomocy lub wskazówki, co dalej.

W tym momencie mam i działa:
- serwer + baza danych (www.lift-monitor.pl) - działa ręczne dodawanie rekordu,
- arduino + esp8266 (program poniżej, działa, testowany na ThingSpeak),
- odczyt z czujnika działa - obecnie wartości bliskie 0 (teraz nie ma znaczenia),

Problem:
Arduino NIE ŁĄCZY się lub NIE WYSYŁA danych do bazy danych.

Może niepoprawnie koduje sposób połączenia do bazy z poziomu arduino? Mile widziana pomoc!

 

#include "SoftwareSerial.h"

#define RX 10
#define TX 11

#define ACTectionRange 20;
#define VREF 5.0
#define DEBUG false

String liftNo = "Model01";
String HOST = "www.lift-monitor.pl";
String PORT = "80";

String AP = "yyyyy";
String PASS = "xxxxx";
String sensor;
String request;

const int ACPin = A2;

SoftwareSerial esp(RX, TX);

void setup()
{
  initSerial();
  readACCurrentValue();
  initEsp();
}

void initSerial()
{
    Serial.begin(9600);
}

void initEsp() 
{
    esp.begin(115200);
    espData("AT+RST", 1000);
    espData("AT+CWMODE=1", 1000);
    espData("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"", 1000);
    while (!esp.find("OK")) {          
    
    }
    delay(1000);
}

void loop()
{
    readACCurrentValue();
    float ACCurrentValue = readACCurrentValue();
    Serial.print(ACCurrentValue);
    Serial.println(" A");
    sendRequest();
    delay(1000);
}

float readACCurrentValue()
{
  float ACCurrentValue = 0;
  float peakVoltage = 0;  
  float voltageVirtualValue = 0;
  for (int i = 0; i < 5; i++)
  {
    peakVoltage += analogRead(ACPin);
    delay(1);
  }
  peakVoltage = peakVoltage / 5;   
  voltageVirtualValue = peakVoltage * 0.707;
  voltageVirtualValue = (voltageVirtualValue / 1024 * VREF ) / 2;  
  ACCurrentValue = voltageVirtualValue * ACTectionRange;

  return ACCurrentValue;
  sensor = String(ACCurrentValue);
}

void sendRequest()
{
    sensor = readACCurrentValue(); 
//    request = "GET /update?api_key="+ API +"&field1="+String(sensor);
    request = "GET /add.php?liftNo="+String(liftNo)+"&amper="+String(sensor);
    espData("AT+CIPMUX=1", 1000);
    espData("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT, 1000);
    espData("AT+CIPSEND=0," +String(request.length()+4), 1000);
    esp.find(">");
    esp.println(request);     
    espData("AT+CIPCLOSE=0", 1000);
}

String espData(String command, const int timeout)
{ 
    Serial.print("AT Command ==> ");
    Serial.print(command);
    Serial.println("     ");
    String response = "";
    esp.println(command);
    long int time = millis();
  
    while ( (time + timeout) > millis()) {
        while (esp.available()) {
            char c = esp.read();
            response += c;
        }
    }

    if (DEBUG) {
        Serial.print(response);
    }
  
    return response;
}

 

  • 2 miesiące później...

Część, sporo się nauczyłem dzięki dyskusji w tym wątku. Chęthie też dodam kilka pomysłów które prawdopodobnie będą przydatnie.

Jako mózg operacji w topologii master-slave polecam raspberry pi "Home assistant" z integracją "espHome" wszystko na dockerach. jako slave esp8266(ma jeden pin analogowy) lub esp32 mój ulobiony mikrokontroler (ma chyba 8 użytkowych analog input) a na nich skrypty wygenerowane przez espHome na podstawie prostych kodów yaml. Taki układ pozwoli na łatwą i niezawodną rozbudowę systemu czujników. A jeśli chodzi o przechowywanie danych, tutaj homeasistant ładnie działa z influxDB i z Grafaną di wizualizacji danych.

Szczególnie polecam twojej uwadze esp32 bo pozwala ono na programowanie w PlatformIO framework arduino, ma na pokładzie wifi oraz dwurdzeniowy procesor ;)

załączam linki

https://www.home-assistant.io/

https://esphome.io/components/sensor/ct_clamp.html

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...