Tartalomjegyzék:

ARDUINO ENERGY METER: 10 lépés (képekkel)
ARDUINO ENERGY METER: 10 lépés (képekkel)

Videó: ARDUINO ENERGY METER: 10 lépés (képekkel)

Videó: ARDUINO ENERGY METER: 10 lépés (képekkel)
Videó: Котика ударило током, 10 т. Вольт 2024, November
Anonim
Image
Image
ARDUINO ENERGIAMÉRŐ
ARDUINO ENERGIAMÉRŐ
ARDUINO ENERGIAMÉRŐ
ARDUINO ENERGIAMÉRŐ

[Videó lejátszása]

Odisha falujába tartozom, Indiában, ahol a gyakori áramszünet nagyon gyakori. Mindenki életét akadályozza. Gyermekkoromban az alkonyat utáni tanulmányok folytatása igazi kihívás volt. E probléma miatt kísérleti jelleggel megterveztem egy napelemrendszert az otthonomhoz. 10 Wattos, 6 V -os napelemet használtam néhány fényes LED megvilágítására. A sok nehézség után a projekt sikeres volt. Aztán úgy döntöttem, hogy figyelemmel kísérem a rendszerben lévő feszültséget, áramot, teljesítményt és energiát. Ez hozta az ötletet egy ENERGIA MÉRŐ tervezésére. Az ARDUINO -t használtam a projekt középpontjában, mert nagyon könnyű kódot írni az IDE -jébe, és rengeteg nyílt forráskódú könyvtár áll rendelkezésre az interneten, amelyek a A kísérletet a nagyon kicsi (10 wattos) napelemes rendszerrel végeztem, de ez könnyen módosítható a magasabb besorolású rendszerekhez.

Az összes projektemet itt találod:

Funkció: Energiafelügyelet 1. LCD kijelzővel 2. interneten keresztül (Xively feltöltés) 3. Adatnaplózás SD kártyán

Láthatja az új, utasítható ARDUINO MPPT SOLAR CHARGE CONTROLLER-et (3.0 verzió)

Láthatod a többi utasításomat is

ARDUINO SOLAR CHARGE CONTROLLER (Változat 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Változat-1)

1. lépés: Szükséges alkatrészek:

Szükséges alkatrészek
Szükséges alkatrészek

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

3. 16x2 karakteres LCD (Amazon)

4. ACS 712 CURRENT SENSOR (Amazon) 4. Ellenállások (10k, 330ohm) (Amazon) 5. 10K POTENCIOMÉTER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET KÁBEL (Amazon) 8. BREAD BOARD (Amazon)

2. lépés: Erő és energia

Teljesítmény: A teljesítmény a feszültség (volt) és az áramerősség (Amp) szorzata Óra (kWh) A fenti képletből kiderül, hogy az energia méréséhez három paraméterre van szükség: 1. Feszültség 2. Áram 3. Idő

3. lépés: Feszültségmérés

Feszültségmérés
Feszültségmérés
Feszültségmérés
Feszültségmérés
Feszültségmérés
Feszültségmérés

A feszültséget feszültségosztó áramkör segítségével mérik. Mivel az ARDUINO analóg érintkező bemeneti feszültsége 5 V -ra korlátozódik, a feszültségosztót úgy terveztem meg, hogy a kimeneti feszültség 5 V -nál kisebb legyen. A napelem tápellátása 6v, 5,5Ah névleges. Tehát le kell lépnem erről a 6,5v -ról 5V -nál alacsonyabb feszültségre. R1 = 10k és R2 = 10K használtam. R1 és R2 értéke alacsonyabb is lehet, de a probléma az, hogy amikor az ellenállás alacsony, nagyobb áram folyik át rajta, ennek következtében nagy mennyiségű teljesítmény (P = I^2R) hő formájában oszlik el. Tehát különböző ellenállási értékeket lehet választani, de ügyelni kell arra, hogy minimálisra csökkentsük az ellenállás teljes energiaveszteségét. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 teljesen feltöltve kimutatták a 9 voltos akkumulátort a csupasz tábla áramkörében, csak például a vezetékek csatlakoztatására. De a tényleges akkumulátor, amit használtam, egy 6 voltos, 5,5 Ah -ás ólomakkumulátor. Feszültség kalibrálás: Amikor az akkumulátor teljesen fel van töltve (6,5 V), a Vout = 3,25 V és alacsonyabb érték más alacsonyabb akkumulátorfeszültség esetén. Az AEDUINO ADC konvertálja az analóg jelet a megfelelő digitális közelítésre. Amikor az akkumulátor feszültsége 6,5 V, 3,25 V -ot kaptam a feszültségosztótól, és a sample1 = 696 -ot a soros monitoron, ahol a minta 1 az ADC értéke 3,25 V -nak felel meg. A jobb megértés érdekében csatoltam a valós idejű szimulációt 123D áramkörrel a feszültségméréshez Kalibrálás: 3.25v egyenértékű 696 1 -vel 3.25/696 = 4.669mv és ezután átlagolja a minták adatait (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // a feszültség leolvasása az osztó áramkör késleltetéséből (2); } minta1 = minta1/150; feszültség = 4,669*2*minta1/1000;

4. lépés: Árammérés

Aktuális mérés
Aktuális mérés
Aktuális mérés
Aktuális mérés

Az áramméréshez egy Hall Effect áramérzékelőt használtam, ACS 712 (20 A). A piacon különböző ACS712 áramtartomány érhető el, ezért válasszon igényei szerint. A kenyértáblák diagramján a LED -et terhelésként mutattam be, de a tényleges terhelés eltérő. az áramra merőleges mágneses mező. Ha többet szeretne megtudni a Hall Effect szenzorról, kattintson ide. Az ACS 712 érzékelő adatlapja itt található. Az 1. adatlapból. Az ACS 712 pozitív és negatív 20Amp -ot mér, ami megfelel az analóg 100mV/A kimenetnek. 2. A kimeneti feszültségen nincs tesztáram. VCC/2 = 5v/2 = 2,5V 1000 V De az adatlapok szerint az eltolás 2,5 V (amikor az áram nulla, akkor 2,5 V-ot kap az érzékelő kimenetéből) Tényleges érték = (érték-2,5) V Áramerősség amp-ben = tényleges érték*10ARDUINO KÓD: // 150 minta vétele érzékelők 2 másodperces intervallummal, majd átlagolják a mintaadatokat (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // az áram leolvasása az érzékelő késleltetéséből (2); } minta2 = minta2/150; val = (5,0*minta2)/1024,0; tényleges érték = val-2,5; // az eltolt feszültség 2,5v amper = tényleges érték*10;

5. lépés: Időmérés

Az időméréshez nincs szükség külső hardverre, mivel maga az ARDUINO rendelkezik beépített időzítővel. A millis () függvény ezredmásodpercek számát adja vissza azóta, hogy az Arduino kártya elkezdte futtatni az aktuális programot. ARDUINO KÓD: long milisec = millis (); // idő kiszámítása ezredmásodpercben hosszú idő = milisec/1000; // ezredmásodpercek másodpercre konvertálása

6. lépés: Hogyan számolja ki az ARDUINO az energiát és az energiát?

totamps = totamps+erősítők; // összes erősítő kiszámítása avgamps = totamps/time; // átlagos erősítő amphr = (avgamps*idő)/3600; // amp-óra watt = feszültség*amper; // teljesítmény = feszültség*áramenergia = (watt*idő)/3600; A Watt-sec ismét Watt-Hr-ra konvertálódik 1 órás (3600 mp) // energia = (watt*idő)/(1000*3600) elosztásával; kWh -ban történő olvasáshoz

7. lépés: Vizuális kimenet

Vizuális kimenet
Vizuális kimenet

Minden eredmény megjeleníthető a soros monitoron vagy egy LCD -n. 16x2 karakteres LCD -t használtam az előző lépésekben kapott összes eredmény megjelenítéséhez. A vázlatokhoz lásd a fent látható kenyértábla áramkört. Csatlakoztassa az LCD -t az ARDUINO -val az alábbiak szerint: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND csap + ellenállás vagy potenciométer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Not Connected 8. D1 -> Arduino -Nincs csatlakoztatva 9. D2 -> Arduino -Nincs csatlakoztatva 10. D3 -> Arduino -Nincs csatlakoztatva 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino PIN 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Ellenállás (háttérvilágítás) 16. K -> Arduino GND (Backlight ground) ARDUINO CODE: Soros monitorhoz:

Serial.print ("VOLTAGE:"); Soros.nyomat (feszültség); Serial.println ("Volt"); Serial.print ("CURRENT:"); Soros.nyomtatás (erősítők); Serial.println ("Erősítők"); Serial.print ("POWER:"); Soros.nyomat (watt); Serial.println ("Watt"); Serial.print ("FOGYASZTOTT ENERGIA:"); Soros.nyomat (energia); Serial.println ("Watt-óra"); Serial.println (""); // a következő paraméterkészletek nyomtatása üres sor késleltetése után (2000); LCD esetén: LCD kijelző esetén először be kell importálni a "LiquidCrystal" könyvtárat a kódba. Ha többet szeretne megtudni a LequidCrystal könyvtárról, kattintson ide Az LCD oktatóanyagért kattintson ide A következő kód egy formátum, amely LCD -n jeleníti meg az összes teljesítmény- és energiaszámítást #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (háttérvilágítás, OUTPUT); // állítsa be a 9 -es tűt analógWrite kimenetnek (backLight, 150); // szabályozza a háttérvilágítás intenzitását 0-254 lcd.begin (16, 2); // oszlopok, sorok. kijelző mérete lcd.clear (); // a képernyő törlése} void loop () {lcd.setCursor (16, 1); // állítsa a kurzort a kijelzőn kívül lcd.print (""); // üres karakter késleltetés nyomtatása (600); ///////////////////////////////////////////////////////////////////- /////////////////////////////////////////////////////////////////- (1, 0); // állítsa a kurzort az 1. oszlopra és az 1. sorra lcd.print (watt); lcd.print ("W"); lcd.print (feszültség); lcd.print ("V"); lcd.setCursor (1, 1); // állítsa a kurzort az 1. oszlopra és a 2. sorra lcd.print (energia); lcd.print ("WH"); lcd.print (erősítők); lcd.print ("A"); }

8. lépés: Adatok feltöltése a Xively.com webhelyre

Adatok feltöltése a Xively.com webhelyre
Adatok feltöltése a Xively.com webhelyre
Adatok feltöltése a Xively.com webhelyre
Adatok feltöltése a Xively.com webhelyre
Adatok feltöltése a Xively.com webhelyre
Adatok feltöltése a Xively.com webhelyre

Tekintse meg a fenti képernyőképeket a jobb megértés érdekében. Az xively.com webhelyre történő adatok feltöltéséhez először a következő könyvtárat kell letölteni HttpClient: kattintson ide Xively: kattintson ide SPI: Importálás arduino IDE -ből (vázlat -> Könyvtár importálása …) Ethernet: Importálás arduino -ból IDE ((vázlat -> Könyvtár importálása …..) Nyisson fiókot a https://xively.com webhelyen (korábban: pachube.com és cosm.com) Regisztráljon ingyenes fejlesztői fiókra a https://xively.com címen

Válasszon felhasználónevet, jelszót, állítsa be a címét és az időzónát stb. Kapni fog egy megerősítő e -mailt;

majd kattintson az aktiválási linkre a fiók aktiválásához. Miután sikeresen megnyitotta a fiókot, a fejlesztői eszközök oldalra kerül

  • Kattintson a +Eszköz hozzáadása mezőre
  • Adjon nevet az eszköznek és a leírásnak (pl. ENERGIAMONITORING) ·
  • Válasszon privát vagy nyilvános adatokat (én a privátot) ·
  • Kattintson az Eszköz hozzáadása elemre

Az eszköz hozzáadása után egy új oldalra kerül, ahol sok fontos információ található

  • Termékazonosító, termék titka, sorozatszám, aktiválási kód ·
  • Hírcsatorna -azonosító, FeedURL, API végpont (A hírcsatorna -azonosítót az ARDUINO -kód használja)
  • Csatornák hozzáadása (IChoose ENERGY és POWER, de választhat tetszés szerint) Adja meg a paraméter egységét és szimbólumát ·
  • Hely hozzáadása ·
  • API kulcsok (ARDUINO kódban használják, ne ossza meg ezt a számot) ·
  • Aktiválók (ping aweb oldal, amikor esemény történt, például amikor az energiafogyasztás meghalad egy bizonyos határt)

9. lépés: Xively és ARDUINO kód

Itt csatoltam az energiamérő teljes kódját (béta verzió), kivéve az SD -kártya adatnaplózását, amelyet a következő lépésben külön csatolunk. / ** Energiafelügyeleti adatok feltöltése xively -re **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Írja be Xively API -kulcsát #define FEED_ID xxxxxxxxx // Adja meg Xively feed -azonosítóját // MAC -címét Ethernet pajzs bájt mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analóg érintkező, amelyet figyelünk (a 0 és 1 értéket használja az Ethernet pajzs) int sensorPin = 2; unsigned long lastConnectionTime = 0; // legutóbb a Cosm const unsigned long connectionInterval = 15000; // késleltetés a Cosm -hez való csatlakozás között ezredmásodpercben // A Cosm könyvtár inicializálása // Határozza meg az adatfolyam azonosítójának karakterláncát char sensorId = "POWER"; char sensorId2 = "ENERGIA"; XivelyDatastream adatfolyamok = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Tekerje az adatfolyamot egy feedbe XivelyFeed feed (FEED_ID, adatfolyamok, 2/ * adatfolyamok száma */); EthernetClient kliens; XivelyClient xivelyclient (kliens); void setup () {Serial.begin (9600); Serial.println ("Hálózat inicializálása"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Hiba az IP -cím DHCP -n keresztüli lekérésekor, újrapróbálkozás …"); késleltetés (15000); } Serial.println ("Hálózat inicializálva"); Sorozat.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // adatok küldése xively getData (); // olvassa vissza az adatfolyamot a xively lastConnectionTime = millis (); // frissítse a csatlakozási időt, hogy várjunk, mielőtt újra csatlakoznánk}} void sendData () {int sensor1 = watt; int szenzor2 = energia; datastreams [0].setFloat (szenzor1); // teljesítményérték adatfolyamok [1].setFloat (sensor2); // energiaérték Serial.print ("Olvasási teljesítmény"); Serial.println (adatfolyamok [0].getFloat ()); Serial.print ("Olvasási energia"); Serial.println (adatfolyamok [1].getFloat ()); Serial.println ("Feltöltés Xively -re"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT visszatérési kód:"); Serial.println (ret); Sorozat.println (); } // lekérjük az adatfolyam értékét a xively -től, kinyomtatva a kapott értéket void getData () {Serial.println ("Adatok olvasása a Xively -től"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Az adatfolyam:"); Serial.println (feed [0]); Serial.print ("A teljesítmény értéke:"); Serial.println (feed [0].getFloat ()); Serial.print ("Az adatfolyam:"); Serial.println (feed [1]); Serial.print ("Energiaérték:"); Serial.println (feed [1].getFloat ()); } Sorozat.println ();

10. lépés: Adatnaplózás SD -kártyán

Az SD -kártyán tárolt adatok importálásához be kell importálni az SD -könyvtárat. Az oktatóanyagért kattintson ide. Ha többet szeretne megtudni az SD -könyvtárról, kattintson ide kód írása LCD kijelzőhöz és adatok feltöltéséhez xively.com. De megpróbálom javítani a béta verzió kódját, hogy egyetlen kód tartalmazza az összes funkciót (LCD kijelző, Xively adatfeltöltés és adatok SD kártyán való tárolása). Az adatnaplózás kódja az alábbiakban található. Ha valaki ír egy jobb kódot a kód módosításával, ossza meg velem. Ez az első műszaki utasításom, ha valaki hibát talál benne, nyugodtan tegye meg megjegyzéseit.. hogy javíthassak. Ha talál fejlesztési területeket ebben a projektben, kérjük, tegye meg megjegyzéseit vagy üzenetet, így a projekt erősebb lesz. Azt hiszem, hasznos lesz másoknak és nekem is.

123D áramkörök versenye
123D áramkörök versenye
123D áramkörök versenye
123D áramkörök versenye

Harmadik díj az 123D áramkörök versenyében

Ajánlott: