Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
W tej instrukcji zbudowałem woltomierz do pomiaru wysokich napięć DC (0-90 V) ze względną precyzją i dokładnością za pomocą Arduino Nano.
Pomiary testowe, które wykonałem, były wystarczająco dokładne, głównie w granicach 0,3 V rzeczywistego napięcia mierzonego standardowym woltomierzem (użyłem Astro AI DM6000AR). To jest wystarczająco blisko do mojego zamierzonego użycia urządzenia.
Aby to zarchiwizować, użyłem napięcia odniesienia (4.096v) i dzielnika napięcia.
Po stronie kodu użyłem oczywiście opcji „external reference” dla Arduino Nano oraz przykładu „Smoothing” w samouczkach Arduino.
Kieszonkowe dzieci
1 x Arduino Nano-Link
1 x wyświetlacz Oled (SSD 1306)-Link
Rezystory 1 x 1/4W 1% - 1k om - Link
Rezystory 1 x 1/4W 1% - 220k omów - Link
Rezystory 1 x 1/4W 1% - 10k omów - Link
1 x 4.096v LM4040DIZ-4.1 Napięcie odniesienia - Link
Płytka do krojenia chleba i druty - Link
Astro AI DM6000AR - Link
Powerbank USB - Link
Baterie 9V - Link
CanadianWinters jest uczestnikiem programu Amazon Services LLC Associates, programu reklam afiliacyjnych, którego celem jest zapewnienie witrynom środków do zarabiania opłat poprzez umieszczanie linków do Amazon.com i witryn stowarzyszonych. Używając tych linków, jako współpracownik Amazon zarabiam na kwalifikujących się zakupach, nawet jeśli kupisz coś innego – i nic Cię to nie kosztuje.
Krok 1: Schematy
Połączyłem wszystkie części zgodnie z powyższymi schematami. W szczególności wybrałem napięcie odniesienia 4.096, aby pozostać jak najbliżej znaku 5 V, aby uniknąć utraty rozdzielczości.
Postępując zgodnie z arkuszem danych, wybrałem rezystor 1K ohm jako napięcie odniesienia, mimo że można użyć innej wartości. Napięcie dla referencji dostarczane jest z pinu Nano 5v.
Idea obwodu polega na tym, że mierzone napięcie prądu stałego przechodzi przez rezystor napięciowy. Skalowane napięcie, a następnie trafia do analogowego pinu Arduino, aby być próbkowane, wygładzane, ponownie skalowane i wyświetlane na wyświetlaczu OLED.
Starałam się zachować prostotę:)
Krok 2: Obliczenia kodu i rezystora
Wartości rezystorów zostały wybrane tak, jak jest to wskazane (jeśli się nie mylę, znajduje się to w arkuszu danych Arduino / Atmega), aby utrzymać impedancję poniżej 10 kΩ.
Aby uprościć sprawę, stworzyłem arkusz kalkulacyjny, który automatyzuje obliczenia w przypadku, gdy chcesz użyć różnych wartości rezystorów: Link do Google Sheet
Oto kod, którego użyłem w tym projekcie:
#włączać
#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (obrót, [reset]) napięcie pływaka =0; // używane do przechowywania wartości napięcia float Radjust = 0.043459459; //Współczynnik dzielnika napięcia (R2 / R1+R2) float vbat =0; //napięcie końcowe po obliczeniach- napięcie podtrzymania akumulatora Vref = 4,113; //Napięcie odniesienia - zmierzona wartość rzeczywista. Wartość nominalna 4,096v const int numReadings = 50; // liczba próbek odczytu - zwiększ, aby uzyskać lepsze wygładzenie. Zmniejsz, aby przyspieszyć czytanie. odczyty int[numReadings]; // odczyty z wejścia analogowego int readIndex = 0; // indeks bieżącego odczytu unsigned long total = 0; // bieżąca suma int średnia = 0; //zmienne do odświeżania ekranu bez użycia opóźnienia unsigned long previousMillis = 0; // zapisze ostatnią aktualizację ekranu // stałe nie ulegną zmianie: const long interval = 50; // interwał odświeżania ekranu (milisekundy) void setup(void) { analogReference(EXTERNAL); // użyj AREF dla napięcia odniesienia 4.096. Moje referencyjne napięcie rzeczywiste wynosi 4,113V u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // …zawiń do początku: readIndex = 0; } // oblicz średnią: średnia = (total / numReadings); napięcie = średnia * (Vref / 1023,0); //4.113 to Vref vbat = napięcie/Radjust; // Ustawienie opóźnienia odświeżania ekranu przy użyciu Millis if (currentMillis - previousMillis >= interval) { // zapisz ostatnią aktualizację ekranu previousMillis = currentMillis; u8g2.clearBuffer(); // wyczyść wewnętrzne menu //Wyświetlanie napięcia pakietu u8g2.setFont(u8g2_font_fub20_tr); // czcionka 20px u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // czcionka 10 pikseli u8g2.setCursor (76, 20); u8g2.print("Wolty"); u8g2.setKursor (1, 40); u8g2.print("Kanadyjskie Zimy"); u8g2.setKursor (1, 60); u8g2.print("Precyzyjne napięcie"); } u8g2.sendBuffer(); // przenieś pamięć wewnętrzną do wyświetlacza delay(1); }
Uwaga, jestem trochę zardzewiały z kodowaniem Arduino, więc jeśli znajdziesz jakiś błąd lub sposób na ulepszenie kodu, jestem otwarty na sugestie:)
Krok 3: Przetestujmy to
Do przetestowania tego woltomierza użyłem baterii 8x 9v, które kupiłem w lokalnym sklepie. Planuję użyć tego woltomierza do pomiaru napięcia na zestawach akumulatorów do moich rowerów elektrycznych (mają napięcia w zakresie od 24 do 60 V z okazjonalnymi 72 V).
Gdy elektronika zostanie zapakowana w płytkę drukowaną i małe pudełko, stworzy to ładny i przenośny miernik akumulatorów. Grafika i czcionki na OLED można dostosować do własnych potrzeb (np. większa czcionka ułatwiająca czytanie).
Moim celem było uzyskanie odczytu napięcia na mierniku Oled/Arduino niezbyt daleko od mojego cyfrowego miernika uniwersalnego. Celowałem w +/-0, 3v max delta. Jak widać na filmie, udało mi się to zarchiwizować, z wyjątkiem górnego końca pomiarów.
Mam nadzieję, że podobał Ci się ten Instruktaż i daj mi znać o swoich przemyśleniach!