فهرست مطالب:

متر ARDUINO ENERGY: 10 مرحله (همراه با تصاویر)
متر ARDUINO ENERGY: 10 مرحله (همراه با تصاویر)

تصویری: متر ARDUINO ENERGY: 10 مرحله (همراه با تصاویر)

تصویری: متر ARDUINO ENERGY: 10 مرحله (همراه با تصاویر)
تصویری: Lesson 12: Using Arduino Programming function and switch | SunFounder Robojax 2024, جولای
Anonim
Image
Image
سنج انرژی ARDUINO
سنج انرژی ARDUINO
سنج انرژی ARDUINO
سنج انرژی ARDUINO

[پخش ویدئو]

من متعلق به روستایی در اودیشا ، هند هستم که در آن قطع مکرر برق بسیار رایج است. این زندگی هر کسی را مختل می کند. در دوران کودکی من ادامه تحصیل پس از غروب یک چالش واقعی بود. به دلیل این مشکل ، من یک سیستم خورشیدی را برای خانه ام به صورت آزمایشی طراحی کردم. من از یک پنل خورشیدی 10 واتی ، 6 ولت برای روشن کردن چند LED روشن استفاده کردم. پس از روبرو شدن با مشکلات فراوان ، پروژه موفق شد. سپس تصمیم گرفتم ولتاژ ، جریان ، قدرت و انرژی دخیل در سیستم را زیر نظر بگیرم. این ایده طراحی یک متر انرژی را به وجود آورد. من از ARDUINO به عنوان قلب این پروژه استفاده کردم زیرا نوشتن کد در IDE آن بسیار آسان است و تعداد زیادی کتابخانه منبع باز در اینترنت موجود است که می توان با توجه به الزامات. من پروژه را برای سیستم خورشیدی بسیار کوچک (10 وات) آزمایش کرده ام ، اما می توان آن را به راحتی برای استفاده از سیستم رتبه بندی بالاتر تغییر داد.

همه پروژه های من را می توانید در این آدرس پیدا کنید:

ویژگی: نظارت بر انرژی توسط صفحه 1. LCD 2. از طریق اینترنت (آپلود Xively) 3. ثبت اطلاعات در کارت SD

شما می توانید کنترل کننده شارژ خورشیدی ARDUINO MPPT SOLAR CHARGE CONTROLLER (نسخه 3.0) من را ببینید

همچنین می توانید دستورالعمل های دیگر من را در آن مشاهده کنید

ARDUINO SOLAR CHARGE CONTROLLER (نسخه 2.0)

کنترل کننده شارژ خورشیدی ARDUINO (نسخه 1)

مرحله 1: قطعات مورد نیاز:

قطعات مورد نیاز
قطعات مورد نیاز

1. ARDUINO UNO (آمازون) 2. ARDUINO ETHERNET SHIELD (آمازون)

3. LCD 16x2 CHARACTER (آمازون)

4. ACS 712 CURRENT SENSOR (آمازون) 4. مقاومت ها (10k ، 330ohm) (آمازون) 5. پتانسیومتر 10K (آمازون) 6. JUMPER WIRES (آمازون) 7. کابل ETHERNET (آمازون) 8. تخته نان (آمازون)

مرحله 2: قدرت و انرژی

قدرت: توان حاصل از ولتاژ (ولت) و جریان (آمپر) P = VxI واحد قدرت وات یا KW است انرژی: انرژی حاصل از توان (وات) و زمان (ساعت) E = Pxt واحد انرژی وات ساعت یا کیلووات است ساعت (کیلووات ساعت) از فرمول بالا مشخص است که برای اندازه گیری انرژی به سه پارامتر نیاز داریم 1. ولتاژ 2. جریان 3. زمان

مرحله 3: اندازه گیری ولتاژ

اندازه گیری ولتاژ
اندازه گیری ولتاژ
اندازه گیری ولتاژ
اندازه گیری ولتاژ
اندازه گیری ولتاژ
اندازه گیری ولتاژ

ولتاژ با کمک یک مدار تقسیم ولتاژ اندازه گیری می شود. از آنجا که ولتاژ ورودی پین آنالوگ ARDUINO محدود به 5 ولت است ، تقسیم ولتاژ را به گونه ای طراحی کردم که ولتاژ خروجی از آن باید کمتر از 5 ولت باشد. باتری من برای ذخیره قدرت پنل خورشیدی 6 ولت ، 5.5 آمپر ساعت است. بنابراین من باید این ولتاژ 6.5 ولت را به ولتاژ کمتر از 5 ولت کاهش دهم. من از 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.5Ah است. کالیبراسیون ولتاژ: هنگامی که باتری به طور کامل (6.5 ولت) شارژ می شود a Vout = 3.25 ولت و مقدار کمتر برای سایر ولتاژهای باتری کمتر. AEDUINO ADC سیگنال آنالوگ را به تقریب دیجیتالی مربوطه تبدیل می کند. هنگامی که ولتاژ باتری 6.5 ولت است ، من 3.25 ولت را از تقسیم ولتاژ دریافت کردم و نمونه 1 = 696 در مانیتور سریال ، جایی که نمونه 1 مقدار ADC مربوط به 3.25 ولت است ، برای درک بهتر ، شبیه سازی زمان واقعی را با 123D پیوست کرده ام. مدار برای اندازه گیری ولتاژ کالیبراسیون: 3.25 ولت معادل 696 1 معادل 3.25/696 = 4.669 میلی ولت Vout = (4.669*نمونه 1)/1000 ولت ولتاژ واقعی باتری = (2*Vout) ولتاژARDUINO: // گرفتن 150 نمونه از تقسیم ولتاژ با فاصله 2 ثانیه و سپس میانگین نمونه های جمع آوری شده برای (int i = 0 ؛ i <150؛ i ++) {sample1 = sample1+analogRead (A2) ؛ // ولتاژ تأخیر مدار تقسیم کننده (2) را بخوانید ؛ } sample1 = sample1/150 ؛ ولتاژ = 4.669*2*نمونه 1/1000 ؛

مرحله 4: اندازه گیری فعلی

اندازه گیری فعلی
اندازه گیری فعلی
اندازه گیری فعلی
اندازه گیری فعلی

برای اندازه گیری فعلی ، من از سنسور جریان Hall Hall ACS 712 (20 A) استفاده کردم. سنسور ACS712 محدوده جریان متفاوتی در بازار موجود است ، بنابراین با توجه به نیاز خود انتخاب کنید. در نمودار تخته نان ، LED را به عنوان بار نشان داده ام ، اما بار واقعی متفاوت است. میدان مغناطیسی عمود بر جریان برای کسب اطلاعات بیشتر در مورد سنسور جلوه Hall اینجا را کلیک کنید. برگه اطلاعات سنسور ACS 712 در اینجا از برگه اطلاعات 1 یافت می شود. ACS 712 اندازه گیری مثبت و منفی 20 آمپر ، مربوط به خروجی آنالوگ 100mV/A 2. هیچ جریان آزمایشی از طریق ولتاژ خروجی نیست VCC/2 = 5v/2 = 2.5V کالیبراسیون: خواندن آنالوگ مقدار 0-1023 ، معادل 0v تا 5v تولید می کند ، بنابراین آنالوگ 1 = (5/1024) V = 4.89mv ارزش = (4.89*مقدار خواندن آنالوگ)/ ولتاژ 1000 ولت اما مطابق با ورق های داده 2.5 اف سنسورها با فاصله 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.5 ولت آمپر = واقعی 10*است.

مرحله 5: اندازه گیری زمان

برای اندازه گیری زمان نیازی به سخت افزار خارجی نیست ، زیرا ARDUINO دارای تایمر داخلی است. تابع millis () تعداد میلی ثانیه را از زمانی که برد Arduino شروع به اجرای برنامه فعلی کرده است ، برمی گرداند. کد EDUINO: long milisec = millis ()؛ // محاسبه زمان بر حسب میلی ثانیه زمان طولانی = میلی ثانیه/1000 ؛ // تبدیل میلی ثانیه به ثانیه

مرحله 6: چگونه ARDUINO قدرت و انرژی را محاسبه می کند

totamps = totamps+آمپر؛ // محاسبه کل amgam avgamps = totamps/time؛ // آمپر متوسط amphr = (avgamps*زمان)/3600؛ // آمپر ساعت وات = ولتاژ*آمپر؛ // قدرت = ولتاژ*انرژی فعلی = (وات*زمان)/3600 ؛ وات ثانیه دوباره با تقسیم 1hr (3600sec) // انرژی = (watt*time)/(1000*3600) به Watt-Hr تبدیل می شود. برای خواندن بر حسب کیلووات ساعت

مرحله 7: خروجی بصری

خروجی بصری
خروجی بصری

همه نتایج را می توان در مانیتور سریال یا با استفاده از LCD نمایش داد. من برای نمایش تمام نتایج بدست آمده در مراحل قبلی از یک LCD 16x2 کاراکتری استفاده کردم. برای نمودارها مدار نان صفحه نمایش داده شده در بالا را ببینید. LCD را با ARDUINO مطابق شکل زیر وصل کنید: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor or Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Not Connected 8. D1 -> Arduino -Not Connected 9. D2 -> Arduino -Not Connected 10. D3 -> Arduino -Not Connected 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 (قدرت نور پس زمینه) 16. K -> Arduino GND (نور پس زمینه زمین) کد ARDUINO: برای سریال مانیتور:

Serial.print ("VOLTAGE:")؛ Serial.print (ولتاژ) ؛ Serial.println ("ولت") ؛ Serial.print ("CURRENT:")؛ Serial.print (آمپر) ؛ Serial.println ("آمپر") ؛ Serial.print ("POWER:")؛ Serial.print (وات) ؛ Serial.println ("وات") ؛ Serial.print ("مصرف انرژی:")؛ Serial.print (انرژی) ؛ Serial.println ("ساعت وات") ؛ Serial.println ("")؛ // مجموعه های بعدی پارامترها را بعد از تأخیر خط خالی (2000) چاپ کنید ؛ برای LCD: برای نمایش LCD باید ابتدا کتابخانه "LiquidCrystal" را در کد وارد کنید. برای آشنایی بیشتر با کتابخانه LequidCrystal اینجا را کلیک کنید برای آموزش LCD clickhere کد زیر فرمت نمایش تمام محاسبه قدرت و انرژی در LCD است #شامل 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 () {lcd.setCursor (16 ، 1) ؛ // مکان نما را در خارج از تعداد نمایش lcd.print ("") تنظیم کنید؛ // چاپ تاخیر نویسه خالی (600) ؛ ////////////////////////////////////////// قدرت و انرژی چاپ روی LCD/ ///////////////////////////////////////////////cc.setCursor (1 ، 0) ؛ // مکان نما را در ستون 1 و ردیف 1 lcd.print (watt) تنظیم کنید ؛ lcd.print ("W") ؛ ال سی دی چاپ (ولتاژ) ؛ lcd.print ("V") ؛ lcd.setCursor (1 ، 1) ؛ // مکان نما را در ستون 1 و ردیف دوم lcd.print (انرژی) تنظیم کنید ؛ lcd.print ("WH") ؛ ال سی دی چاپ (آمپر) ؛ lcd.print ("A") ؛ }

مرحله 8: بارگذاری داده ها به Xively.com

بارگذاری داده ها به Xively.com
بارگذاری داده ها به Xively.com
بارگذاری داده ها به Xively.com
بارگذاری داده ها به Xively.com
بارگذاری داده ها به Xively.com
بارگذاری داده ها به Xively.com

تصاویر بالا را برای وضوح بهتر ارجاع دهید. برای بارگذاری داده ها در xively.com ابتدا کتابخانه زیر را بارگیری کنید HttpClient: اینجا را کلیک کنید به صورت گسترده: اینجا را کلیک کنید SPI: واردات از arduino IDE (طرح -> وارد کردن کتابخانه …..) IDE ((طرح -> وارد کردن کتابخانه…..) بازکردن حساب با https://xively.com (قبلا pachube.com و cosm.com) ثبت نام برای یک حساب توسعه دهنده رایگان در

نام کاربری ، گذرواژه ، آدرس و منطقه زمانی خود را تنظیم کنید و غیره. یک ایمیل تأیید دریافت خواهید کرد

سپس روی لینک فعال سازی کلیک کنید تا حساب شما فعال شود. پس از موفقیت آمیز باز کردن حساب ، به صفحه دستگاه های توسعه هدایت می شوید

  • روی جعبه +افزودن دستگاه کلیک کنید
  • یک نام و توضیحات به دستگاه خود بدهید (به عنوان مثال نظارت بر انرژی) ·
  • انتخاب داده های خصوصی یا عمومی (من خصوصی را انتخاب می کنم) ·
  • روی افزودن دستگاه کلیک کنید

پس از افزودن دستگاه به صفحه جدیدی هدایت می شوید که اطلاعات مهم زیادی در آن وجود دارد

  • شناسه محصول ، راز محصول ، شماره سریال ، کد فعال سازی ·
  • شناسه خوراک ، FeedURL ، نقطه پایان API (شناسه خوراک در کد ARDUINO استفاده می شود)
  • افزودن کانال ها (IChoose ENERGY و POWER ، اما می توانید طبق انتخاب خود انتخاب کنید) واحد و نماد پارامتر را بدهید ·
  • مکان خود را اضافه کنید ·
  • کلیدهای API (استفاده شده در کد ARDUINO ، از به اشتراک گذاشتن این شماره اجتناب کنید) ·
  • برانگیزاننده (صفحه وحشت پینگ هنگام وقوع یک رویداد ، مانند زمانی که مصرف انرژی از حد معینی فراتر می رود)

مرحله 9: Xively و کد ARDUINO

در اینجا من کد کامل (نسخه بتا) مربوط به متر سنج را بدون درج اطلاعات کارت SD که به طور جداگانه در مرحله بعدی پیوست شده است ، پیوست کردم. / ** بارگذاری داده های نظارت انرژی در xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // کلید API Xively خود را #تعریف FEED_ID xxxxxxxxx // شناسه خوراک Xively خود را وارد کنید // آدرس MAC برای شما محافظ اترنت byte mac = {0xDE ، 0xAD ، 0xBE ، 0xEF ، 0xFE ، 0xED} ؛ // پین آنالوگ که ما در حال نظارت بر آن هستیم (0 و 1 توسط سپر اترنت استفاده می شود) int sensorPin = 2؛ unsigned long lastConnectionTime = 0؛ // آخرین باری که ما به Cosm const وصل شد اتصال طولانی signInterval = 15000؛ // تأخیر بین اتصال به Cosm در میلی ثانیه // راه اندازی کتابخانه Cosm // تعریف رشته برای شناسه داده داده جریان ما sensor charId = "POWER"؛ char sensorId2 = "ENERGY"؛ جریان داده 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 ("راه اندازی شبکه") ؛ while (Ethernet.begin (mac)! = 1) {Serial.println ("خطا در دریافت آدرس IP از طریق DHCP ، تلاش مجدد …")؛ تاخیر (15000) ؛ } Serial.println ("شبکه راه اندازی شد")؛ Serial.println ()؛ } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData ()؛ // ارسال داده به xively getData ()؛ // خواندن datastream از xively lastConnectionTime = millis ()؛ // زمان اتصال را به روز کنید بنابراین قبل از اتصال مجدد منتظر می مانیم}} void sendData () {int sensor1 = watt؛ حسگر int2 = انرژی ؛ datastreams [0].setFloat (sensor1) ؛ // مقدار قدرت 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 ()؛ } // مقدار datastream را از xively بدست آورید ، مقداری را که دریافت کرده ایم void getData () {Serial.println ("خواندن داده ها از Xively") چاپ کنید. int ret = xivelyclient.get (خوراک ، API_KEY) ؛ Serial.print ("دریافت کد بازگشت:") ؛ Serial.println (ret) ؛ if (ret> 0) {Serial.print ("جریان داده است:") ؛ Serial.println (خوراک [0])؛ Serial.print ("مقدار قدرت:")؛ Serial.println (خوراک [0].getFloat ()) ؛ Serial.print ("Datastream is:")؛ Serial.println (خوراک [1])؛ Serial.print ("ارزش انرژی:")؛ Serial.println (خوراک [1].getFloat ())؛ } Serial.println ()؛

مرحله 10: ثبت اطلاعات در کارت SD

برای ذخیره اطلاعات در کارت SD شما باید کتابخانه SD را وارد کنید برای آموزش اینجا را کلیک کنید برای کسب اطلاعات بیشتر در مورد کتابخانه SD اینجا را کلیک کنید کد ذخیره اطلاعات در کارت SD جداگانه نوشته می شود زیرا من در ARDUINO UNO خود حافظه کافی ندارم پس از نوشتن کد برای نمایش LCD و بارگذاری داده ها xively.com. اما من سعی می کنم کد نسخه بتا را بهبود دهم تا یک کد واحد بتواند شامل همه ویژگی ها (صفحه LCD ، بارگذاری داده های Xively و ذخیره اطلاعات در کارت SD) باشد. کد ثبت اطلاعات در زیر پیوست شده است. اگر کسی یک کد بهتر را با اصلاح کد من لطفاً با من به اشتراک بگذارید. این اولین راهنمای فنی من است ، اگر کسی اشتباهی در آن پیدا کرد ، نظر دهید.. تا بتوانم خودم را بهبود دهم. اگر در این پروژه زمینه های بهبود یافتید ، لطفا نظر دهید یا به من پیام دهید ، بنابراین پروژه قوی تر خواهد بود. من فکر می کنم برای دیگران و همچنین برای من مفید خواهد بود.

مسابقه مدارهای 123D
مسابقه مدارهای 123D
مسابقه مدارهای 123D
مسابقه مدارهای 123D

جایزه سوم در مسابقه مدارهای 123D

توصیه شده: