İçindekiler:

ARDUINO ENERJİ SAYACI: 10 Adım (Resimli)
ARDUINO ENERJİ SAYACI: 10 Adım (Resimli)

Video: ARDUINO ENERJİ SAYACI: 10 Adım (Resimli)

Video: ARDUINO ENERJİ SAYACI: 10 Adım (Resimli)
Video: Arduino'yu Kullanılmaz Hale Getirmenin 10 Yolu 2024, Temmuz
Anonim
Image
Image
ARDUINO ENERJİ SAYACI
ARDUINO ENERJİ SAYACI
ARDUINO ENERJİ SAYACI
ARDUINO ENERJİ SAYACI

[Video oynatmak]

Sık sık elektrik kesintisinin çok yaygın olduğu Hindistan'ın Odisha kasabasına aidim. Herkesin hayatını engelliyor. Çocukluk günlerimde alacakaranlıktan sonra çalışmaya devam etmek gerçek bir meydan okumaydı. Bu problemden dolayı evim için deneysel olarak bir güneş sistemi tasarladım. Birkaç parlak LED'i aydınlatmak için 10 Watt, 6V'luk bir güneş paneli kullandım. Birçok zorlukla karşılaştıktan sonra proje başarılı oldu. Sonra sistemde yer alan voltajı, akımı, gücü ve enerjiyi izlemeye karar verdim. Bu, bir ENERJİ ÖLÇER tasarlama fikrini getirdi. ARDUINO'yu bu projenin kalbi olarak kullandım çünkü IDE'sinde kod yazmak çok kolay ve internette kullanılabilecek çok sayıda açık kaynak kitaplığı var. gereksinim. Projeyi çok küçük dereceli (10Watt) güneş sistemi için denedim, ancak bu, daha yüksek derecelendirme sistemi için kullanmak üzere kolayca değiştirilebilir.

Tüm projelerimi şu adreste bulabilirsiniz:

Özellik: 1. LCD ekran ile enerji izleme 2. İnternet üzerinden (Xively yükleme) 3. SD kartta veri kaydı

Yeni öğretilebilir ARDUINO MPPT SOLAR CHARGE CONTROLLER'ımı (Sürüm-3.0) görebilirsiniz.

Ayrıca diğer talimatlarımı da görebilirsiniz.

ARDUINO SOLAR ŞARJ KONTROL CİHAZI (Sürüm 2.0)

ARDUINO SOLAR ŞARJ KONTROL CİHAZI (Sürüm-1)

Adım 1: Gerekli Parçalar:

Gerekli Parçalar
Gerekli Parçalar

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

3. 16x2 KARAKTER LCD (Amazon)

4. ACS 712 AKIM SENSÖRÜ (Amazon)4. DİRENÇLER (10k, 330ohm) (Amazon)5. 10K POTANSİYOMETRE (Amazon)6. JUMPER TELLERİ (Amazon)7. ETHERNET KABLOSU (Amazon)8. EKMEK KURULU (Amazon)

Adım 2: Güç ve Enerji

Güç: Güç, gerilim (volt) ve akımın (Amp) çarpımıdır P=VxI Güç birimi Watt veya KWE'dir Enerji: Enerji, güç (watt) ve zamanın (Saat) çarpımıdır E= Pxt Enerji Birimi Watt Saat veya Kilowatt'tır Saat (kWh) Yukarıdaki formülden, Enerjiyi ölçmek için üç parametreye ihtiyacımız olduğu açıktır: 1. Gerilim 2. Akım 3. Zaman

Adım 3: Gerilim Ölçümü

Gerilim Ölçümü
Gerilim Ölçümü
Gerilim Ölçümü
Gerilim Ölçümü
Gerilim Ölçümü
Gerilim Ölçümü

Voltaj bir voltaj bölücü devre yardımı ile ölçülür. ARDUINO analog pin giriş voltajı 5V ile sınırlandırıldığı için voltaj bölücüyü çıkış voltajı 5V'dan az olacak şekilde tasarladım. güneş panelinden gelen güç 6v, 5.5Ah olarak derecelendirilmiştir. Bu yüzden bu 6.5v'yi 5V'tan daha düşük bir voltaja düşürmem gerekiyor. R1=10k ve R2 =10K kullandım. R1 ve R2'nin değeri daha düşük olabilir, ancak sorun şu ki direnç düşük olduğunda daha yüksek akım, bunun sonucunda ısı şeklinde dağılan büyük miktarda güç (P = I^2R) üzerinden geçer. Bu nedenle farklı direnç değerleri seçilebilir ancak direnç boyunca güç kaybını en aza indirmeye özen gösterilmelidir. Vout=R2/(R1+R2)*Vbat Vbat=6.5 tam şarj olduğunda R1=10k ve R2=10k Vout=10/(10+10)*6.5=3.25v, 5v'den düşük ve ARDUINO analog pinNOTE I için uygun bared board devrede 9 Volt akü gösterdim sadece örneğin kabloları bağlamak için. Ama benim kullandığım akü 6 Volt, 5.5Ah kurşun asit akü. Voltaj Kalibrasyonu: Akü tam şarj olduğunda (6.5v) alacağız. a Vout=3.25v ve diğer düşük akü voltajı için daha düşük değer. AEDUINO ADC, Analog sinyali ilgili dijital yaklaşıma dönüştürür. Akü voltajı 6.5v iken voltaj bölücüden 3.25v aldım ve seri monitörde sample1 = 696, burada sample1 ADC değeri 3.25v'ye karşılık geliyor Daha iyi anlaşılması için voltaj ölçümü için 123D.circuit ile gerçek zamanlı simülasyonu ekledim Kalibrasyon: 3,25v 696'ya eşittir 1, 3,25/696=4.669mv'ye eşittir Vout = (4.669*sample1)/1000 volt Gerçek akü voltajı = (2*Vout) voltARDUINO KODU: // voltaj bölücüden 2sn aralıklarla 150 örnek alınması ve ardından (int i=0;i<150;i++) { sample1=sample1+analogRead(A2); için toplanan numune verilerinin ortalamasını alın. //bölücü devre gecikmesinden gelen voltajı okuyun (2); } örnek1=örnek1/150; voltaj=4.669*2*örnek1/1000;

Adım 4: Akım Ölçümü

Mevcut ölçüm
Mevcut ölçüm
Mevcut ölçüm
Mevcut ölçüm

Akım ölçümü için Hall Effect akım sensörü ACS 712 (20 A) kullandım. Piyasada farklı akım aralığı ACS712 sensörü mevcuttur, bu nedenle ihtiyacınıza göre seçim yapın. Breadboard diyagramında LED'i yük olarak gösterdim ancak gerçek yük farklı. ÇALIŞMA PRENSİBİ: Hall Etkisi, bir elektrik iletkeni boyunca, iletkendeki bir elektrik akımına çapraz ve bir gerilim farkının (Hall gerilimi) üretilmesidir. akıma dik bir manyetik alan. Hall Etkisi sensörü hakkında daha fazla bilgi için buraya tıklayın ACS 712 sensörünün veri sayfası burada bulunur Veri Sayfası 1'den ACS 712, 100mV/A analog çıkışa karşılık gelen pozitif ve negatif 20 Amper ölçer 2. Çıkış voltajı üzerinden test akımı yok VCC / 2 =5v/2=2.5VCalibrasyon: Analog okuma 0-1023 arasında bir değer üretir, 0v ila 5v'ye eşittir Yani Analog okuma 1 = (5/1024) V =4.89mv Değer = (4.89*Analog Okuma değeri)/ 1000 V Ancak veri sayfalarına göre ofset 2.5V'dir (Akım sıfır olduğunda sensörün çıkışından 2.5V alırsınız) Gerçek değer = (değer-2.5) V Amperdeki akım =gerçek değer*10ARDUINO KODU: // 150 örnek alarak sensörleri 2sn aralıklarla ve ardından toplanan numune verilerinin ortalamasını alın for(int i=0;i<150;i++) { sample2+=analogRead(A3); //sensör gecikmesinden gelen akımı oku(2); } örnek2=örnek2/150; val =(5.0*örnek2)/102.0; gerçek değer =değer-2.5; // ofset voltajı 2,5v amperdir =gerçek değer*10;

Adım 5: Zaman Ölçümü

ARDUINO'nun kendi dahili zamanlayıcısı olduğundan, zaman ölçümü için herhangi bir harici donanıma gerek yoktur. millis() işlevi, Arduino kartı mevcut programı çalıştırmaya başladığından beri geçen milisaniye sayısını döndürür. ARDUINO KODU: long milisec = millis(); // zamanı milisaniye cinsinden hesapla long time=milisaniye/1000; // milisaniyeyi saniyeye çevir

Adım 6: ARDUINO Güç ve Enerjiyi Nasıl Hesaplar?

totamps=totamps+amps; // toplam amper hesapla avgamps=totamps/time; // ortalama amper amphr=(avgamps*time)/3600; // amper-saat watt =voltaj*amper; // güç=gerilim*akım enerji=(watt*zaman)/3600; Watt-sn, 1hr(3600sec) // enerji=(watt*time)/(1000*3600); kWh cinsinden okumak için

Adım 7: Görsel Çıktı

Görsel Çıktı
Görsel Çıktı

Tüm sonuçlar, seri monitörde veya bir LCD kullanılarak görüntülenebilir. Önceki adımlarda elde edilen tüm sonuçları görüntülemek için 16x2 karakter LCD kullandım. Şematik için yukarıda gösterilen breadboard devresine bakın. LCD'yi ARDUINO ile aşağıdaki şekilde bağlayın:LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino +5v 3. VO -> Arduino GND pini + Direnç veya Potansiyometre 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino - Bağlı Değil 8. D1 -> Arduino - Bağlı Değil 9. D2 -> Arduino - Bağlı Değil 10. D3 -> Arduino - Bağlı Değil 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 + Direnç (Arka ışık gücü) 16. K -> Arduino GND (Arka ışık zemin)ARDUINO KODU: Seri Monitör için:

Serial.print("VOLTAJ: "); Serial.print(voltaj); Serial.println("Volt"); Serial.print("GEÇERLİ:"); Seri.print(amper); Serial.println("Amper"); Serial.print("GÜÇ:"); Seri.baskı(watt); Serial.println("Vat"); Serial.print("TÜKETİLEN ENERJİ:"); Serial.print(enerji); Serial.println("Watt-Saat"); Seri.println(""); // boş satır gecikmesinden sonra sonraki parametre setlerini yazdırın (2000); LCD için: LCD ekran için önce koddaki "LiquidCrystal" kitaplığını içe aktarmanız gerekir. LequidCrystal kitaplığı hakkında daha fazla bilgi için buraya tıklayın LCD öğreticisi için buraya tıklayın Aşağıdaki kod, güç ve enerji için tüm hesaplamaları LCD'de görüntülemek için bir formattır #include lcd(8, 7, 6, 5, 4, 3, 2); int arka Işık = 9; void setup() { pinMode(backLight, OUTPUT); // pin 9'u çıkış analogWrite olarak ayarla(backLight, 150); //arka ışık yoğunluğunu kontrol eder 0-254 lcd.begin(16, 2); // sütunlar, satırlar. ekran boyutu lcd.clear(); // ekranı temizle } void loop() { lcd.setCursor(16, 1); // imleci görüntülenen sayının dışına ayarlayın lcd.print(" "); // boş karakter gecikmesini yazdır(600); /////////////////////////////////////bir LCD'ye güç ve enerji yazdırın/ ///////////////////////////////////////// lcd.setCursor (1, 0); // imleci 1. sütuna ve 1. satıra ayarla lcd.print(watt); lcd.print("W"); lcd.print(voltaj); lcd.print("V"); lcd.setCursor(1, 1); // imleci 1. sütuna ve 2. satıra ayarla lcd.print(enerji); lcd.print("WH"); lcd.print(amper); lcd.print("A"); }

8. Adım: Xively.com'a Veri Yükleme

Xively.com'a Veri Yükleme
Xively.com'a Veri Yükleme
Xively.com'a Veri Yükleme
Xively.com'a Veri Yükleme
Xively.com'a Veri Yükleme
Xively.com'a Veri Yükleme

Daha iyi anlaşılması için yukarıdaki ekran görüntülerine bakın. xively.com'a veri yüklemek için önce aşağıdaki kitaplık indirilecek HttpClient: buraya tıklayınXively: buraya tıklayınSPI: arduino IDE'den içe aktar (sketch -> Kitaplığı içe aktar…..)Ethernet: arduino'dan içe aktar IDE ((sketch -> Kitaplığı içe aktar…..) https://xively.com (eski adıyla pachube.com ve cosm.com) ile bir hesap açın https://xively.com adresinden ücretsiz bir geliştirici hesabına kaydolun

Bir kullanıcı adı, şifre seçin, adresinizi ve saat diliminizi vb. ayarlayın. Bir onay e-postası alacaksınız;

ardından hesabınızı etkinleştirmek için etkinleştirme bağlantısını tıklayın. Hesabı başarıyla açtıktan sonra Geliştirme cihazları sayfasına yönlendirileceksiniz.

  • +Cihaz Ekle kutusuna tıklayın
  • Cihazınıza bir isim ve açıklama verin (örn. GENERJİ İZLEME)·
  • Özel veya genel verileri seçin (Ben özeli seçerim)·
  • Cihaz Ekle'ye tıklayın

Cihazı ekledikten sonra, birçok önemli bilginin bulunduğu yeni bir sayfaya yönlendirilirsiniz.

  • Ürün Kimliği, Ürün Sırrı, Seri Numarası, Aktivasyon Kodu·
  • Feed ID, FeedURL, API Bitiş Noktası (Feed ID, ARDUINO kodunda kullanılır)
  • Kanal Ekle (IENERGY ve POWER'ı seçin, ancak seçiminize göre seçebilirsiniz)Parametre için birim ve sembol verin·
  • Konumunuzu ekleyin ·
  • API anahtarları (ARDUINO kodu kullanılır, bu numarayı paylaşmaktan kaçının)·
  • Tetikleyiciler (enerji tüketimi belirli bir sınırı aştığında olduğu gibi bir olay gerçekleştiğinde bir web sayfasına ping işlemi yapar)

Adım 9: Xively ve ARDUINO Kodu

Burada, bir sonraki adımda ayrı olarak eklenen SD kart veri kaydı hariç enerji sayacı için tam kodu (beta sürümü) ekledim. /** Enerji izleme verileri xively'ye yüklenir **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Xively API anahtarınızı girin #define FEED_ID xxxxxxxxx // Xively besleme kimliğinizi girin // MAC adresiniz için Ethernet kalkan baytı mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // İzlediğimiz analog pin (0 ve 1 Ethernet kalkanı tarafından kullanılır) int sensorPin = 2; imzasız uzun lastConnectionTime = 0; // Cosm'a en son bağlandığımızda const unsigned long connectionInterval = 15000; // Cosm'a bağlanma arasındaki milisaniye cinsinden gecikme // Cosm kitaplığını başlat // Veri akışı kimliğimiz için dizeyi tanımla char sensorId = "POWER"; char sensorId2 = "ENERJİ"; XivelyDatastream veri akışları = { XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT), XivelyDatastream(sensorId2, strlen(sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT), }; // Veri akışını bir beslemeye sarın XivelyFeed beslemesi(FEED_ID, veri akışları, 2 /* veri akışı sayısı */); EthernetClient istemcisi; XivelyClient xivelyclient(istemci); geçersiz kurulum() { Serial.begin(9600); Serial.println("Ağ başlatılıyor"); while (Ethernet.begin(mac) != 1) { Serial.println("DHCP üzerinden IP adresi alınırken hata oluştu, tekrar deneniyor…"); gecikme (15000); } Serial.println("Ağ başlatıldı"); Seri.println(); } void loop() { if (millis() - lastConnectionTime > connectionInterval) { sendData(); // verileri xively getData()'ya gönder; // veri akışını xively lastConnectionTime'dan oku = millis(); // tekrar bağlanmadan önce beklememiz için bağlantı süresini güncelle } } void sendData() { int sensor1 = watt; int sensör2 = enerji; datastreams[0].setFloat(sensor1); // güç değeri veri akışları[1].setFloat(sensor2); // enerji değeri Serial.print("Okuma gücü "); Serial.println(datastreams[0].getFloat()); Serial.print("Enerjiyi okuyun"); Serial.println(veri akışları[1].getFloat()); Serial.println("Xively'ye Yükleniyor"); int ret = xivelyclient.put(besleme, API_KEY); Serial.print("PUT dönüş kodu: "); Seri.println(ret); Seri.println(); } // xively'den veri akışının değerini alın, aldığımız değeri yazdırın void getData() { Serial.println("Xively'den veri okuma"); int ret = xivelyclient.get(besleme, API_KEY); Serial.print("dönüş kodu alın: "); Seri.println(ret); if (ret > 0) { Serial.print("Veri akışı: "); Serial.println(besleme[0]); Serial.print("Güç değeri: "); Serial.println(feed[0].getFloat()); Serial.print("Veri akışı: "); Serial.println(besleme[1]); Serial.print("Enerji değeri: "); Serial.println(feed[1].getFloat()); } Seri.println();

Adım 10: SD Kartta Veri Kaydı

Bir SD kartta veri depolamak için SD kütüphanesini içe aktarmanız gerekir Öğretici için buraya tıklayınSD kütüphanesi hakkında daha fazla bilgi edinmek için buraya tıklayın Verileri bir SD karta depolamak için kod, sonrasında ARDUINO UNO'mda yeterli hafızam olmadığı için ayrı olarak yazılmıştır. LCD ekran için kod yazma ve xively.com'a veri yükleme. Ama beta sürüm kodunu iyileştirmeye çalışıyorum, böylece tek bir kod tüm özellikleri (LCD ekran, Xively veri yükleme ve bir SD kartta veri depolama) içerebilir. Veri kaydı için kod aşağıda ektedir. kodumu değiştirerek daha iyi kod lütfen benimle paylaşın. Bu benim ilk teknik talimatım, herhangi bir hata bulursa yorum yapmaktan çekinmeyin.. böylece kendimi geliştirebilirim. Bu projede iyileştirme alanları bulursanız lütfen yorum yapın. ya da bana mesaj at, Proje daha güçlü olacak. Benim için olduğu kadar başkaları için de faydalı olacağını düşünüyorum.

123D Devreler Yarışması
123D Devreler Yarışması
123D Devreler Yarışması
123D Devreler Yarışması

123D Devreler Yarışmasında Üçüncülük Ödülü

Önerilen: