Spisu treści:
- Krok 1: Wymagane części:
- Krok 2: Moc i energia
- Krok 3: Pomiar napięcia
- Krok 4: Pomiar prądu
- Krok 5: Pomiar czasu
- Krok 6: Jak ARDUINO oblicza moc i energię?
- Krok 7: Wyjście wizualne
- Krok 8: Przesyłanie danych do Xively.com
- Krok 9: Kod Xively i ARDUINO
- Krok 10: Rejestrowanie danych na karcie SD
Wideo: MIERNIK ENERGII ARDUINO: 10 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
[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:
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
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
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
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
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.
III nagroda w konkursie 123D Circuits
Zalecana:
DIY wielofunkcyjny licznik energii Arduino V1.0: 13 kroków (ze zdjęciami)
DIY wielofunkcyjny licznik energii Arduino V1.0: W tej instrukcji pokażę, jak zrobić wielofunkcyjny licznik energii oparty na Arduino. Ten mały miernik to bardzo przydatne urządzenie, które wyświetla ważne informacje o parametrach elektrycznych. Urządzenie może zmierzyć 6 użytecznych parametrów elektrycznych
Licznik energii Arduino - V2.0: 12 kroków (ze zdjęciami)
Licznik energii Arduino - V2.0: Witaj przyjacielu, witaj ponownie po długiej przerwie. Wcześniej opublikowałem instrukcje dotyczące licznika energii Arduino, który został zaprojektowany głównie do monitorowania mocy z panelu słonecznego (zasilania prądu stałego) w mojej wiosce. Stało się bardzo popularne w Internecie, wiele
Jak zbudować bank energii oparty na energii słonecznej przy użyciu baterii Dead Mobile: 4 kroki
Jak zbudować bank energii oparty na energii słonecznej przy użyciu baterii Dead Mobile: Ten projekt to bank energii oparty na energii słonecznej w domu przy użyciu rozładowanej baterii telefonu komórkowego. Możemy zastosować dowolny odpowiednik baterii mobilnej o tym samym schemacie. Panel słoneczny naładuje akumulator, a my możemy wykorzystać moc akumulatora do ładowania
Miernik zużycia energii elektrycznej CHINT + ESP8266 i matryca Led MAX7912: 9 kroków (ze zdjęciami)
Miernik zużycia energii elektrycznej CHINT + ESP8266 & Matrix Led MAX7912: Tym razem powrócimy do ciekawego projektu, pomiaru zużycia energii elektrycznej w sposób inwazyjny za pomocą miernika CHINT DDS666 Mono faza, technicznie jest to licznik mieszkaniowy lub mieszkaniowy, który już mamy prezentowany w poprzednim t
Zbuduj analogowy miernik zużycia energii elektrycznej: 8 kroków (ze zdjęciami)
Zbuduj analogowy miernik zużycia energii elektrycznej: użyłem funkcji Kill A Watt (http://www.p3international.com/products/special/P4400/P4400-CE.html) licznik energii elektrycznej na chwilę i postanowiłem zbudować analogowy. Ten projekt przestał być prosty, z amperomierzem z jednym panelem i