Spisu treści:

MIERNIK ENERGII ARDUINO: 10 kroków (ze zdjęciami)
MIERNIK ENERGII ARDUINO: 10 kroków (ze zdjęciami)

Wideo: MIERNIK ENERGII ARDUINO: 10 kroków (ze zdjęciami)

Wideo: MIERNIK ENERGII ARDUINO: 10 kroków (ze zdjęciami)
Wideo: 64.Miernik napięcia powyżej 5v-Arduino 2024, Lipiec
Anonim
Image
Image
MIERNIK ENERGII ARDUINO
MIERNIK ENERGII ARDUINO
MIERNIK ENERGII ARDUINO
MIERNIK ENERGII ARDUINO

[Odtwórz wideo]

Pochodzę z wioski Odisha w Indiach, gdzie częste są przerwy w dostawie prądu. Utrudnia życie każdemu. W dzieciństwie kontynuowanie nauki po zmierzchu było prawdziwym wyzwaniem. W związku z tym problemem zaprojektowałem eksperymentalnie układ słoneczny do mojego domu. Do oświetlenia kilku jasnych diod LED użyłem panelu słonecznego o mocy 10 Watt, 6V. Po wielu trudnościach projekt zakończył się sukcesem. Następnie postanowiłem monitorować napięcie, prąd, moc i energię zaangażowaną w system. To zrodziło pomysł zaprojektowania MIERNIKA ENERGII. Użyłem ARDUINO jako serca tego projektu, ponieważ bardzo łatwo jest pisać kod w jego IDE, a w Internecie jest dostępna ogromna liczba bibliotek open source, które mogą być używane zgodnie z wymaganie. Eksperymentowałem z projektem dla bardzo małego systemu słonecznego (10W), ale można go łatwo zmodyfikować, aby użyć go w systemie o wyższej ocenie.

Wszystkie moje projekty można znaleźć na:

Funkcja: Monitorowanie energii przez 1. Wyświetlacz LCD 2. przez Internet (przesyłanie Xively) 3. Rejestrowanie danych na karcie SD

Możesz zobaczyć mój nowy instruktażowy KONTROLER ŁADOWANIA SOLARNEGO ARDUINO MPPT (wersja 3.0)

Możesz również zobaczyć moje inne instrukcje na

KONTROLER ŁADOWANIA SŁONECZNEGO ARDUINO (Wersja 2.0)

STEROWNIK ŁADOWANIA SŁONECZNEGO ARDUINO (Wersja 1)

Krok 1: Wymagane części:

Wymagane części
Wymagane części

1. ARDUINO UNO (Amazonka)2. ARDUINO ETHERNET SHIELD (Amazonka)

3. LCD 16x2 ZNAKÓW (Amazonka)

4. CZUJNIK PRĄDU ACS 712 (Amazon)4. REZYSTORY (10k, 330ohm) (Amazon)5. POTENCJOMETR 10K (Amazonka)6. PRZEWODY (Amazon)7. KABEL ETHERNET (Amazon)8. DESKA CHLEBA (Amazonka)

Krok 2: Moc i energia

Moc: Moc jest iloczynem napięcia (wolt) i prądu (Amp) P=VxI Jednostka mocy to wat lub KWEnergy: Energia jest iloczynem mocy (wat) i czasu (godzina) E= Pxt Jednostka energii to watogodzina lub kilowat Godzina (kWh) Z powyższego wzoru jasno wynika, że do pomiaru energii potrzebujemy trzech parametrów 1. Napięcie 2. Prąd 3. Czas

Krok 3: Pomiar napięcia

Pomiar napięcia
Pomiar napięcia
Pomiar napięcia
Pomiar napięcia
Pomiar napięcia
Pomiar napięcia

Napięcie jest mierzone za pomocą obwodu dzielnika napięcia. Ponieważ napięcie wejściowe pinu analogowego ARDUINO jest ograniczone do 5 V, zaprojektowałem dzielnik napięcia w taki sposób, aby napięcie wyjściowe z niego było mniejsze niż 5 V. Moja bateria służyła do przechowywania moc z panelu słonecznego wynosi 6 V, 5,5 Ah. Muszę więc obniżyć napięcie 6,5 V do napięcia niższego niż 5 V. Użyłem R1=10k i R2=10K. Wartość R1 i R2 może być mniejsza, ale problem polega na tym, że przy niskiej rezystancji przepływa przez nią większy prąd, w wyniku czego duża ilość mocy (P = I^2R) jest rozpraszana w postaci ciepła. Można więc wybrać inną wartość rezystancji, ale należy zachować ostrożność, aby zminimalizować straty mocy na rezystancji. Vout=R2/(R1+R2)*Vbat Vbat=6.5 przy pełnym naładowaniu R1=10k i R2=10k Vout=10/(10+10)*6.5=3.25v, który jest niższy niż 5V i odpowiedni dla pinów analogowych ARDUINO pokazałem, że bateria 9 V w obwodzie z odsłoniętą płytką służy tylko na przykład do podłączenia przewodów. Ale rzeczywisty akumulator, którego użyłem, to akumulator kwasowo-ołowiowy 6 V, 5,5 Ah. Kalibracja napięcia: Gdy bateria jest w pełni naładowana (6,5 V), otrzymamy a Vout = 3,25 v i niższa wartość dla innego niższego napięcia akumulatora. AEDUINO ADC konwertuje sygnał analogowy na odpowiednią aproksymację cyfrową. Gdy napięcie akumulatora wynosi 6,5v otrzymałem 3,25v z dzielnika napięcia i sample1 = 696 w monitorze szeregowym, gdzie sample1 to wartość ADC odpowiadająca 3,25v Dla lepszego zrozumienia załączyłem symulację czasu rzeczywistego przez 123D.circuit do pomiaru napięcia Kalibracja: 3.25v równoważne 696 1 jest równoważne 3.25/696=4.669mv Vout = (4,669*próbka1)/1000 woltów Rzeczywiste napięcie akumulatora = (2*Vout) volt KOD ARDUINO: // pobranie 150 próbek z dzielnika napięcia w odstępie 2s a następnie uśredniaj zebrane dane próbek dla (int i=0;i<150;i++) { sample1=sample1+analogRead(A2); //odczytaj napięcie z opóźnienia obwodu dzielnika (2); } próbka1=próbka1/150; napięcie=4.669*2*próbka1/1000;

Krok 4: Pomiar prądu

Pomiar prądu
Pomiar prądu
Pomiar prądu
Pomiar prądu

Do pomiaru prądu użyłem czujnika prądu z efektem Halla ACS 712 (20 A). Na rynku dostępne są czujniki ACS712 o różnych zakresach, więc wybierz zgodnie z wymaganiami. Na schemacie tablicy chlebowej pokazałem diodę LED jako obciążenie, ale rzeczywiste obciążenie jest inne. ZASADA DZIAŁANIA: Efekt Halla polega na wytwarzaniu różnicy napięcia (napięcie Halla) w przewodzie elektrycznym, poprzecznie do prądu elektrycznego w przewodzie i pole magnetyczne prostopadłe do prądu. Aby dowiedzieć się więcej o czujniku Halla kliknij tutaj Karta katalogowa czujnika ACS 712 znajduje się tutaj Z karty katalogowej 1. ACS 712 mierzy dodatnie i ujemne prądy 20A, odpowiadające wyjściu analogowemu 100mV/A 2. Brak prądu testowego przez napięcie wyjściowe VCC / 2 =5v/2=2.5VCalibration: Odczyt analogowy daje wartość 0-1023, co odpowiada 0V do 5V Czyli odczyt analogowy 1 = (5/1024) V =4.89mv Wartość = (4,89*Wartość odczytu analogowego)/ 1000 V Ale zgodnie z arkuszami danych offset wynosi 2,5 V (przy zerowym prądzie uzyskamy 2,5 V z wyjścia czujnika) Wartość rzeczywista = (wartość -2,5) V Prąd we wzmacniaczu = wartość rzeczywista*10 KOD ARDUINO: // pobranie 150 próbek z czujniki z interwałem 2s a następnie uśrednianie danych próbek zebranych dla(int i=0;i<150;i++) { sample2+=analogRead(A3); //odczytaj prąd z opóźnienia czujnika(2); } próbka2=próbka2/150; wart =(5,0*próbka2)/1024,0; rzeczywista wart = wart-2,5; // napięcie przesunięcia wynosi 2,5 V amperów = rzeczywista wartość * 10;

Krok 5: Pomiar czasu

Do pomiaru czasu nie jest potrzebny żaden zewnętrzny sprzęt, ponieważ sam ARDUINO ma wbudowany timer. Funkcja millis() zwraca liczbę milisekund, odkąd płyta Arduino zaczęła uruchamiać bieżący program. KOD ARDUINO: long milisec = millis(); // oblicz czas w milisekundach long time=milisec/1000; // zamień milisekundy na sekundy

Krok 6: Jak ARDUINO oblicza moc i energię?

totamps=totamps+ampery; // oblicz sumę amperów avgamps=totamps/czas; // średnie ampery amphr=(avgamps*time)/3600; // amperogodzina wat =napięcie*ampery; // moc=napięcie*prąd energia=(wat*czas)/3600; Watosekunda jest ponownie konwertowana na watogodzinę, dzieląc 1 godzinę (3600 s) // energia=(wat*czas)/(1000*3600); do odczytu w kWh

Krok 7: Wyjście wizualne

Wyjście wizualne
Wyjście wizualne

Wszystkie wyniki można zwizualizować na monitorze szeregowym lub za pomocą wyświetlacza LCD. Użyłem wyświetlacza LCD 16x2 znaków do wyświetlenia wszystkich wyników uzyskanych w poprzednich krokach. Schematy można znaleźć na schemacie przedstawionym powyżej. Połącz LCD z ARDUINO, jak podano poniżej: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino +5v 3. VO -> pin GND Arduino + rezystor lub potencjometr 4. RS -> pin 8 Arduino 5. RW -> pin 7 Arduino 6. E -> pin 6 Arduino 7. D0 -> Arduino - niepodłączony 8 D1 -> Arduino - Nie połączone 9. D2 -> Arduino - Nie połączone 10. D3 -> Arduino - Nie połączone 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Pin 2 Arduino 15. A -> Pin 13 Arduino + Rezystor (zasilanie podświetlenia) 16. K -> GND Arduino (masa podświetlenia) KOD ARDUINO: Dla monitora szeregowego:

Serial.print("NAPIĘCIE: "); Serial.print(napięcie); Serial.println("V"); Serial.print("BIEŻĄCY:"); Serial.print(wzmacniacze); Serial.println("Ampery"); Serial.print("MOC:"); Serial.print(wat); Serial.println("Wat"); Serial.print("ZUŻYTA ENERGIA:"); Serial.print(energia); Serial.println("Watogodzina"); Serial.println(""); // drukuj następne zestawy parametrów po opóźnieniu pustej linii (2000);Dla LCD: Dla wyświetlacza LCD musisz najpierw zaimportować do kodu bibliotekę "LiquidCrystal". Aby dowiedzieć się więcej o bibliotece LequidCrystal kliknij tutaj Samouczek LCD kliknij tutaj Poniższy kod jest formatem wyświetlania na LCD wszystkich obliczeń mocy i energii #include lcd(8, 7, 6, 5, 4, 3, 2); int podświetlenie = 9; void setup() { pinMode(backLight, OUTPUT); //ustaw pin 9 jako wyjście analogWrite(backLight, 150); //steruje intensywnością podświetlenia 0-254 lcd.begin(16, 2); // Wiersze kolumn. rozmiar wyświetlacza lcd.clear(); // wyczyść ekran } void loop() { lcd.setCursor(16, 1); // ustaw kursor poza licznikiem wyświetlacza lcd.print(" "); // wypisuje opóźnienie pustego znaku(600); /////////////////////////////////////////wydruk mocy i energii na LCD/ ///////////////////////////////////////////// lcd.setCursor (1, 0); // ustaw kursor na 1 kolumnie i 1 wierszu lcd.print(watt); lcd.print("W"); lcd.print(napięcie); lcd.print("V"); lcd.setCursor(1, 1); // ustaw kursor na 1. kolumnie i 2. wierszu lcd.print(energy); lcd.print("WH"); lcd.print(wzmacniacze); lcd.print("A"); }

Krok 8: Przesyłanie danych do Xively.com

Przesyłanie danych do Xively.com
Przesyłanie danych do Xively.com
Przesyłanie danych do Xively.com
Przesyłanie danych do Xively.com
Przesyłanie danych do Xively.com
Przesyłanie danych do Xively.com

Zapoznaj się z powyższymi zrzutami ekranu, aby uzyskać lepsze zrozumienie. W celu przesłania danych do xively.com najpierw należy pobrać następującą bibliotekę HttpClient: kliknij tutajXively: kliknij tutajSPI: Importuj z arduino IDE (szkic -> Importuj bibliotekę…..)Ethernet: Importuj z arduino IDE ((szkic -> Importuj bibliotekę…..) Otwórz konto z https://xively.com (dawniej pachube.com i cosm.com)Załóż darmowe konto programisty na

Wybierz nazwę użytkownika, hasło, ustaw swój adres i strefę czasową itp. Otrzymasz wiadomość e-mail z potwierdzeniem;

następnie kliknij link aktywacyjny, aby aktywować swoje konto. Po pomyślnym otwarciu konta zostaniesz przekierowany na stronę urządzeń deweloperskich

  • Kliknij pole +Dodaj urządzenie
  • Nadaj urządzeniu nazwę i opis (np. MONITOROWANIE ENERGII)·
  • Wybierz dane prywatne lub publiczne (wybieram prywatne)·
  • Kliknij Dodaj urządzenie

Po dodaniu urządzenia zostajesz przekierowany na nową stronę, na której znajduje się wiele ważnych informacji

  • Identyfikator produktu, tajemnica produktu, numer seryjny, kod aktywacyjny·
  • Feed ID, FeedURL, API End Point (Feed ID jest używany w kodzie ARDUINO)
  • Dodaj kanały (Wybierz ENERGIĘ i MOC, ale możesz wybrać według własnego uznania)Podaj jednostkę i symbol dla parametru·
  • Dodaj swoją lokalizację ·
  • Klucze API (używane w kodzie ARDUINO, unikaj udostępniania tego numeru)·
  • Wyzwalacze (pingowanie strony internetowej po wystąpieniu zdarzenia, np. gdy zużycie energii przekroczy określony limit)

Krok 9: Kod Xively i ARDUINO

Tutaj załączyłem kompletny kod (wersja beta) do licznika energii z wyłączeniem rejestracji danych na karcie SD, która jest dołączana osobno w następnym kroku. /** Przesyłanie danych monitorowania energii do xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Wpisz swój klucz Xively API #define FEED_ID xxxxxxxxx // Wpisz swój identyfikator kanału Xively // Adres MAC dla swojego bajt osłony Ethernet mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Pin analogowy, który monitorujemy (0 i 1 są używane przez ekran Ethernet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // ostatni raz łączyliśmy się z Cosmem const unsigned long connectionInterval = 15000; // opóźnienie między połączeniem z Cosm w milisekundach // Zainicjuj bibliotekę Cosm // Zdefiniuj łańcuch dla naszego identyfikatora strumienia danych char sensorId = "POWER"; char sensorId2 = "ENERGIA"; Strumienie danych XivelyDatastream = { XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT), XivelyDatastream(sensorId2, strlen(sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT), }; // Zapakuj strumień danych w kanał XivelyFeed feed(FEED_ID, datastreams, 2 /* liczba strumieni danych */); Klient EthernetClient; XivelyClient xivelyclient(klient); void setup() { Serial.begin(9600); Serial.println("Inicjowanie sieci"); while (Ethernet.begin(mac) !=1) { Serial.println("Błąd pobierania adresu IP przez DHCP, próba ponowna…"); opóźnienie (15000); } Serial.println("Zainicjowano sieć"); Serial.println(); } void loop() { if (millis() - lastConnectionTime > connectionInterval) { sendData(); // wyślij dane do xively getData(); // odczytaj strumień danych z powrotem z lastConnectionTime = millis(); // zaktualizuj czas połączenia, więc czekamy przed ponownym połączeniem } } void sendData() { int sensor1 = watt; wew czujnik2 = energia; strumienie danych[0].setFloat(czujnik1); // strumienie danych wartości mocy[1].setFloat(czujnik2); // wartość energii Serial.print("Odczyt mocy"); Serial.println(datastreams[0].getFloat()); Serial.print("Odczytaj energię"); Serial.println(strumienie danych[1].getFloat()); Serial.println("Przesyłanie do Xively"); int ret = xivelyclient.put(feed, API_KEY); Serial.print("Kod powrotu PUT: "); Serial.println(ret); Serial.println(); } // pobierz wartość strumienia danych z xively, wypisując otrzymaną wartość void getData() { Serial.println("Odczyt danych z Xively"); int ret = xivelyclient.get(feed, API_KEY); Serial.print("Pobierz kod powrotu: "); Serial.println(ret); if (ret > 0) { Serial.print("strumień danych to: "); Serial.println(feed[0]); Serial.print("Wartość mocy to: "); Serial.println(feed[0].getFloat()); Serial.print("strumień danych to: "); Serial.println(feed[1]); Serial.print("Wartość energetyczna to: "); Serial.println(feed[1].getFloat()); } Serial.println();

Krok 10: Rejestrowanie danych na karcie SD

Aby zapisać dane na karcie SD, musisz zaimportować bibliotekę SD Aby dowiedzieć się więcej o bibliotece SD kliknij tutajKod do przechowywania danych na karcie SD jest napisany osobno, ponieważ nie mam wystarczającej ilości pamięci w moim ARDUINO UNO po pisanie kodu wyświetlacza LCD i wgrywanie danych xively.com. Ale staram się ulepszyć kod wersji beta, aby jeden kod mógł zawierać wszystkie funkcje (wyświetlacz LCD, przesyłanie danych Xively i przechowywanie danych na karcie SD). Kod do rejestrowania danych jest załączony poniżej. lepszy kod poprzez modyfikację mojego kodu proszę podziel się ze mną. To jest moja pierwsza instrukcja techniczna, jeśli ktoś znajdzie w niej jakiś błąd, zapraszam do komentarzy.. abym mógł się poprawić. Jeśli znajdziesz obszary poprawy w tym projekcie, proszę o komentarze lub napisz do mnie, więc projekt będzie silniejszy. Myślę, że będzie pomocny zarówno dla innych, jak i dla mnie.

Konkurs obwodów 123D
Konkurs obwodów 123D
Konkurs obwodów 123D
Konkurs obwodów 123D

III nagroda w konkursie 123D Circuits

Zalecana: