Spisu treści:

Arduino Precyzyjny i dokładny woltomierz (0-90 V DC): 3 kroki
Arduino Precyzyjny i dokładny woltomierz (0-90 V DC): 3 kroki

Wideo: Arduino Precyzyjny i dokładny woltomierz (0-90 V DC): 3 kroki

Wideo: Arduino Precyzyjny i dokładny woltomierz (0-90 V DC): 3 kroki
Wideo: Arduino 10: MIERZYMY NAPIĘCIA 2024, Lipiec
Anonim

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

Schematy
Schematy
Schematy
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

Przetestujmy to!
Przetestujmy to!
Przetestujmy to!
Przetestujmy to!
Przetestujmy to!
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!

Zalecana: