Мазмуну:

Arduino Precise & Accutate Volt Meter (0-90V DC): 3 кадам
Arduino Precise & Accutate Volt Meter (0-90V DC): 3 кадам

Video: Arduino Precise & Accutate Volt Meter (0-90V DC): 3 кадам

Video: Arduino Precise & Accutate Volt Meter (0-90V DC): 3 кадам
Video: Waveshare E-ink Display Precise voltmeter (0-90v DC) with Arduino Nano - Code included 2024, Ноябрь
Anonim

Бул көрсөтмөдө, мен Arduino Nano колдонуп салыштырмалуу тактык жана тактык менен DC (0-90v) жогорку чыңалуусун өлчөө үчүн вольтметрди курдум.

Мен алган тесттик өлчөөлөр жетишерлик так болду, негизинен стандарттык вольтметр менен өлчөнгөн реалдуу чыңалуудан 0,3 в ичинде (мен Astro AI DM6000AR колдондум). Бул түзмөктү максаттуу колдонуу үчүн жетиштүү.

Муну архивдөө үчүн мен чыңалуу шилтемесин (4.096v) жана чыңалуу бөлүштүргүчүн колдондум.

Код тарабында, мен, албетте, Arduino Nano үчүн "тышкы маалымдама" опциясын жана Arduino сабактарындагы "Тегиздөө" мисалын колдондум.

Жабдуулар

1 x Arduino Nano - Шилтеме

1 x Oled Display (SSD 1306) - Шилтеме

1 x 1/4W 1% резисторлор - 1k ohm - Шилтеме

1 x 1/4W 1% резисторлор - 220k ohm - Link

1 x 1/4W 1% резисторлор - 10k ohm - Link

1 x 4.096v LM4040DIZ -4.1 Voltage Reference - Link

Нан тактасы жана зымдар - Шилтеме

Astro AI DM6000AR - Шилтеме

USB Power Bank - Шилтеме

9V батареялары - шилтеме

CanadianWinters Amazon Services LLC Associates Программасынын катышуучусу, Amazon.com жана аффилирленген сайттарга шилтеме берүү менен сайттарга төлөмдөрдү табуу үчүн каражаттарды берүү үчүн иштелип чыккан өнөктөш жарнак программасы. Бул шилтемелерди колдонуу менен, Amazon Associate катары, башка нерселерди сатып алсаңыз да, квалификациялуу сатып алуулардан киреше табам-жана бул сизге эч нерсе кылбайт.

1 -кадам: Схемалар

Схемалар
Схемалар
Схемалар
Схемалар

Мен бардык бөлүктөрдү жогорудагы схемаларга ылайык туташтырдым. Атап айтканда, мен чечүүнү жоготпоо үчүн 5v белгисине мүмкүн болушунча жакыныраак болуу үчүн 4.096 чыңалуу шилтемесин тандадым.

Маалымат барагынан кийин, мен башка маанини колдонсо да, чыңалуу үчүн 1K ом резисторун тандадым. Маалымдама үчүн чыңалуу Nano 5v пинден берилет.

Райондун идеясы, өлчөнө турган DC чыңалуусу чыңалуу каршылыгы аркылуу өтөт. Масштабдуу чыңалуу Arduino аналогдук пинине кирип, үлгү алынат, тегизделет, кайра масштабдалат жана OLed дисплейде көрсөтүлөт.

Мен жөнөкөй нерселерди сактоого аракет кылдым:)

2 -кадам: Код жана резистордун эсептөөлөрү

Резисторлордун мааниси импеданс 10к Омдон төмөн болбошу үчүн (эгер жаңылбасам, бул Arduino/Atmega маалымат барагында) максатка ылайыктуу түрдө тандалган.

Иштерди жөнөкөйлөтүү үчүн, мен ар кандай каршылыктын маанилерин колдонгуңуз келсе, эсептөөлөрдү автоматташтырган электрондук жадыбал жасадым: Google Sheetке шилтеме

Мына мен бул долбоор үчүн колдонгон код:

#кошуу

#in U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (айлануу, [баштапкы абалга келтирүү]) сүзүүчү чыңалуу = 0; // чыңалуу маанисин калкып калуу үчүн колдонулат Radjust = 0.043459459; // Чыңалуу бөлүүчү фактор (R2 /R1+R2) float vbat = 0; // калькуляциядан кийинки акыркы чыңалуу- батареянын сүзгүчүнүн чыңалуусу Vref = 4.113; // Чыңалуу шилтемеси - реалдуу наркы өлчөнөт. Номиналдык маани 4.096v const int numReadings = 50; // окуу үлгүлөрүнүн саны - көбүрөөк тегиздөө үчүн көбөйтүү. Тезирээк окуу үчүн азайтыңыз. int readings [numReadings]; // int readIndex = 0 аналогдук киришинен окуулар; // учурдагы окуу индекси белгисиз узун жалпы = 0; // иштеп жаткан жалпы int орточо = 0; // экрандын жаңыртуусун кечиктирбестен кол коюусуз көпкө созулган мурункуMillis = 0; // экран акыркы жолу жаңыртылганда сакталат // константалар өзгөрбөйт: const long interval = 50; // экранды жаңыртуу үчүн интервал (миллисекунддар) void setup (void) {analogReference (EXTERNAL); // 4.096 маалымдама чыңалуусу үчүн AREFти колдонуңуз. Менин реалдуу чыңалуум 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… башына чейин ороп коюңуз: readIndex = 0; } // орточо эсеп: орточо = (жалпы / numReadings); чыңалуу = орточо * (Vref / 1023.0); //4.113 Vref vbat = чыңалуу/Radjust; // Милис аркылуу экранды жаңыртуунун кечигүүсүн коюу (currentMillis - previousMillis> = интервал) {// экранды акыркы жолу жаңыртууну мурункуMillis = currentMillis; u8g2.clearBuffer (); // ички менорду тазалоо // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20px шрифт u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px шрифт u8g2.setCursor (76, 20); u8g2.print ("Вольт"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Так чыңалуу"); } u8g2.sendBuffer (); // дисплейдин кечигүүсүнө ички эсти өткөрүп берүү (1); }

Көңүл буруңуз, мен Arduino коддоодо бир аз дат басам, андыктан эгер сиз кандайдыр бир ката же кодду жакшыртуунун жолун тапсаңыз, мен сунуштарга ачыкмын:)

3 -кадам: Кел, аны сынап көрөлү

Кел, аны сынап көрөлү!
Кел, аны сынап көрөлү!
Кел, аны сынап көрөлү!
Кел, аны сынап көрөлү!
Кел, аны сынап көрөлү!
Кел, аны сынап көрөлү!

Бул вольтметрди текшерүү үчүн мен жергиликтүү дүкөндөн алган 8x 9v батареяларын колдондум. Мен бул вольтметрди электр велосипеддеримдеги батарейкалардагы чыңалууну өлчөө үчүн колдонууну пландап жатам (алар 24-60в чейин чыңалуусу бар, кээде 72в).

Электроника компьютерге жана кичинекей кутуга салынгандан кийин, бул жакшы жана портативдүү батареянын өлчөгүчүн түзөт. OLEDдеги графика жана шрифттер сиздин муктаждыктарыңызга ылайыкташтырылган болушу мүмкүн (мисалы. Оңой окуу үчүн чоңураак шрифт).

Менин максатым Санариптик Мультиметрден алыс эмес Олед/Ардуино метринде чыңалуу көрсөткүчү болгон. Мен +/- 0, 3v макс дельтасын көздөп жаткам. Видеодон көрүнүп тургандай, мен муну архивдей алдым, өлчөөлөрдүн үстү жагында.

Бул Насаатчы сизге жакты деп ишенем жана оюңузду мага билдириңиз!

Сунушталууда: