GSM sıcaklık sensörleri. Termo sensörlü GSM termometreleri ve alarmları. Neden bir GSM termometresi ve sıcaklık sensörlü bir alarm sistemi satın almaya değer?

Ev / Yağ

Kendin yap hava durumu istasyonu.

Akşam olmuştu, yılbaşından sonra yapacak bir şey yoktu. Her zamanki gibi kış Yeni Yıl tatillerinde de başımı ve ellerimi faydalı ve yaratıcı bir şeyle meşgul etmek istiyorum. Bu Yeni Yıl tatillerinde kendi ellerimle bir hava durumu istasyonu yapmaya karar verdim. Yılbaşından önce tüm bileşenleri önceden hazırlamaya başladım, satın alıp monte ettim ve ana programlamayı tatil sırasında yaptım.

(Kesiğin altında çok sayıda fotoğraf var!)

Öncelikle bileşenlerin üzerinden geçeceğim, eBay'deki (hesabımdaki) ürünler arşive gittiği için bağlantı vermeyeceğim. EBay'den pek çok bileşeni geç satın aldım. Açık artırmayı ilk kez denedim, her zaman “şimdi al” diye satın alırdım. Ne diyebilirim ki, satın almak için acele etmezseniz, bazı bileşenler daha ucuza satın alınabilir (bazen fark iki katına çıkar).

Basınç sensörü BMP085
Bu ana sensördür. Bunu eBay'de gördüğümde evime bir meteoroloji istasyonu kurmak istediğimi fark ettim.
Sensör, içine küçük bir baloncuklu ambalajla yapıştırılmış sıradan bir zarf içinde geldi.

Zarfın içinde satıcının kartviziti ve sensör vardı; antistatik bir torbaya konulmuş ve başka bir baloncuklu ambalaj katmanına sarılmıştı.

Anti-statik torba, uçuş sırasındaki nemin sensörü tehdit etmemesi için kapatıldı

Sensörü alıyoruz. Bir tarafta, köpüğün içine bükülmemeleri için yerleştirilen bir kontak hattı lehimlendi. Diğer tarafta sensörün kendisi ve kontakların işaretlenmesi var.




Her şey yoluna girecek, ancak kontakların işaretlenmesi ayna görüntüsünde uygulandı.
Sensör I2C veri yolu üzerinden bağlanır ve 3,3 V ile çalışır. Yani normal çalışma için 4 kabloya ihtiyaç vardır (+, -, SDA, SCL)
Sensörü 2 şekilde sorgulayabilirsiniz: kitaplık aracılığıyla veya doğrudan çizimdeki işlevleri kullanarak.
Program örneği:

#katmak

#define BMP085_ADDRESS 0x77 // BMP085'in I2C adresi

Const imzasız karakter OSS = 0; // Aşırı Örnekleme Ayarı

// Kalibrasyon değerleri
int ac1;
sağlam2;
sağlam3;
imzasız int ac4;
imzasız int ac5;
imzasız int ac6;
int b1;
intb2;
intmb;
int mc;
intmd;

kısa sıcaklık;
uzun basınç;

Kurulumu geçersiz kıl()
{
Seri.begin(9600);
Wire.begin();
bmp085Kalibrasyon();
}

Geçersiz döngü()
{
sıcaklık = bmp085GetTemperature(bmp085ReadUT());
basınç = bmp085GetPressure(bmp085ReadUP());
Seri.print("Sıcaklık: ");
Seri.baskı(sıcaklık/10,0, DEC);
Seri.println("C");
Serial.print("Basınç: ");
Seri.baskı(basınç/133.322, DEC);
Serial.println("mm Hg");
Seri.println();
gecikme(1000);
}

bmp085Calibration()'ı geçersiz kıl
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

Kısa bmp085GetTemperature(unsigned int ut)
{
uzun x1, x2;
x1 = (((uzun)ut - (uzun)ac6)*(uzun)ac5) >> 15;
x2 = ((uzun)mc<< 11)/(x1 + md);
b5 = x1 + x2;

Geri Dön ((b5 + 8)>>4);
}

Uzun bmp085GetPressure(unsigned long up)
{
uzun x1, x2, x3, b3, b6, p;
işaretsiz uzun b4, b7;
b6 = b5 - 4000;
// B3'ü hesapla
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((uzun)ac1)*4 + x3)<>2;
// B4'ü hesapla
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (işaretsiz uzun)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
eğer (b7< 0x80000000)
p = (b7<<1)/b4;
başka
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
p'yi döndür;
}

// "adres"teki BMP085'ten 1 bayt oku
char bmp085Read(imzasız karakter adresi)
{
imzasız karakter verileri;

wire.write(adres);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
Wire.read()'ı döndürün;
}

Int bmp085ReadInt(imzasız karakter adresi)
{
imzasız karakter msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
wire.write(adres);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
dönüş (int) msb<<8 | lsb;
}

// Telafi edilmemiş sıcaklık değerini oku
imzasız int bmp085ReadUT()
{
imzasız int ut;
// 0xF4 Register'ına 0x2E yazın
// Bu bir sıcaklık okuması ister
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// En az 4,5 ms bekleyin
gecikme(5);
// 0xF6 ve 0xF7 kayıtlarından iki bayt oku
ut = bmp085ReadInt(0xF6);
geri dön;
}

// Telafi edilmemiş basınç değerini oku
imzasız uzun bmp085ReadUP()
{
imzasız karakter msb, lsb, xlsb;
işaretsiz uzun yukarı = 0;
// 0x34+(OSS yaz)<<6) into register 0xF4
// Aşırı örnekleme ayarıyla bir basınç okuması talep edin
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
// Dönüşümü bekleyin, gecikme süresi OSS'ye bağlıdır
gecikme(2 + (3<// 0xF6 (MSB), 0xF7 (LSB) ve 0xF8 (XLSB) kayıtlarını oku
Wire.beginTransmission(BMP085_ADDRESS);
wire.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
// Verilerin kullanılabilir olmasını bekle
while(Wire.available()< 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
yukarı = (((imzasız uzun) msb<< 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
geri dön;
}


Ek olarak sensör, basınç dengelemesi için kendi termal sensörüne ve bir altimetreye sahiptir.

Arduino Nanov3.0
Burası tüm meteoroloji istasyonunun kalbi. Basit bir ifadeyle kontrolör minyatür boyuttadır.
Satın alınmış
Bu zaten benden önce yapıldığı için denetleyici hakkında ayrıntılı olarak konuşmayacağım:


Lightake'li paket prefabrikti, denetleyici, kapalı bir antistatik torba içinde bir USB kablosu ve bir Arduino içeren bir pakette geldi.

Boyutu tahmin etmek için Arduino'nun yanına nominal değeri 1 ruble olan bir madeni para koyun.

Denetleyici panosu yakın çekim



Ferrit halkalı USB kablosu iyidir. Arduino'dan USB kablosuyla güç alıyor. Geliştirme ortamı indirilebilir (indirme sayfası). Dil “C” benzeri, iş yerinde çok fazla program yaptığım için bu konuda uzmanlaşmakta herhangi bir sorun yaşamadım.

LCD ekran
İş yerinde çöp kutularında uyumlu bir LCD 1602 ekran buldum. Bağlantı için bir veri sayfası bulamadığım için bağlantıyla uğraşmak zorunda kaldım. Sonuç olarak LCD kazandı.

Ancak kısa bir işlemden sonra bu ekranın bana yetmediğini ve her biri 16 karakterden oluşan sadece 2 satır olduğundan daha fazla veri görüntüleyemeyeceğimi fark ettim. İlk başta bu parametreler yeterli gibi görünüyor ancak programlamaya başladığınızda maksimum 3-4 parametreyi sıkıştırabileceğinizi anlıyorsunuz. Ve eğer bir menü yaparsanız (bu ekranda bir menü yapmayı düşünüyordum), o zaman parametreler için 1-2 boş alan kalır.
Sonuç olarak başka bir ekran aramaya başladım. İlk başta Nokia 3310'un grafik ekranına baktım ve hatta satın almak için eBay açık artırmasına katıldım ama işe yaramadı (ki bu beni çok mutlu etti), bu yüzden bu ekrandan vazgeçmek zorunda kaldım. Artık karşılaştırılacak bir şey olduğu için bunun amaçlarım için çok küçük olacağını anlıyorum.
Arduino üzerinde shield'ları gezerken tesadüfen ST7920 kontrolcünün 12864 grafik ekranına rastladım. Bu ekran ihtiyaçlarım için doğru boyuta ve iyi çözünürlüğe sahip (128x64). Yani normal okunabilir bir yazı tipine 20 karakterlik 6-7 satırı güvenle yerleştirebilirsiniz. Ekran grafik olduğundan farklı yazı tiplerindeki yazıların yanı sıra grafikler de yerleştirilebilmektedir. Kısacası tam ihtiyacım olan şey buydu, bu ekranda her şey mevcuttu, o yüzden dayanamadım ve sipariş verdim.
Paket hızlı bir şekilde geldi ve standart bir şekilde paketlendi: baloncuklu ambalaj, içinde başka bir baloncuklu ambalaj katmanı ve antistatik torbada bir ekran vardı:






Boyutu tahmin etmek için LCD'nin yanına nominal değeri 1 ruble olan bir madeni para koyun.




Ekranı Arduino'ya hızlı bir şekilde bağlamak için LCD pinlerine bir kontak hattı lehimledim. LCD seri veri yolu ve paralel üzerinden bağlanabilir. Çok az sayıda ücretsiz Arduino bağlantısı olduğundan ilk seçeneği seçtim.
Bağlantı (web'den alınmıştır):

- Pin 1 (GND) ortak veri yoluna bağlanır
- Pin 2 (VCC) +5V güç veriyoluna bağlanır ve akım tüketimi nispeten küçüktür ve ekrana yerleşik Arduino regülatöründen güç verilebilir.
- 4, 5 ve 6 numaralı pinler Arduino dijital çıkışlarına bağlanarak SPI seri arayüzünü oluşturur:
pin 4 - (RS) - CS hattına karşılık gelir (örneğin 7)
pin 5 - (RW) - MOSI hattına karşılık gelir (örneğin 8)
pin 6 - (E) - SCK hattına karşılık gelir (örneğin 3)
Arduino pin numaraları herhangi bir şey olabilir, asıl önemli olan, ekranı başlatırken bunları daha sonra program metninde doğru şekilde belirtmeyi unutmamaktır.
- Pin 15 (PSB) ortak veri yoluna bağlanır.
- Pin 19 (A) ve 20 (K) arka ışık güç kaynağıdır (sırasıyla +5V ve GND). Arka ışığın parlaklığını ayarlamak için güç rayları ile GND arasına bağlanan 10kΩ değişken bir direnç kullanabilirsiniz. Motorundan gelen voltaj ekranın 19 numaralı pinine uygulanır.
Bu talimata göre arka ışık dışındaki her şeyi bağladım. Arka ışık gücü olarak Arduino PWM'yi kullandım.
LCD'yi programlı olarak Arduino'ya bağlamak için u8glib kütüphanesi kullanılır. İndirebilirsin. İndirme sorunları varsa kütüphaneyi narod.ru'ya yükleyebilirim.
Kütüphanenin kendisi karmaşık değildir ve metni farklı yazı tiplerinde görüntülemenize, bir çizgi çizmenize, en basit geometrik şekilleri (dikdörtgen, daire) çizmenize, özel hazırlanmış görsellerinizi görüntülemenize olanak tanır. Prensip olarak bu araç çoğu görev için yeterlidir.
İşte basit bir programın sonucu:

Programın kendisi:

#include "U8glib.h"

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE); // SPI E=3, RW=9, RS=8

// Boş hafızanın belirlenmesi için alt program
int freeRam()(
harici int __heap_start, *__brkval;
televizyonda;
return (int) &v - (__brkval == 0? (int) &__heap_start: (int) __brkval);
}

Kurulumu geçersiz kıl(geçersiz) (
u8g.setFont(u8g_font_6x10); // yazı tipi
u8g.setRot180(); // Ekranı çevir
analogWrite(6, 115); // Ekran parlaklığını ayarlayın (arka ışık anotunu 6 pine ayarlayın)
}

Geçersiz döngü (geçersiz) (
u8g.firstPage();
Yapmak(

u8g.setPrintPos(1, 12); // konum
u8g.print("Merhaba!!!"); // metin çıktısı
u8g.drawBox(0,22,128,9); // Dikdörtgeni Beyazla Doldur
u8g.setColorIndex(0); // beyaz mürekkep, siyah arka plan
u8g.setPrintPos(1, 30); // konum
u8g.print("Kelime..."); // metin çıktısı

U8g.setColorIndex(1); // beyaz mürekkep, siyah arka plan
u8g.setPrintPos(1, 50); // konum
u8g.print("Başladıktan sonra = "); // metin çıktısı
u8g.setPrintPos(85, 50); // konum
u8g.print(millis() / 1000); // başlangıçtan sonraki saniye sayısını çıktı
u8g.setPrintPos(1, 64); // konum
u8g.print(freeRam()); // ne kadar hafıza kullanıldığının çıktısını alıyoruz
) while(u8g.nextPage());

gecikme(200);
}

Gerçek zamanlı saat DS1307
Meteoroloji istasyonum için başka bir bileşen. Bu kalkanın gerçek zamanlı bir saati var. Bunları eBay'den sipariş ettim. Satıcı, gerçekçi olmayan büyük bir kutuda bir saat mendili gönderdi


Kutunun içinde iki sayfa A4 reklam ve selofanla sarılmış bir saat mendili vardı.


Ücretin 2 rubleyi geçmediğini belirtmek isterim. madeni para ve kutu 13x15x5 cm boyutlarındaydı.
Tahta antistatik bir torbaya yerleştirildi

Yakından şal



Bu modülle uğraşmak zorunda kaldım. Öncelikle bağlantı zorlukları yaşandı. İkincisi, bu tahtada kuvars yok. Modül üzerinde bu kadar çok zaman harcayacağımı bilseydim, ağ şemalarla dolu olduğu için büyük olasılıkla onu kendim monte ederdim. En basit devre 4-5 bileşen içerir.
Bağlantıyla ilgili. I2C arayüzünün normal Arduino analog girişlerine (A4 ve A5) değil, herhangi bir ayrı girişe bağlanabileceğini söyleyen bir kütüphane buldum. Yazıldığı gibi yaptım. İlk başta hiçbir şey işe yaramadı, tefle uzun bir dansın ardından saat kuruldu. İşte bu kadar, sorunlar bitti diye düşündüm ama aynı modülü başka bir Arduino'ya bağlamayı denedikten sonra tefle dans etmeye devam ettim. Bu soruna bir çözüm bulmak için çok zaman harcadım ve hemen hemen her yerde ya yanlış bağlantı ya da SCL ve SDA pinlerinde çekme dirençlerinin bulunmadığı belirtildi. Zaten bir havya ile tahtaya girmek istedim, ancak bir forumda yanlışlıkla SCL ve SDA'nın Arduino'daki standart I2C bağlantı noktalarına bağlanması gerektiğinin söylendiği bir kodla karşılaştım. Standart bağlantıdan sonra her şey hemen çalıştı.
Şimdi kuvars hakkında. Çinlilerin oraya ne tür bir kuvars koyduğunu bilmiyorum ama bu tür kuvarslı saatler günde 10-11 saniye çalışıyordu. Bu hata ayda 5 dakika, yılda 1 saattir. Böyle bir saate ihtiyacınız yok. Tekrar çevrimiçi olup bu hatayı nasıl düzeltebileceğimi aramak zorunda kaldım. Ortaya çıkan ilk çözüm, kuvarsın öğütülmesi gerektiğini söylüyor. Yaptım - sıfır sonuç. Oradan eski bir anakart ve lehim sökücü saat kuvarsını bulmam gereken başka bir yer buldum. Bitti - sonuç. Artık saat 10-11 saniye değil, günde 1,5 saniye ilerliyor. Diyelim ki daha iyi oldu ama ideal olmaktan uzak. Havya ile uğraşmak daha isteksiz olduğu için saatin programlı olarak ayarlanmasına, yani günde bir kez saatin istenilen değere ayarlanmasına karar verildi. 10 gün sonra saat bir saniyeden fazla ilerlemedi. Yöntem iyidir, ancak yalnızca Arduino zamanlama cihazı güce bağlı olduğunda, aksi takdirde saat pille çalışır ve yine de kaçar.
Küçük test programı:

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // SDA A4, SCL A5

Bayt decToBcd(bayt değeri)
{
return ((val/10*16) + (val%10));
}

Bayt bcdToDec(bayt değeri)
{
return ((val/16*10) + (val%16));
}

setDateDs1307'yi geçersiz kıl(bayt saniye, // 0-59)
bayt dakika, // 0-59
bayt saat) // 0-99
{

Wire.write(0);
Wire.write(decToBcd(saniye));
Wire.write(decToBcd(dakika));
Wire.write(decToBcd(saat));
Wire.endTransmission();
}

getDateDs1307(bayt *saniye)'yi geçersiz kılın,
bayt*dakika,
bayt*saat)
{

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

*ikinci = bcdToDec(Wire.read());
*dakika = bcdToDec(Wire.read());
*saat = bcdToDec(Wire.read());
}

Kurulumu geçersiz kıl()
{
bayt saniye, dakika, saat;
Wire.begin();
Seri.begin(9600);

İkinci = 45;
dakika = 5;
saat = 16;

SetDateDs1307(saniye, dakika, saat);
}

Geçersiz döngü()
{
bayt saniye, dakika, saat;

GetDateDs1307(&saniye, &dakika, &saat);
Seri.baskı(saat, Aralık);
seri yazdırma(":");
Seri.print(dakika, DEC);
seri yazdırma(":");
Serial.println(ikinci, DEC);

gecikme(1000);
}


Kütüphane burada kullanılmamaktadır ve işlevler okuma ve yazma süreleri için kısaltılmıştır.

Sıcaklık ve nem sensörü DHT11
Bu sensör hakkında söylenecek fazla bir şey yok. Neme ihtiyacım olmasaydı kullanmazdım bile. Ne yazık ki, teslim aldığımda fotoğrafını çekmedim, bu yüzden herhangi bir fotoğraf olmayacak. Arduino'ya bağladığım sensörün fotoğrafları aşağıda görülebilir. Sensör bağlantısı basittir (+, dijital çıkış, -). Tipik olarak sensörler dört pinli yapılır. Bu form faktörüyle üçüncü kişi hiçbir şeye bağlı değildir.
Arduino'ya bağlanmak için kütüphaneyi kullanabilirsiniz. İndirebilirsin.
LCD ekrana (1602) bilgi çıkışı sağlayan küçük bir test programı:

// kütüphane kodunu ekleyin:
#katmak
#katmak

// Nesneleri bildir
dht11 Dht11;
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

#DHT11PIN 7'yi tanımlayın
int ben;

Kurulumu geçersiz kıl()
{
lcd.begin(16, 2);
lcd.print("Durum:");
ben=0;
}

Geçersiz döngü()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(8, 0);
anahtar (chk)
{
durum 0: lcd.print("Tamam"); break;// lcd.setCursor(11, 0); lcd.print(millis()/2000); kırmak;
durum -1: lcd.print(“Sağlama toplamı hatası”); Merr(); kırmak;
durum -2: lcd.print("Zaman aşımı hatası"); Merr(); kırmak;
varsayılan: lcd.print("Bilinmeyen hata"); Merr(); kırmak;
}
gecikme(500);
lcd.setCursor(15, 0);
anahtar(i)
{
durum 0: lcd.print("^"); lcd.setCursor(15, 1); lcd.print(" ");break;
durum 1: lcd.print("v"); lcd.setCursor(15, 1); lcd.print(" ");break;
varsayılan: lcd.setCursor(15, 1); lcd.print("E"); kırmak;
}
ben=i+1;
eğer (i>1) i=0;
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.setCursor(2, 1);
lcd.print((float)DHT11.nem, 0);
lcd.setCursor(4, 1);
lcd yazdır("%");
lcd.setCursor(8, 1);
lcd.print("T=");
lcd.setCursor(10, 1);
lcd.print((float)DHT11.temperature, 0);
lcd.setCursor(12, 1);
lcd.print("C");

Geçersiz mErr()
{
lcd.setCursor(2, 1);
lcd.print("**");
lcd.setCursor(10, 1);
lcd.print("**");
i=5;
}


Sensörün dezavantajları vardır; sensörden gelen veriler yalnızca tamsayılar halinde gelir ve aralık zayıftır.

Görünüşe göre tüm bileşenler hakkında yazmış. Her şeyi tek bir bütün halinde toplamak kalır.
Ah, neredeyse unutuyordum! Cihazı monte etmek için bir kasaya ihtiyacınız var. Dava ayrıca Ebay'de de sipariş edildi. Satıcı İngiltere'dendi. Kargo hızlı geldi ama fotoğrafını çekmedim. Cesedin tüm fotoğrafları aşağıdadır.

Öncelikle özel kablolamalar yardımıyla her şeyi masanın üzerine monte ettim. Bir test programı yazdım ve kontrolöre yükledim.



Aslında arka ışığın mavi rengi çok daha parlak. Minimum parlaklıkta bile (Parlak=5) çerçeve açığa çıkar.

Her şeyi kablosuz olarak monte etmek için mini bir anakart yapılmasına karar verildi ve konnektörlere Arduino kartı ve kalkanlar yerleştirildi. Bu durumda kolayca ve hızlı bir şekilde çıkarılabilirler. Ayrıca LCD ekranı ve kontrol düğmelerini konektörlere bağlamaya karar verdim, yalnızca sıcaklık sensörünü kablolara lehimledim.
Eşarp böyle ortaya çıktı



Son fotoğrafta akıyı henüz yıkamadım. En azından bir tür destek olması için konektörlerin yanındaki kalkanların altına gözenekli kauçuk yapıştırdım. Aslında kontaklardaki konektörlerdeki korumalar zaten mükemmel bir şekilde tutulmuş olsa da.

Kalkanlar ve Arduino kartı takılı anakart.

Anakarta tam bir bağlantı böyle görünüyor


Düğmeler yerine devre tahtasına lehimlenmiş ev yapımı bir kalkan kullandım. Düğme olarak eski farelerin düğmelerini kullandım.
Gördüğünüz gibi tel sayısı azaldı.

Kasaya yerleştirmedeki asıl sorun, LCD ekranın oluğunu eşit şekilde kesmektir. Ne kadar uğraşırsam uğraşayım yine de tam olarak sonuçlanmadı. Bazı yerlerdeki boşluklar 1 mm'den biraz fazlaydı. Her şeyin düzgün görünmesi için akvaryum için siyah bir dolgu macunu aldım ve tüm çatlakları doldurdum, aynı zamanda ekranı bu özel dolgu macununa yapıştırdım. Sızdırmazlık maddesi kuruduktan sonra fazlalığı dışarıdan kestim. Parlak ışıkta sızdırmazlık maddesi görülebilir ve normal ışıkta her şey kasayla birleşir.
LCD ekran ve anakart takılıyken kasa içeriden böyle görünüyor.

Parlak ışıkta dışarıdan bakıldığında böyle görünüyor (Parmak izleri için özür dilerim, fotoğrafları düzenlerken gördüm).

Uzun süre düğmeleri kasaya nasıl takacağımı ve en önemlisi hangi düğmeleri kullanacağımı düşündüm ...
Elektronik mağazalarında uzun iğneli düğmeyi ve bu iğneye takılan uçları beğendim. Bu düğmeler panele lehimlemek için kullanılır. Her şey yoluna girecek, ancak bir eksileri var - baskı vuruşu çok küçük ve yüksek.
Düğmeleri iki aşamada yerleştirmem gerekiyordu: Birincisi düğmeleri tahtaya yerleştirmek, ikincisi ise bu tahtayı başka bir tahtaya monte etmekti. Ve sonra tüm bunları kılavuzların üzerindeki gövdeye koyun.

Düğmeli eşarp şu şekilde görünüyor:



Yönetim kurulu şöyle görünüyor:


Burada düğmelerin bulunduğu panonun yerleştirildiği kılavuzları görebilirsiniz. Tahtayı sağlamlaştırmak için bazı elemanları lehimledim.

Şimdi her şeyi vücuda koyuyoruz
Düğmeleri bağlamadan:


Düğme bağlantısıyla:

Kutuyu kapatın ve açın. Her şey yolunda gidiyor, düğmeler olması gerektiği gibi çalışıyor.

Sonunda cihazın farklı modlarda kısa bir videosunu yayınlıyorum:
http://www.youtube.com/watch?v=KsiVaUWkXNA&feature=youtu.be
Videoyu göremeyenler için link burada

İncelemeyi bitirmenin zamanı geldi.
Program hakkında biraz yazacağım ve ardından kısa sonuçlar çıkaracağım. Programı yazarken 30720 byte sınırına bu kadar çabuk ulaşacağımı düşünmemiştim.


Kodu optimize etmem gerekiyordu. Birçok kod parçasını alt programlara taşıdık. Derlenmiş bir formdaki switch ... case ifadesinin birkaç if ... else ifadesinden daha fazla yer kapladığını hiç düşünmezdim. Değişkenlerin doğru beyanı aynı zamanda yerden tasarruf sağlar. Bir diziyi uzun olarak bildirirseniz, baytla idare etmek oldukça mümkün olmasına rağmen, dizinin boyutuna bağlı olarak bellek aşımı 500 bayta ulaşır. Bir program yazdığınızda, onu düşünmezsiniz ve ancak daha sonra programı analiz ettiğinizde bazı şeyleri yanlış yaptığınızı anlar ve kodu optimize etmeye başlarsınız. Programın boyutuyla ilgili sorunlar çözüldükten sonra RAM sınırlamasıyla karşılaştım. Bu, programın yüklendikten sonra takılmaya başlamasıyla ifade edildi. Boş RAM'i hesaplamak için bir alt programa girmek zorunda kaldım. Sonuç olarak, ekranda simgeler göstermesi gerektiği için bir hava durumu tahmin algoritmasından vazgeçmek zorunda kaldım. Algoritmanın kendisi çalışıyor ancak simgelerin çıktısının ayrılması gerekiyordu. Kodun nasıl optimize edileceğine dair hâlâ fikirlerim var ancak yakın gelecekte performansı değerlendirmek ve tüm hataları belirlemek için cihazı olduğu gibi çalışır durumda bırakacağım.

Şimdi bazı sonuçlar
Eksileri
1) Fiyat. Bu eksiliğin bahanesi bir hobinin asla ucuz olmamasıdır.

artıları
1) Cihazın mükemmel işlevselliği
2) İşlev genişletme yalnızca kullanılan denetleyici ve kendi isteğiniz ile sınırlıdır
3) Düşünmeden gelen estetik zevk ve yine de bu cihazı bir araya getirip tamamlamış olmamdan kaynaklanan ahlaki tatmin

+85 almayı planlıyorum Favorilere ekle İncelemeyi beğendim +137 +304
  • Bu "kendin yap hava durumu istasyonu", makalenin başında belirtildiği gibi tesis içinde ve dışında değil, saha koşullarında çalışmak üzere tasarlanmıştır. Piller, kendi ekranı. Bunun için dizüstü bilgisayar kullanmak çok daha kolay ve kullanışlı olacaktır.
  • Ürün yazılımını indiremiyorum: (Başka bir yere gönderebilir misiniz? Ya da allmail@ mail.ru adresine bulanıklaştırabilirsiniz.
  • Her şey oldukça süslü ve pahalı.
  • Bunun zor olduğuna katılıyorum, ancak herkes için (para açısından) Çinli hava durumu uzmanlarıyla karşılaştırılabilir olduğu ortaya çıkıyor ve cihaz yazılımını, verilerini biraz düzelterek cihazı akıllı bir evin "küplerinden" biri olarak düşünmenizi öneririm. RS232 aracılığıyla örneğin fotoğraf çerçevesi-ev kontrol merkezi olarak kullanılan bir PC'ye veya PDA'ya iletilebilir.
  • Bu arada, donanım yazılımı ve kaynaklar normalde projenin İngilizce dilindeki sayfasından indirilir.
  • Günlük yaşamda neden bu kadar karmaşıklığın olduğunu belli belirsiz hayal ediyorum. En dik istasyon, uzay fotoğrafçılığıyla karşılaştırılabilecek bir tahmin vermeyecektir. Ne mobil ne de radyo internetin olmadığı böylesine vahşi bir bölgedeki kampanyalarda olmadığı sürece. Ve bu pek olası değil: Hayatları hava durumuna bağlı olan tüm ciddi şirketlerin (planör pilotları, dağcılar) bir uydu navigatörü vardır ve dolayısıyla tahminlere erişimleri vardır.
  • Yani bu cihaz bir tahmin vermiyor ancak hava durumu parametrelerinin güncel değerlerini gösteriyor. Ve asıl amacı kamp yapmak değil, örneğin bir seradaki parametreleri ölçmek ve eve aktarmaktır. Bu arada, makalenin başlangıcı şu şekilde de tercüme edilebilir: "Basınç ölçümü, bağıl nem, iç ve uzaktan dış sıcaklık ölçümü ile hava durumu istasyonu", odadan bahsetmiyor.
  • Plan biraz zor ama ilginç ve günlük yaşamda ve üretimde, tesis parametrelerinin izlenmesinde ve herhangi bir sürecin otomatikleştirilmesinde uygulama bulacak.
  • Günün güzel zamanı! Yazdırma ve ürün yazılımı dosyalarını indiren herkes lütfen forumu atın veya [e-posta korumalı]. Şimdiden teşekkürler!
  • Peki, eğer kimsede donanım yazılımı dosyaları ve baskılı devre kartı yoksa, o zaman söyleyin bana, tüm bu dosyaları hangi salak sildi?
  • Sakin olmanızı tavsiye ederim, sanki tüm dünya size mezara kadar borçlu gibi geliyor. Orijinal kaynak sayfasına bakın http://www.elxproject.com/elx/news.php?readmore=36
  • İki yıldır kablosuz sıcaklık ve nem sensörlü bir tane kullanıyorum.
  • Hayır, kimsenin bana hiçbir borcu yok. Tabii ki, keskinlik için özür dilerim - az önce bu bağlantıdaydım. Bu bağlantıda öyle bir izlenim yaratıldı ki, kategorik olarak Facebook'a kaydolmak zorunda kaldım, ancak bu "çok" sinir bozucu. İndirme işlemi işe yaramadı. Talep - eğer varsa, indirilen arşivleyici - görünüm, lütfen, zor olmasa da, foruma. Şimdiden teşekkür ederim. Not: Öyle düşünüyorum, ana işlevin yanı sıra forumlar da insanları bu tür hemoroitlerden kurtarmak için var - dibile reklamlarını görüntülemek ve sosyal ağlarda zorla kaydolmak vb.
  • Lütfen arşivi ektedir. Şemalar, mühürler, kaynaklar, ürün yazılımı. "Kalbinize" almamalısınız, ancak gelecek için hemen küfretmemeli ve kızmamalısınız. Forumun birçok üyesi gibi ben de bazı bilgilere, dosyalara, şemalara ve hatta belki de çok acil ihtiyaç duyduğunuzun farkındayım, ancak bunları her zaman anında elde edemezsiniz. 28.07.2013 tarihli mesajınızda talebinizi gördüm ancak bugüne kadar herhangi bir şekilde cevap veremedim veya yardımcı olamadım (belki diğer forum kullanıcılarının da benzer durumu vardır). üzerinize "belirli bir yönde" sözler yağar ve ardından küfürle "zincirleme reaksiyon" olur ve sonuç olarak tartışma (konu) iş olmaktan çıkar ve bir bütün olarak forum hakkında çok kötü bir fikir kalır. ... İyi şanlar! Bir şey olursa sor, elimizden gelen her şekilde yardım edeceğiz!
  • İyi günler VADZZ! Arşivlediğiniz için teşekkürler!

Bu makale, gerçek zamanlı olarak çalışan otonom bir meteoroloji istasyonunun projesini sunmaktadır. Cihaz, analog veya dijital verileri toplar ve bunları GPRS iletişim kanalı aracılığıyla bir web sunucusuna gönderir. Bunun için bir güneş pili ve pili uyarlarsanız, istasyon tamamen özerk hale getirilebilir. Cihaz 3 analog veya dijital girişi desteklemektedir. Devrenin kalbi PIC16F877A mikrodenetleyicisidir. Mikrodenetleyici aynı zamanda GSM/GPRS modülüyle de iletişim kurar. SIM900 veya SIM300 Baskılı devre kartının arka tarafında bulunur.
Başlangıçta cihaz, farklı konumlar için rüzgar akış kuvvetine ilişkin bir veri tabanı toplamak amacıyla rüzgar akışını ölçmek üzere tasarlandı. Gelecekte bu, rüzgar jeneratörünün en uygun konumunu seçmenize olanak sağlayacaktır.

Veriler normal bir GET isteği kullanılarak web sunucusuna gönderilir. Bu, veri aktarmanın en basit yöntemidir. Github'da kaynak kodları var, içlerinde karmaşık hiçbir şey yok.

GSM modülünün şematik diyagramı:

GSM modülü olarak popüler SIM900/300'ü seçtim. UART kullanarak bağlanır ve AT komutlarını kullanarak onunla etkileşime girer. Modül besleme voltajı 3,6V'tur. Modüle harici bir anten bağlanır. Modülde, pilleri ve bunları şarj etmek için bir güneş paneli veya rüzgar jeneratörü kullanıldığında çok kullanışlı olan yerleşik bir şarj cihazı denetleyicisi bulunur.
Devre, GSM durumunu gösteren (yanıp sönen) bir gösterge LED1'i kullanır. Modülün açılıp kapatılması S3 butonu ile yapılır.

Not 1. Projenin geliştirilmesi sırasında SIM300 modülü durduruldu ve daha yeni bir SIM900 ile değiştirildi. Yukarıdaki diyagram SIM300 için tasarlanmıştır, SIM900 modülü için modül ile SIM kart arasındaki bazı öğeler kaldırılacaktır (veri sayfalarına bakın).

Not 2. S3 anahtarı, GSM modülünü etkinleştirmek/devre dışı bırakmak için tasarlanmıştır, ancak mikro denetleyicinin çıkışına bağlanan bir transistör ile değiştirilebilir. Bu, GSM modülünü MK'den gelen bir komutla etkinleştirecek veya devre dışı bırakacaktır. Bu daha doğru bir devre çözümüdür.

Not 3: Vbat pinine >4V uygulandığında modül düzgün çalışır.

MK PIC 16F877A'lı bir hava istasyonunun şeması:

Yani ana mikrodenetleyici 16 MHz frekansında çalışan PIC 16F877A'dır. MK, GSM modülü gibi Vbat tarafından desteklenmektedir. RA0,1,2 pinleri analog giriş olarak kullanılır. Bu pinlerden gelen giriş voltajı harici kullanılarak dönüştürülür. 3,1V zener diyot kullanılarak elde edilen Vref = 3,1V olan ADC. Vbat ve GND ayrıca harici sensörlere güç sağlamak için (gerekirse) giriş konnektörlerine gönderilir. Transistör Q3 (BC547), PWM'nin LCD ekranın parlaklığını kontrol etmesi için kullanılır. S4 düğmesi mikro denetleyiciyi sıfırlamak için kullanılır ve R1, çekme direnci olarak kullanılır. Cihaz ayrıca devre içi programlama için bir PIC-ICSP konektörü kullanır.

16×2 LCD HD44780 ekran:

LCD ekran durum bilgilerini görüntülemek için kullanılır. Devre, ekranın arka ışığını kapatmak için bir Power-LCD anahtarı kullanır, bu da devrenin güç tüketiminden tasarruf sağlar. Ayrıca, anahtarın çıkışı LCD-INT mikrokontrolörüne bağlanır, böylece MK LCD'nin ne zaman açıldığını bilir (LCD, üzerindeki bilgileri görüntülemek için mikrokontrolörde başlatılır). Bu sayede meteoroloji istasyonunun ana devresinin çalışması sırasında LCD modülünün bağlantısını kesmek ve bağlamak mümkündür.

Cihazın bazı fotoğrafları:

Github'daki proje (en son ürün yazılımı, PCB dosyaları, PDF vb.)

Sıcaklık sensörleri hırsız alarmlarının veya Akıllı Ev sistemlerinin bir parçası olarak kullanılır. Ana işlevleri odadaki sıcaklığı kontrol etmektir. Bilgi toplamak ve merkezi alarm cihazına göndermek gerektiğinde GSM sıcaklık sensörü satın almalısınız. Akıllı Ev sistemlerinde cihaz, elektrikli cihazların otomatik olarak açılıp kapanmasını etkileyen iç mekan iklimi hakkında bilgi edinmenizi sağlar. Ayrılmaz bir parçası sıcaklık sensörlü bir alarm sistemi olan tesislerin GSM kontrolü, sahibinin zamanından ve parasından mümkün olduğunca verimli bir şekilde tasarruf etmenizi sağlar. Bir SIM kart satın alıp takmak ve sensörü bir elektrik prizine bağlamak yeterlidir.

GSM termometreleri ne işe yarar?

  • Her türlü ısıtma cihazının (elektrikli, gazlı veya katı yakıtlı kazanlar) uzaktan kontrolü için;
  • Isıtıcıları (klima, kızılötesi ısıtıcılar, yerden ısıtma ve diğerleri) kontrol etmek için;
  • Sıcaklık ve nem hakkında bilgi toplamak.

Uzmanların GSM termometreleri ve sıcaklık sensörlü alarmlar hakkındaki incelemelerine inanıyorsanız, sıcaklık kontrol ve düzenleme sistemlerinin oda iklimini kontrol etmenin en modern yolu olduğu sonucuna varabiliriz. Bu sadece ısıtma veya iklimlendirme değil, aynı zamanda havayı filtreleme ve nemlendirme yeteneğidir.

Neden bir GSM termometresi ve sıcaklık sensörlü bir alarm sistemi satın almaya değer?

  • Sıcaklık rejimi ile ilgili tüm bilgileri istediğiniz zaman alma imkanı. Modellerin çoğu, gerçek zamanlı veri toplama ve kullanımına olanak tanıyan Android/iOS Uygulamaları aracılığıyla kontrol edilebilir;
  • Cihaz, otomatik veya yarı otomatik modlarda onlarca görevi gerçekleştirerek kullanıcının sıcaklık ve iklim değişkenlerini manuel olarak kontrol etme ihtiyacını ortadan kaldırıyor;
  • Cihaz kullanılarak elde edilen elektrik, su, gaz tasarrufunun tüm olası yolları göz önüne alındığında, GSM sıcaklık sensörünün fiyatı oldukça düşük görünüyor;
  • Sıcaklık kritik bir noktaya ulaşırsa (kendi ayarladığınız değer), sensör bunu bir SMS mesajı göndererek bildirecektir. Ayrıca cihaz SMS komutları kullanılarak yapılandırılabilir ve kontrol edilebilir.

Çalışma prensibi

Rüzgar hızı ve yönü sensörü ve diğer sensörlerden toplanan veriler, kontrol cihazı tarafından GPRS ağı üzerinden kablosuz olarak internetteki sunucumuza veya sunucunuza iletilir ve burada gerçek zamanlı olarak görüntülenebilmekte ve eksiksiz bir arşiv olarak indirilebilmektedir.

Ana işlevler

Hava durumu verilerinin her dakika toplanması, biriktirilmesi ve internetteki bir sunucuya iletilmesi.
Giriş gücü voltaj seviyesinin toplanması ve sunucuya iletilmesi.
Olayla ilgili yerleşik alarmın / uyarı cihazının normalde kapalı sensörünü bağlamak için giriş.

İşletme maliyeti

Aylık GPRS trafiğinin maliyeti yaklaşık 100 ruble.
Kontrolör bakım gerektirmez. Arızalara karşı iki düzeyde önlem vardır.
Kontrol cihazı, nem, toz ve ısı direnci dikkate alınarak endüstri standardında kaliteli bir tasarıma ve üretime sahiptir.

Ölçülen miktarlar

GPRS Anemometresi:


- sıcaklık (güneşten gelen radyasyon koruması olmadan)

GPRS hava durumu istasyonu:

Rüzgar hızı ve yönü
- sıcaklık
- Atmosfer basıncı
- nem

Kesinlik

Rüzgar yönü - 16 sektör
Rüzgar hızı - 0 ila 66 m/s - %5
Atmosfer basıncı - %2
Nem - %2
Sıcaklık - %2

kullanım Şartları

-40 ila +60 santigrat derece arası çalışma sıcaklığı.
Cihazlar açık veya kapalı alanda kurulum için tasarlanmıştır.

Güç kaynağı

İki öncelikli güç girişi:

Giriş - harici bir güç kaynağından veya USB'den 5 volt.

Teknik Destek

Tüm müşteriler tam teknik ve garanti desteği alır.

1 yıl garanti

Teçhizat

1. Direk montajlı Davis rüzgar hızı ve yönü sensörü.
2. Sensörlü veri toplama ve aktarma ünitesi.
3. Güç kaynağı 220/USB
4. Gerekli tüm kablolar.
5. Verileri görüntülemek ve toplamak için sunucuya yerleştirin.
6. Kurulum ve devreye alma konusunda yardım.
7. Veri toplamak ve biriktirmek için sitenizi oluşturma konusunda yardım.

Ek özellikler (standart teslimata dahil değildir)

2. giriş 5 - 30 volt güneş panelinden veya harici aküden / güç kaynağından. (SEÇENEK)

Toplanan bilgilerin dahili mikro SD hafıza kartına kopyalanması.

Verilerin uzun mesafeler üzerinden kablo üzerinden bilgisayara aktarılması.
Bir bilgisayara bağlanmanın standardı RS232 veya USB arayüzleridir.

İkinci anmorumbometrenin kontrolörüne bağlantı.
Kontrol cihazı hız sensörüne ve dahili takometreye bağlantı.

Analog çıkışlı profesyonel anemometreler gibi diğer ekipmanları bağlamak için denetleyici girişlerini frekans ölçerler ve voltmetreler olarak yapılandırma.

Düşük çalışma sıcaklığı aralığını genişletmek için dahili ısıtma.

Samimi olarak,
şirket ekibi.

© 2023 bugulma-lada.ru - Araç sahipleri için portal