Բովանդակություն:

ARDUINO ENERGY METER: 10 քայլ (նկարներով)
ARDUINO ENERGY METER: 10 քայլ (նկարներով)

Video: ARDUINO ENERGY METER: 10 քայլ (նկարներով)

Video: ARDUINO ENERGY METER: 10 քայլ (նկարներով)
Video: Setting up a 3d Printer with MKS sGen L v1.0 2024, Նոյեմբեր
Anonim
Image
Image
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER

[Նվագարկել տեսանյութը]

Ես պատկանում եմ Հնդկաստանի Օդիշա գյուղին, որտեղ հաճախակի անջատումը շատ տարածված է: Դա խոչընդոտում է յուրաքանչյուրի կյանքը: Իմ մանկության օրերին մայրամուտից հետո ուսումը շարունակելը իսկական մարտահրավեր էր: Այս խնդրի պատճառով ես փորձնական հիմունքներով նախագծեցի արևային համակարգ իմ տան համար: Ես օգտագործել եմ 10 Վտ հզորությամբ արևային վահանակ ՝ 6 Վ լույսի ներքո ՝ մի քանի լուսավոր LED լուսավորելու համար: Բազում դժվարությունների հանդիպելուց հետո նախագիծը հաջողվեց: Հետո որոշեցի վերահսկել համակարգում ներգրավված լարումը, հոսանքը, հզորությունը և էներգիան: Սա բերեց ԷՆԵՐԳԵՏԻԿՅԱՆ ՄԵՏԱՐԻ նախագծման գաղափարը: Ես օգտագործեցի ARDUINO- ն որպես այս նախագծի հիմքը, քանի որ նրա IDE- ում շատ հեշտ է գրել կոդը, և ինտերնետում առկա են հսկայական թվով բաց կոդերի գրադարաններ, որոնք կարող են օգտագործվել ըստ պահանջ. Ես փորձարկել եմ նախագիծը շատ փոքր գնահատված (10 Վտ) արևային համակարգի համար, բայց դա հեշտությամբ կարող է փոփոխվել `ավելի բարձր գնահատման համակարգի համար օգտագործելու համար:

Իմ բոլոր նախագծերը կարող եք գտնել այստեղ ՝

Առանձնահատկություն. Էներգիայի մոնիտորինգ 1. LCD էկրանով 2. ինտերնետի միջոցով (Xively վերբեռնում) 3. SD քարտի տվյալների մուտքագրում

Դուք կարող եք տեսնել իմ նոր ուսանելի ARDUINO MPPT SOLAR CHARGE CONTROLLER (Version-3.0)

Նաև կարող եք տեսնել իմ մյուս հրահանգները

ARDUINO SOLAR CHARGE CONTROLLER (տարբերակ 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (տարբերակ 1)

Քայլ 1: Պահանջվող մասեր

Պահանջվող մասեր
Պահանջվող մասեր

1. ARDUINO UNO (Ամազոն) 2. ARDUINO ETHERNET SHIELD (Ամազոն)

3. 16x2 CHARACTER LCD (Amazon)

4. ACS 712 ԸՆԹԱԻԿ ՍԵՆՍՈՐ (Ամազոն) 4. ԴԻՄԱԴԻՐՆԵՐ (10k, 330ohm) (Ամազոն) 5. 10 Կ ՊՈՏԵՆՍԻՈՄԵՏՐ (Ամազոն) 6. JUMPER WIRES (Ամազոն) 7. ETHERNET CABLE (Ամազոն) 8. ՀԱREԻ տախտակ (Amazon)

Քայլ 2: Ուժ և էներգիա

Էլեկտրաէներգիա ՝ լարման (վոլտ) և ընթացիկ (ամպեր) P = VxI Հզորության միավորը Watt կամ KW Էներգիա. Էներգիան ուժի (վտ) և ժամանակի (ժամ) արտադրանք է E = Pxt էներգիայի միավորը ՝ Վտ ժամ կամ կիլովատ Ourամ (կՎտժ) Վերը նշված բանաձևից պարզ է դառնում, որ էներգիան չափելու համար մեզ անհրաժեշտ են երեք պարամետրեր 1. Լարման 2. Ընթացիկ 3. Timeամանակ

Քայլ 3. Լարման չափում

Լարման չափում
Լարման չափում
Լարման չափում
Լարման չափում
Լարման չափում
Լարման չափում

Լարման չափումը կատարվում է լարման բաժանարար սխեմայի օգնությամբ: Քանի որ ARDUINO անալոգային կապի մուտքային լարումը սահմանափակվում է 5 Վ -ով, ես նախագծեցի լարման բաժանարարը այնպես, որ դրանից ելքային լարումը պետք է լինի 5 Վ -ից պակաս: Իմ մարտկոցը, որն օգտագործվում է պահելու համար արևային վահանակից ստացվող էներգիան գնահատվում է 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 որը ցածր է 5 վ -ից և հարմար է ARDUINO անալոգային քորոցին ցուցադրել են 9 վոլտ մարտկոց ՝ մալուխային տախտակի մեջ, օրինակ ՝ լարերը միացնելու համար: Բայց իրական մարտկոցը, որը ես օգտագործել եմ, 6 վոլտ, 5.5Ah կապարաթթու մարտկոց է: Լարման չափաբերում. Երբ մարտկոցը լիցքավորված լինի (6.5 վ), մենք կստանանք a Vout = 3.25v և ցածր արժեք մարտկոցի այլ ցածր լարման դեպքում: AEDUINO ADC- ը անալոգային ազդանշանը փոխակերպում է համապատասխան թվային մոտարկման: Երբ մարտկոցի լարումը 6.5 վ է, ես ստացել եմ 3.25 վ լարման բաժանարարից, իսկ սերիական մոնիտորում ՝ 1 = 696, որտեղ sample1- ը ADC արժեքն է 3.25 վ: Ավելի լավ հասկանալու համար ես իրական ժամանակի մոդելավորումը կցել եմ 123D- ով: լարման չափման սխեմա. 3.25 վ համարժեք 696 1 -ին համարժեք է 3.25/696 = 4.669 մվ Vout = (4.669*նմուշ 1)/1000 վոլտ Մարտկոցի փաստացի լարումը = (2*Vout) վոլտ ԴԱՐԴՈINԻՆՈ ԿՈԴ. // լարման բաժանարարից 150 նմուշ վերցնել 2 վրկ ընդմիջումով այնուհետև միջինացրեք (int i = 0; i <150; i ++) համար հավաքված տվյալների օրինակները {sample1 = sample1+analogRead (A2); // կարդալ լարումը բաժանարարի միացման հետաձգումից (2); } sample1 = sample1/150; լարման = 4.669*2*նմուշ 1/1000;

Քայլ 4: Ընթացիկ չափում

Ընթացիկ չափում
Ընթացիկ չափում
Ընթացիկ չափում
Ընթացիկ չափում

Ընթացիկ չափման համար ես օգտագործել եմ Hall Effect ընթացիկ սենսորը ACS 712 (20 Ա): Շուկայում առկա են տարբեր ընթացիկ տիրույթի ACS712 սենսորներ, այնպես որ ընտրեք ըստ ձեր պահանջի: Հացի տախտակի դիագրամում ես LED- ն ցույց եմ տվել որպես բեռ, սակայն իրական բեռը տարբեր է: ԱՇԽԱՏԱՆՔԻ ՍԿINԲՈՆՔ. Հոլի էֆեկտը լարման տարբերության (սրահի լարման) արտադրությունն է էլեկտրական հաղորդիչի միջով, որը հոսանքի էլեկտրական հոսանքի լայնակի է և հոսանքին ուղղահայաց մագնիսական դաշտ: Hall Effect սենսորի մասին ավելին իմանալու համար կտտացրեք այստեղ ACS 712 սենսորի տվյալների թերթիկը գտնվում է այստեղ Տվյալների թերթիկից 1. ACS 712 չափել դրական և բացասական 20Amps ՝ համապատասխան 100mV/A անալոգային ելքին: 2. Ելքային լարման միջոցով փորձարկման հոսանք չկա VCC/2 = 5v/2 = 2.5VCalibration: Անալոգային ընթերցումը արտադրում է 0-1023 արժեք ՝ հավասար 0v- ից մինչև 5v: Այսպիսով, անալոգային ընթերցում 1 = (5/1024) V = 4.89 մվ Արժեք = = (4.89*Անալոգային ընթերցման արժեք)/ 1000 Վ Բայց, ըստ տվյալների թերթերի, օֆսեթը 2.5 Վ է (Երբ ընթացիկ զրոյից սենսորի ելքից կստանաք 2.5 Վ) Փաստացի արժեքը = (արժեք-2.5) Վ Ընթացիկ ամպերում = փաստացի արժեքը*10 ԱՐԴՈINԻՆՈ ԿՈԴ ՝ // վերցնելով 150 նմուշ 2 վայրկյան ընդմիջումով սենսորներ, այնուհետև միջինացված (նմուշների համար հավաքված տվյալների (int i = 0; i <150; i ++) համար {sample2+= analogRead (A3); // կարդալ սենսորի ուշացումից հոսանքը (2); } sample2 = sample2/150; val = (5.0*նմուշ 2)/1024.0; փաստացի = val-2.5; // օֆսեթ լարումը 2.5 վ ամպեր է = փաստացի*10;

Քայլ 5: Timeամանակի չափում

Measurementամանակի չափման համար արտաքին սարքավորումների կարիք չկա, քանի որ ARDUINO- ն ինքն է ներկառուցված ժամաչափ: The millis () գործառույթը վերադարձնում է միլիվայրկյանների թիվը, քանի որ Arduino- ի տախտակը սկսել է գործարկել ընթացիկ ծրագիրը: ԱՐԴՈINԻՆՈ ԿՈԴ ՝ երկար milisec = millis (); // ժամանակը հաշվել միլիվայրկյաններով երկար ժամանակ = միլիսեկ/1000; // միլիվայրկյանների փոխակերպում վայրկյանների

Քայլ 6. Ինչպես է ARDUINO- ն հաշվարկում էներգիան և էներգիան

totamps = totamps+amps; // հաշվարկել ընդհանուր ամպեր avgamps = totamps/ժամանակ; // միջին amps amphr = (avgamps*ժամանակ)/3600; // ամպ-ժամ վտ = լարում*ամպեր; // հզորություն = լարման*ընթացիկ էներգիա = (վտ*ժամանակ)/3600; Watt-sec- ը կրկին փոխակերպվում է Watt-Hr- ի ՝ բաժանելով 1 ժամ (3600 վրկ) // էներգիա = (վտ*ժամանակ)/(1000*3600); կՎտժ -ով կարդալու համար

Քայլ 7: Տեսողական արդյունք

Տեսողական արդյունք
Տեսողական արդյունք

Բոլոր արդյունքները կարող են արտացոլվել սերիական մոնիտորի կամ LCD- ի միջոցով: Ես օգտագործել եմ 16x2 նիշանի LCD ՝ նախորդ քայլերում ձեռք բերված բոլոր արդյունքները ցուցադրելու համար: Սխեմաների համար տե՛ս վերևում ներկայացված հացի տախտակը: Միացրեք LCD- ը ARDUINO- ի հետ, ինչպես տրված է ստորև. LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND քորոց + դիմադրություն կամ պոտենցիոմետր 4. RS -> Arduino կապ 8 5. RW -> Arduino կապ 7 6. E -> Arduino կապ 6 7. D0 -> Arduino -Միացված չէ 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: For Serial Monitor:

Serial.print ("VOLTAGE:"); Serial.print (լարման); Serial.println («Վոլտ»); Serial.print ("CURRENT:"); Serial.print (amps); Serial.println («Ամպեր»); Serial.print ("POWER:"); Serial.print (watt); Serial.println ("Watt"); Serial.print («ԷՆԵՐԳԻԱ սպառվում է.»); Serial.print (էներգիա); Serial.println («Վատ-ժամ»); Serial.println (""); // պարամետրերի հաջորդ հավաքածուները տպել դատարկ գծի հետաձգումից հետո (2000 թ.); LCD- ի համար. LequidCrystal գրադարանի մասին ավելին իմանալու համար կտտացրեք այստեղ LCD ձեռնարկի համար clickhere Ստորև բերված ծածկագիրը LCD- ում էներգիայի և էներգիայի ամբողջ հաշվարկը ցուցադրելու ձևաչափ է #ներառել LCD (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // սահմանել PIN 9 -ը որպես ելքային analogWrite (backLight, 150); // վերահսկում է լուսավորության լուսավորության ինտենսիվությունը 0-254 լք. սկիզբը (16, 2); // սյուներ, տողեր: ցուցադրման չափը lcd.clear (); // մաքրել էկրանը} void loop () {lcd.setCursor (16, 1); // սահմանել կուրսորը ցուցադրման հաշվից դուրս lcd.print (""); // տպել դատարկ նիշերի հետաձգում (600); ////////////////////////////////////////// տպել հզորություն և էներգիա LCD էկրանին/ //////////////////////////////////////////////// lcd.setCursor (1, 0); // կուրսորը սահմանել 1 -ին սյունակում և 1 -ին տողում lcd.print (watt); 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: կտտացրեք այստեղ Xively: կտտացրեք այստեղ SPI: Ներմուծում arduino IDE- ից (ուրվագիծ -> գրադարան ներմուծել…..) Ethernet: Ներմուծում arduino- ից IDE ((ուրվագիծ -> գրադարան ներմուծել…..) Բացեք հաշիվ https://xively.com- ով (նախկինում ՝ pachube.com և cosm.com) Գրանցվեք անվճար ծրագրավորողի հաշվի համար ՝

Ընտրեք օգտվողի անուն, գաղտնաբառ, նշեք ձեր հասցեն և ժամային գոտին և այլն: Դուք կստանաք հաստատման նամակ

ապա կտտացրեք ակտիվացման հղմանը `ձեր հաշիվը ակտիվացնելու համար: Հաշիվը հաջողությամբ բացելուց հետո դուք կշեղվեք դեպի devicesարգացման սարքերի էջ

  • Կտտացրեք +Ավելացնել սարքի վանդակին
  • Անվանեք ձեր սարքին և նկարագրությունը (օրինակ ՝ ԷՆԵՐԳԵՏԻԿԱՅԻ ՄՈՆԻՏՈՐԻՆԳ) ·
  • Ընտրեք անձնական կամ հանրային տվյալներ (ես ընտրում եմ մասնավոր) ·
  • Կտտացրեք Ավելացնել սարքը

Սարքը ավելացնելուց հետո դուք կուղղվեք նոր էջ, որտեղ կան շատ կարևոր տեղեկություններ

  • Ապրանքի ID, Ապրանքի գաղտնիք, սերիական համար, ակտիվացման կոդ ·
  • Feed ID, FeedURL, API End Point (Feed ID- ն օգտագործվում է ARDUINO ծածկագրում)
  • Ավելացնել ալիքներ (IChoose ENERGY և POWER, բայց կարող եք ընտրել ըստ ձեր ընտրության) Պարամետրի համար տվեք միավոր և խորհրդանիշ ·
  • Ավելացրեք ձեր տեղը ·
  • API ստեղներ (օգտագործվում են ARDUINO կոդի մեջ, խուսափեք այս համարը կիսելուց) ·
  • Գործարկիչներ (պինգ -ակնարկ էջ, երբ իրադարձություն է տեղի ունենում, ինչպես երբ էներգիայի սպառումը գերազանցում է որոշակի սահմանը)

Քայլ 9. Xively և ARDUINO ծածկագիր

Այստեղ ես կցեցի էներգիայի հաշվիչի ամբողջական ծածկագիրը (բետա տարբերակ) `առանց 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; անստորագիր երկար lastConnectionTime = 0; // վերջին անգամ մենք միացանք Cosm const անստորագիր long connectionInterval = 15000; // մի քանի վայրկյան Cosm- ին միանալու միջև ուշացում // Initialize the Cosm գրադարան // Սահմանեք տողը մեր datastream ID char sensorId = "POWER"; char sensorId2 = "ԷՆԵՐԳԵՏԻԿԱ"; XivelyDatastream տվյալների հաղորդումներ = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Փաթեթավորեք տվյալների հոսքը XivelyFeed հոսքի մեջ (FEED_ID, datastreams, 2/ * շարք datastreams */); EthernetClient հաճախորդ; XivelyClient xivelyclient (հաճախորդ); void setup () {Serial.begin (9600); Serial.println («Inանցի սկզբնավորում»); while (Ethernet.begin (mac)! = 1) {Serial.println («Չհաջողվեց IP հասցե ստանալ DHCP- ի միջոցով, նորից փորձել …»); ուշացում (15000); } Serial.println ("Networkանցը նախնականացված է"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // տվյալները ուղարկել xively getData (); // կարդալ datastream- ը xively lastConnectionTime = millis (); // թարմացնել կապի ժամանակը, այնպես որ մենք սպասում ենք նորից միանալուց առաջ}} void sendData () {int sensor1 = watt; int sensor2 = էներգիա; datastreams [0].setFloat (տվիչ 1); // էներգիայի արժեքը datastreams [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- ից, տպելով այն արժեքը, որը մենք ստացել ենք void getData () {Serial.println ("Տվյալների ընթերցում Xively- ից"); int ret = xivelyclient.get (հոսք, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (հոսք [0]); Serial.print ("Էլեկտրաէներգիայի արժեքը` "); Serial.println (հոսք [0].getFloat ()); Serial.print («Տվյալների հոսքն է ՝»); Serial.println (հոսք [1]); Serial.print ("Էներգիայի արժեքը` "); Serial.println (հոսք [1].getFloat ()); } Serial.println ();

Քայլ 10: Տվյալների մուտքագրում SD քարտում

SD քարտում տվյալների պահեստավորման համար դուք պետք է ներմուծեք SD գրադարան Ուղեցույցի համար կտտացրեք այստեղ SD գրադարանի մասին ավելին իմանալու համար կտտացրեք այստեղ SD քարտում տվյալները պահելու ծածկագիրը գրված է առանձին, քանի որ իմ ARDUINO UNO- ում բավարար հիշողություն չունեմ LCD էկրանին և տվյալների վերբեռնման համար ծածկագիր գրել xively.com. Բայց ես փորձում եմ բարելավել բետա տարբերակի ծածկագիրը, որպեսզի մեկ ծածկագիրը կարողանա պարունակել բոլոր հնարավորությունները (LCD էկրան, տվյալների ակտիվ վերբեռնում և SD քարտում տվյալների պահում): Տվյալների գրանցման ծածկագիրը կցված է ստորև: Եթե որևէ մեկը գրում է ավելի լավ կոդ ՝ փոփոխելով իմ կոդը, խնդրում եմ կիսվեք ինձ հետ: Սա իմ առաջին տեխնիկական հրահանգն է: Եթե որևէ մեկը դրանում որևէ սխալ է գտնում, ազատ զգացեք մեկնաբանություններում: կամ հաղորդագրություն ուղարկեք ինձ. Այսպիսով, նախագիծը ավելի հզոր կլինի: Կարծում եմ, որ այն օգտակար կլինի ինչպես մյուսների, այնպես էլ ինձ համար:

123D սխեմաների մրցույթ
123D սխեմաների մրցույթ
123D սխեմաների մրցույթ
123D սխեմաների մրցույթ

Երրորդ մրցանակ 123D սխեմաների մրցույթում

Խորհուրդ ենք տալիս: