Мазмуну:

ARDUINO ENERGY METER: 10 кадам (Сүрөттөр менен)
ARDUINO ENERGY METER: 10 кадам (Сүрөттөр менен)

Video: ARDUINO ENERGY METER: 10 кадам (Сүрөттөр менен)

Video: ARDUINO ENERGY METER: 10 кадам (Сүрөттөр менен)
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Ноябрь
Anonim
Image
Image
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER

[Видеону ойнотуу]

Мен Индиянын Одиша айылына таандыкмын, ал жерде электр жарыгын тез -тез өчүрүү өтө кеңири таралган. Бул ар бир адамдын жашоосуна тоскоолдук кылат. Бала кезимде күүгүм киргенден кийин окуумду улантуу чыныгы сыноо болчу. Бул көйгөйдөн улам мен эксперименталдык негизде үйүм үчүн күн системасын иштеп чыктым. Мен бир нече жаркыраган диоддорду жарыктандыруу үчүн 10 Вт, 6В күн панелин колдондум. Көптөгөн кыйынчылыктарга туш болгондон кийин, долбоор ийгиликтүү ишке ашты. Андан кийин мен системага тартылган чыңалууну, токту, энергияны жана энергияны көзөмөлдөөнү чечтим. Бул ENERGY METER долбоорлоо идеясын алып келди. Мен ARDUINOну бул долбоордун жүрөгү катары колдондум, анткени анын IDEсине код жазуу абдан оңой жана интернетте көптөгөн ачык булактар китепканасы бар, аларды ылайык колдонсо болот. талабы. Мен долбоорду абдан кичине бааланган (10Watt) күн системасы үчүн сынап көрдүм, бирок бул жогорку рейтинг системасы үчүн колдонуу үчүн оңой өзгөртүлүшү мүмкүн.

Сиз менин бардык долбоорлорумду таба аласыз:

Өзгөчөлүгү: 1. LCD дисплейи аркылуу энергияны көзөмөлдөө 2. интернет аркылуу (Xively жүктөө) 3. SD картага маалымат киргизүү

Сиз менин жаңы инструктивдүү ARDUINO MPPT SARAR CHARGE CONTROLLER'имди көрө аласыз (Версия-3.0)

Сиз менин башка көрсөтмөлөрүмдү көрө аласыз

ARDUINO SOLAR CHARGE CONTROLLER (Version 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Версия-1)

1 -кадам: Тетиктер талап кылынат:

Талап кылынган бөлүктөр
Талап кылынган бөлүктөр

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

3. 16x2 СИПАТ ЖК (Amazon)

4. ACS 712 CURRENT SENSOR (Amazon) 4. RESISTORS (10k, 330ohm) (Amazon) 5. 10K потенциометр (Амазонка) 6. JUMPER WIRES (Amazon) 7. ETHERNET CABLE (Amazon) 8. НАН КАРТАСЫ (Amazon)

2 -кадам: Күч жана энергия

Power: Power - бул чыңалуу (вольт) жана токтун (Amp) продуктусу P = VxI Күч бирдиги - Ватт же KW Саат (кВтс) Жогорудагы формуладан Энергияны өлчөө үчүн бизге үч параметр керек экени көрүнүп турат 1. Чыңалуу 2. Ток 3. Убакыт

3 -кадам: Voltage Өлчөө

Voltage Өлчөө
Voltage Өлчөө
Voltage Өлчөө
Voltage Өлчөө
Voltage Өлчөө
Voltage Өлчөө

Чыңалуу чыңалуу бөлүштүргүч схеманын жардамы менен өлчөнөт. ARDUINO аналогдук пин кирүү чыңалуусу 5В менен чектелген, мен чыңалуу бөлүштүргүчтү андан чыккан чыңалуу 5Vдан кем болбошу үчүн иштеп чыккам. күн панелинен алынган кубат 6v, 5.5Ah деп бааланат. Ошентип, мен бул 6.5vны 5Vдан төмөн чыңалууга түшүрүшүм керек. Мен R1 = 10k жана R2 = 10K колдондум. R1 жана R2 мааниси төмөн болушу мүмкүн, бирок көйгөй каршылык төмөн болгондо, ал аркылуу жогорку агым агып кетет, натыйжада көп сандагы күч (P = I^2R) жылуулук түрүндө тарайт. Ошентип, ар кандай каршылык маанисин тандап алса болот, бирок каршылыкта электр энергиясын жоготууну азайтуу үчүн кам көрүү керек. Vout = R2/(R1+R2)*Vbat Vbat = 6.5 толугу менен заряддалганда R1 = 10k жана R2 = 10k Vout = 10/(10+10)*6.5 = 3.25v 5vдан төмөн жана ARDUINO аналогдук пинге ылайыктуу 9 вольттук батареяны көрдүм, мисалы, зымдарды туташтыруу үчүн, бирок чындыгында мен колдонгон батарейка 6 вольт, 5.5Ач коргошун кислотасы болуп саналат. а Vout = 3.25v жана башка төмөнкү батареянын чыңалуусу үчүн төмөнкү маани. AEDUINO ADC аналогдук сигналды тиешелүү санариптик жакындатууга айландырат. Батареянын чыңалуусу 6.5v болгондо, мен чыңалуу бөлүштүргүчтөн 3.25v алдым жана sample1 = 696 сериялык монитордо, мында sample1 ADC мааниси 3.25vге туура келет Жакшылап түшүнүү үчүн мен чыңалуу өлчөө үчүн 123D схемасы менен реалдуу убакыт симуляциясын тиркелдим Калибрлөө: 3.25v эквиваленти 696 1ге барабар 3.25/696 = 4.669mv Vout = (4.669*sample1)/1000 вольт Чыныгы батареянын чыңалуусу = (2*Vout) вольтАРДУИНО КОДУ: // 2 сек интервал менен чыңалуу бөлүштүргүчтөн 150 үлгү алуу жана андан кийин (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2) үчүн чогултулган маалыматтардын үлгүлөрү орточо; // бөлүштүргүч схеманын кечигүүсүнөн чыңалууну окуу (2); } sample1 = sample1/150; чыңалуу = 4.669*2*sample1/1000;

4 -кадам: Учурдагы өлчөө

Учурдагы Өлчөө
Учурдагы Өлчөө
Учурдагы Өлчөө
Учурдагы Өлчөө

Учурдагы өлчөө үчүн мен Hall Effect учурдагы сенсор ACS 712 (20 A) колдондум. Базарда ACS712 сенсорунун ар кандай диапазону бар, андыктан сиздин талабыңызга жараша тандаңыз. Нандын тактай диаграммасында мен LEDди жүк катары көрсөттүм, бирок иш жүзүндөгү жүк башка. ЭМГЕК ПРИНЦИПИ: Холл эффекти - өткөргүчтөгү электр тогуна кайчылаш электр өткөргүчтүн чыңалуусун (Холлдун чыңалуусун) өндүрүү жана токко перпендикуляр болгон магнит талаасы. Hall Effect сенсору жөнүндө көбүрөөк билүү үчүн бул жерди басыңыз ACS 712 сенсорунун маалымат баракчасы бул жерден табылган. Маалымат баракчасынан 1. ACS 712 позитивдүү жана терс 20Ампти өлчөйт, аналогдук чыгууга 100мВ/А 2. Чыгуу чыңалуусу аркылуу тесттик ток жок VCC/2 = 5v/2 = 2.5V Калибрлөө: Аналогдук окуу 0vдан 5vге барабар 0-1023 маанисин чыгарат Аналогдук окуу 1 = (5/1024) V = 4.89mv Мааниси = (4.89*Аналогдук окуу мааниси)/ 1000 V Бирок маалымат баракчалары боюнча офсеттер 2,5В (Учурдагы нөл сенсордун өндүрүшүнөн 2,5В алат) Иш жүзүндөгү мааниси = (мааниси-2,5) V Ампердеги ток = чыныгы мааниси*10ARDUINO КОДУ: // 150 үлгүлөрдү алуу сенсорлор 2сек жана андан кийин алынган маалыматтар үчүн орточо көрсөткүчтөр (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // сенсордун кечигүүсүнөн токту окуу (2); } sample2 = sample2/150; val = (5.0*sample2) /1024.0; actualval = val-2.5; // офсеттик чыңалуу 2,5v ампер = актуалдуу*10;

5 -кадам: Убакытты өлчөө

Убакытты өлчөө үчүн эч кандай тышкы жабдыктын кереги жок, анткени ARDUINO өзү орнотулган таймерге ээ. Millis () функциясы Arduino тактасы учурдагы программаны иштете баштагандан бери миллисекундтардын санын кайтарат. // убакытты миллисекунд менен эсептөө узак убакыт = милисек/1000; // миллисекунддарды секундага айландыруу

6 -кадам: ARDUINO кантип энергияны жана энергияны эсептейт

totamps = totamps+amps; // жалпы amps avgamps = totamps/time эсептөө; // орточо ампер amphr = (avgamps*time)/3600; // амп-саат ватт = чыңалуу*ампер; // күч = чыңалуу*учурдагы энергия = (ватт*убакыт)/3600; Ватт-сек дагы 1 саатты (3600сек) // энергия = (ватт*убактысы)/(1000*3600) бөлүү менен кайрадан Ватт-саатка айландырылат; кВт.саатта окуу үчүн

7 -кадам: Visual Output

Visual Output
Visual Output

Бардык жыйынтыктар сериялык монитордо же ЖКнын жардамы менен көрүнүшү мүмкүн. Мен мурунку кадамдарда алынган бардык жыйынтыктарды көрсөтүү үчүн 16x2 символдуу ЖКны колдоном. Схемалар үчүн жогоруда көрсөтүлгөн нан тактасынын схемасын караңыз. LCDди ARDUINO менен төмөндөгүдөй туташтырыңыз: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND пин + Резистор же потенциометр 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Connected 8 D1 -> Arduino -Туташкан жок 9. D2 -> Arduino -Туташкан жок 10. D3 -> Arduino -Туташкан жок 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Resistor (Backlight power) 16. K -> Arduino GND (Backlight ground) ARDUINO CODE: Serial Monitor үчүн:

Serial.print ("VOLTAGE:"); Serial.print (чыңалуу); Serial.println ("Вольт"); Serial.print ("CURRENT:"); Serial.print (amps); Serial.println ("Amps"); Serial.print ("КҮЧ:"); Serial.print (ватт); Serial.println ("Ватт"); Serial.print ("ENERGY CONSUMED:"); Serial.print (энергия); Serial.println ("Watt-Hour"); Serial.println (""); // боштуктун кечигүүсүнөн кийин параметрдин кийинки топтомун басып чыгаруу (2000); ЖК үчүн: ЖК дисплейи үчүн адегенде кодго "LiquidCrystal" китепканасын импорттоо керек. LequidCrystal китепканасы жөнүндө көбүрөөк билүү үчүн бул жерди басыңыз ЖК үйрөткүч үчүн бул жерди басыңыз Төмөнкү код LCDде энергия жана энергия боюнча бардык эсептөөлөрдү көрсөтүү үчүн формат #clude lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // пин 9ду чыгаруу analogWrite катары коюңуз (backLight, 150); // жарыктын интенсивдүүлүгүн көзөмөлдөйт 0-254 lcd.begin (16, 2); // мамычалар, саптар. дисплейдин өлчөмү lcd.clear (); // экранды тазалоо} void loop () {lcd.setCursor (16, 1); // курсорду дисплей санынын сыртына коюңуз lcd.print (""); // басып чыгаруу бош тамга кечигүү (600); //////////////////////////////////////////// Басып чыгаруу кубатын жана энергиясын ЖКга/ /////////////////////////////////////////////////////////////c/cl/set (1, 0); // курсорду 1 -колго жана 1 -катарга lcd.print (ватт) коюңуз; lcd.print ("W"); lcd.print (чыңалуу); lcd.print ("V"); lcd.setCursor (1, 1); // курсорду 1 -колго жана 2 -катарга lcd.print (энергия) коюңуз; lcd.print ("WH"); lcd.print (ампер); lcd.print ("A"); }

8 -кадам: Xively.com сайтына маалыматтарды жүктөө

Xively.com сайтына маалымат жүктөө
Xively.com сайтына маалымат жүктөө
Xively.com сайтына маалымат жүктөө
Xively.com сайтына маалымат жүктөө
Xively.com сайтына маалымат жүктөө
Xively.com сайтына маалымат жүктөө

Жогорудагы скриншотторду жакшыраак туруу үчүн караңыз. Xively.com сайтына маалыматтарды жүктөө үчүн төмөнкү китепкананы биринчи жүктөө үчүн HttpClient: бул жерди басыңыз: бул жерде чыкылдатыңыз SPI: arduino IDEден импорттоо (эскиз -> Импорттук китепкананы…..) Ethernet: arduinoдон импорттоо IDE ((эскиз -> Китепкананы импорттоо…..) https://xively.com менен эсеп ачыңыз (мурунку pachube.com жана cosm.com) https://xively.com сайтында акысыз иштеп чыгуучу эсебине катталыңыз.

Колдонуучу атын, сырсөздү тандаңыз, дарегиңизди жана убакыт алкагын белгилеңиз ж.б.. Сиз ырастоочу электрондук кат аласыз;

андан кийин каттоо эсебиңизди активдештирүү үчүн активдештирүү шилтемесин басыңыз. Аккаунтту ийгиликтүү ачкандан кийин, иштеп чыгуу баракчасына багытталасыз

  • +Түзмөк кошуу кутучасын басыңыз
  • Түзмөгүңүздүн аталышын жана сүрөттөмөсүн бериңиз (мис. ENERGY MONITORING) ·
  • Жеке же жалпыга ачык маалыматтарды тандаңыз (мен купуяны тандайм) ·
  • Түзмөк кошууну чыкылдатыңыз

Түзмөктү кошкондон кийин, сиз көптөгөн маанилүү маалымат бар жаңы баракка багытталасыз

  • Продукт идентификатору, Продукт сыры, Сериялык номер, Жандандыруу коду ·
  • Feed ID, FeedURL, API End Point (Feed ID ARDUINO кодунда колдонулат)
  • Каналдарды кошуңуз (IChoose ENERGY and POWER, бирок сиз өзүңүздүн каалооңузга жараша тандай аласыз) Параметр үчүн бирдикти жана белгини бериңиз ·
  • Жайгашууңузду кошуңуз ·
  • API ачкычтары (ARDUINO кодунда колдонулат, бул номерди бөлүшүүдөн качыңыз) ·
  • Триггерлер (энергияны керектөө белгилүү бир чектен ашкандай, окуя болгондо ping aweb баракчасы)

9 -кадам: Xively жана ARDUINO Code

Бул жерде мен кийинки кадамда өзүнчө тиркелген SD картанын маалыматын эсепке албаганда, энергия эсептегичтин толук кодун (бета версиясын) тиркедим. / ** Энергиянын мониторинги боюнча маалыматтарды xivelyге жүктөө **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Xively API ачкычыңызды киргизиңиз #FEED_IDди аныктоо xxxxxxxxx // Xively feed IDңизди киргизиңиз // MAC дарегиңиз үчүн Ethernet калкан байт mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Биз байкап турган аналогдук пин (0 жана 1 Ethernet калканы тарабынан колдонулат) int sensorPin = 2; unsigned long lastConnectionTime = 0; // акыркы жолу биз Cosm constко кошулганбыз unsigned long connectionInterval = 15000; // миллисекундтарда Cosmго туташуунун ортосундагы кечигүү // Cosm китепканасын инициализациялоо // Биздин datastream ID char sensorId үчүн сапты аныктоо = "POWER"; char sensorId2 = "ENERGY"; XivelyDatastream маалымат агымдары = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Маалымат агымын XivelyFeed түрмөгүнө ороо (FEED_ID, маалымат агымдары, 2/ * маалымат агымынын саны */); EthernetClient кардары; XivelyClient xivelyclient (кардар); void setup () {Serial.begin (9600); Serial.println ("Тармакты баштоо"); while (Ethernet.begin (mac)! = 1) {Serial.println ("IP дарегин DHCP аркылуу алуу катасы, кайра аракет кылып…"); кечигүү (15000); } Serial.println ("Тармак инициализацияланган"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // маалыматтарды xively getData () жөнөтүү; // маалымат агымын xively lastConnectionTime = millis () дан кайра окуңуз; // байланыш убактысын жаңыртуу, ошондуктан биз кайра туташуудан мурун күтөбүз}} void sendData () {int sensor1 = watt; int sensor2 = энергия; datastreams [0].setFloat (sensor1); // кубаттуулуктун маалымат агымдары [1].setFloat (sensor2); // энергетикалык наркы Serial.print ("Окуу күчү"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Энергияны окуу"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Xivelyге жүктөө"); int ret = xivelyclient.put (түрмөк, API_KEY); Serial.print ("PUT кайтаруу коду:"); Serial.println (ret); Serial.println (); } // маалымат агымынын маанисин xivelyден алыңыз, биз жараксыз деп тапкан getData () {Serial.println ("Xivelyден маалыматтарды окуу") басып чыгарабыз; int ret = xivelyclient.get (түрмөк, API_KEY); Serial.print ("GET кайтаруу коду:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (feed [0]); Serial.print ("Power value is:"); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream is:"); Serial.println (түрмөк [1]); Serial.print ("Энергиянын мааниси:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

10 -кадам: Маалыматтарды SD картага киргизүү

SD картада маалыматтарды сактоо үчүн сиз SD китепканасын импорттошуңуз керек Сабак үчүн бул жерди басыңыз LCD дисплейи үчүн код жазуу жана xively.com маалыматын жүктөө. Бирок мен бета версиянын кодун жакшыртууга аракет кылып жатам, ошондо бир эле код бардык функцияларды камтышы мүмкүн (ЖК дисплей, Xively маалыматтарды жүктөө жана SD картада сактоо). Маалыматты каттоо коду төмөндө тиркелет. Менин кодумду өзгөртүү аркылуу жакшыраак кодду мени менен бөлүшүңүз. Бул менин биринчи техникалык нускамам, эгер кимдир бирөө кандайдыр бир ката тапса, комментарий жазуудан тартынба.. мен өзүмдү жакшырта алам. Эгер бул долбоордун жакшыртылган жерлерин тапсаңыз, комментарий калтырыңыз же мага билдирүү, Ошентип, долбоор күчтүү болот. Мен башкаларга, ошондой эле мага пайдалуу болот деп ойлойм.

123D Circuits Contest
123D Circuits Contest
123D Circuits Contest
123D Circuits Contest

123D Circuits конкурсунда үчүнчү сыйлык

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