Daftar Isi:

Namun Stasiun Cuaca Cerdas Lain, Tapi : 6 Langkah (dengan Gambar)
Namun Stasiun Cuaca Cerdas Lain, Tapi : 6 Langkah (dengan Gambar)

Video: Namun Stasiun Cuaca Cerdas Lain, Tapi : 6 Langkah (dengan Gambar)

Video: Namun Stasiun Cuaca Cerdas Lain, Tapi : 6 Langkah (dengan Gambar)
Video: Asekkk😀😀😀 #shorts #pontianak #komedi 2024, Juni
Anonim
Image
Image
Namun Stasiun Cuaca Cerdas Lain, Tapi …
Namun Stasiun Cuaca Cerdas Lain, Tapi …
Namun Stasiun Cuaca Cerdas Lain, Tapi …
Namun Stasiun Cuaca Cerdas Lain, Tapi …
Namun Stasiun Cuaca Cerdas Lain, Tapi …
Namun Stasiun Cuaca Cerdas Lain, Tapi …

Oke, saya tahu ada begitu banyak stasiun cuaca seperti itu tersedia di mana-mana, tetapi luangkan beberapa menit untuk melihat perbedaannya…

  • Daya rendah
  • 2 tampilan kertas elektronik…
  • tapi 10 layar yang berbeda!
  • berbasis ESP32
  • akselerometer dan sensor suhu / kelembaban
  • Pembaruan Wi-Fi
  • kasus cetak 3D

dan banyak trik bermanfaat lainnya…

Ide utamanya adalah untuk menampilkan berbagai informasi pada kedua tampilan tergantung pada orientasi kotak. Casingnya berbentuk parallelepipedic box, paving stone, dengan semacam ikat pinggang yang berfungsi sebagai alas kaki.

Perlengkapan

Seperti yang Anda lihat, sistem ini terdiri dari 2 layar e-paper dan kotak cetak 3D. Tapi ada banyak hal di dalamnya:

  • Sebuah ESP32
  • Satu akselerometer MPU6050
  • Sensor DHT22
  • Baterai LiPo
  • PCB untuk menghubungkan semuanya
  • Benang duPont buatan sendiri

dan koneksi Wi-Fi. Nyatanya 3 jaringan dideklarasikan, sistem mengujinya satu per satu hingga berhasil terkoneksi.

Langkah 1: Mengapa Stasiun Cuaca Lain?

Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?
Mengapa Stasiun Cuaca Lain?

Idenya adalah untuk menampilkan berbagai jenis informasi di kedua layar tergantung pada orientasi kotak. Casingnya berbentuk parallelepipedic box, paving stone, dengan semacam ikat pinggang yang berfungsi sebagai penopang untuk membuatnya berdiri.

Akselerometer mendeteksi gerakan dan orientasi dan memicu tampilan.

Untuk menghemat energi, saya memilih layar e-paper (lihat referensi di bawah) yang menjaga tampilan meskipun tidak lagi dialiri daya. Demikian pula untuk ESP32, saya memilih modul Lolin32 (terkenal karena hematnya) dan saya harus belajar bagaimana mengelola tidur nyenyak, dan bangun saat interupsi yang dihasilkan oleh akselerometer.

Layar terhubung melalui SPI, saya mencari sedikit sebelum menemukan pin yang tepat untuk menghubungkannya ke ESP32, mengetahui bahwa saya juga membutuhkan I2C untuk accelerometer, pin untuk membaca DHT22 dan 2 lainnya untuk pengukuran tegangan baterai. ESP32 hampir terisi penuh! Mengetahui bahwa beberapa pin bersifat read-only (saya menggunakannya untuk sensor DHT), yang lain tidak dapat digunakan bersama dengan Wifi, agak rumit untuk menemukan konfigurasi yang tepat.

Kotak dapat diorientasikan ke 4 arah, plus datar. Secara keseluruhan, itu membuat 4*2+2 = 10 kemungkinan jenis informasi untuk ditampilkan hanya dengan 2 layar. Jadi ini memungkinkan Anda untuk menampilkan banyak hal:

  • Tanggal, dan santo hari ini
  • Waktu saat ini
  • Prakiraan cuaca hari ini
  • Prakiraan cuaca untuk beberapa jam mendatang
  • Prakiraan cuaca untuk beberapa hari mendatang
  • Tingkat pengisian baterai
  • Dan karena saya masih memiliki ruang, kutipan acak dari situs web khusus.

Langkah 2: Apa yang Anda Butuhkan?

Apa yang kamu butuhkan ?
Apa yang kamu butuhkan ?
Apa yang kamu butuhkan ?
Apa yang kamu butuhkan ?
Apa yang kamu butuhkan ?
Apa yang kamu butuhkan ?
  • ESP32: Modul Lolin32 (daya sangat rendah, dilengkapi dengan konektor baterai, dapat mengisi baterai melalui USB plus)
  • 2 tampilan epaper: 4,2 inci dan 2,9 inci. Saya memilih model dari toko Good Display.
  • Sensor DHT22
  • Akselerometer MCU6050 - sensor girometer I2C
  • Baterai LiPo
  • Untuk pengukuran tegangan baterai: 2 resistor 10k, 1 resistor 100k, 1 kapasitor 100nF, 1 transistor MOSFET
  • Solder dan besi solder, papan sirkuit tercetak
  • Akses ke printer 3D untuk kasing

Gambar terlampir menunjukkan posisi semua komponen pada PCB: Saya harus menghemat ruang agar muat di casing, yang tidak boleh terlalu besar.

Untuk mendapatkan data cuaca, Anda juga perlu mendaftar di API cuaca dan meletakkan kunci Anda di tempat yang benar di file 'Variables.h' (lihat di bawah).

Situs web cuaca:

  • apixu
  • accuweather

Langkah 3: Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…

Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…
Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…
Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…
Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…
Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…
Proyek Ini Membuat Saya Berpikir dan Belajar Banyak…

Sistem ini seharusnya berdaya rendah, sehingga Anda tidak perlu mengisi daya baterai setiap malam… Untuk menghemat energi, saya memilih layar e-paper yang menjaga tampilan meskipun tidak lagi bertenaga. Demikian pula untuk ESP32, saya memilih modul Lolin32 (terkenal karena hematnya) dan saya harus belajar bagaimana mengelola tidur nyenyak, dan panggilan bangun saat interupsi yang dihasilkan oleh akselerometer.

Kotak dapat diorientasikan ke 4 arah, lebih rata. Semua dalam semua itu membuat 4*2+2 = 10 kemungkinan jenis informasi untuk ditampilkan. Jadi memungkinkan Anda untuk melakukan banyak hal: tanggal, dan santo hari, waktu, ramalan cuaca hari ini, ramalan cuaca untuk jam atau hari mendatang, tingkat pengisian baterai dan kutipan acak dari situs web khusus.

Banyak yang harus dicari di Internet, dan seperti yang Anda tahu: WiFi adalah musuh hemat energi…

Jadi kita harus mengatur koneksi, untuk menampilkan informasi terkini tetapi tanpa menghabiskan terlalu banyak waktu untuk menghubungkan. Masalah lain yang agak rumit: menjaga waktu yang cukup akurat. Saya tidak memerlukan RTC karena saya dapat menemukan waktu di internet, tetapi jam internal ESP32 sedikit bergeser, terutama selama periode tidur. Saya harus menemukan cara untuk tetap cukup akurat, sambil menunggu untuk mengatur ulang jam melalui internet. Saya menyinkronkannya ulang di internet setiap jam.

Jadi ada trade-off antara otonomi (frekuensi koneksi internet) dan keakuratan informasi yang ditampilkan.

Masalah lain yang harus dipecahkan adalah memori. Saat ESP32 dalam kondisi deep sleep, memori hilang, kecuali yang disebut RTC RAM. Memori ini memiliki lebar 4MB, dimana hanya 2 yang dapat digunakan untuk program tersebut. Dalam memori ini, saya harus menyimpan berbagai variabel program yang harus disimpan dari satu eksekusi ke eksekusi berikutnya, setelah fase tidur: prakiraan cuaca, waktu dan tanggal, nama file ikon, kutipan, dll. Saya harus belajar menghadapinya.

Berbicara tentang ikon, mereka disimpan di SPIFFS, sistem file ESP32. Setelah penutupan API cuaca Wunderground gratis, saya harus mencari penyedia data cuaca gratis lainnya. Saya memilih dua: satu untuk cuaca hari ini, dengan prakiraan 12 jam, dan satu lagi untuk prakiraan beberapa hari. Ikonnya tidak sama, jadi itu menyebabkan saya dua masalah baru:

  • Pilih kumpulan ikon
  • Cocokkan ikon ini dengan kode perkiraan dari 2 situs

Korespondensi ini juga telah disimpan di RTC RAM sehingga tidak perlu di-reload setiap saat.

Masalah terakhir dengan ikon. Mustahil untuk menyimpan semuanya di SPIFFS. Ruang terlalu kecil untuk semua file saya. Itu perlu untuk melakukan kompresi gambar. Saya menulis skrip dengan Python yang membaca file ikon saya dan mengompresnya ke dalam RLE, dan kemudian menyimpan file terkompresi di SPIFFS. Di sana diadakan.

Tapi perpustakaan tampilan e-paper hanya mengambil file tipe BMP, bukan gambar terkompresi. Jadi saya harus menulis fungsi tambahan untuk dapat menampilkan ikon saya dari file terkompresi ini.

Data yang dibaca di internet sering dalam format json: data cuaca, Saint of the day. Saya menggunakan perpustakaan arduinoJson (hebat) untuk ini. Tapi kutipan tidak seperti itu. Saya mengambilnya dari situs khusus, jadi saya harus membacanya dengan melihat langsung ke konten halaman web. Saya harus menulis kode khusus untuk itu. Setiap hari, sekitar tengah malam, program pergi ke situs ini dan membaca sekitar sepuluh kutipan acak, dan menyimpannya di RTC RAM. Satu ditampilkan secara acak di antara mereka ketika perumahan berorientasi layar besar ke atas.

Saya memberikan Anda masalah tampilan karakter beraksen (maaf, tetapi kutipan dalam bahasa Prancis)….

Saat layar kecil menyala, tegangan baterai ditampilkan, dengan gambar untuk melihat level yang tersisa dengan lebih baik. Itu perlu untuk membuat perakitan elektronik untuk membaca tegangan baterai. Karena pengukuran tidak boleh menguras baterai, saya menggunakan diagram yang ditemukan di internet, yang menggunakan transistor MOSFET sebagai sakelar untuk mengkonsumsi arus hanya saat pengukuran dilakukan.

Agar dapat membuat sirkuit ini dan memasukkan semuanya ke dalam kotak, yang saya inginkan sekecil mungkin, saya harus membuat PCB untuk menghubungkan semua komponen sistem. Ini adalah PCB pertama saya. Saya beruntung karena semuanya bekerja dengan baik pertama kali di sisi ini …

Lihat peta implantasi: "zona terlarang" adalah area yang disediakan untuk menghubungkan kabel USB. Modul Lolin32 memungkinkan Anda untuk mengisi ulang baterai melalui USB: baterai diisi jika kabel USB terhubung, dan modul bekerja pada waktu yang sama.

Poin terakhir: font. Dengan ukuran yang berbeda, tebal atau tidak, mereka harus dibuat dan disimpan. Pustaka Adafruit GFX menanganinya dengan sangat baik, setelah Anda menginstal file font di direktori yang benar. Untuk membuat file, saya menggunakan situs Font Converter, sangat nyaman!

Pastikan Anda memilih:

  • Tampilan pratinjau: TFT 2.4"
  • Versi perpustakaan: Adafruit GFX Font

Jadi untuk meringkas: proyek besar, yang memungkinkan saya untuk belajar banyak hal

Langkah 4: Menggunakan Tampilan E-paper

Menggunakan Tampilan E-paper
Menggunakan Tampilan E-paper

Kerugian utama dari layar ini terlihat jelas di video: pembaruan tampilan membutuhkan waktu satu atau dua detik dan dilakukan dengan flashing (tampilan alternatif dari versi normal dan terbalik dari dua layar). Ini dapat diterima untuk informasi cuaca karena saya tidak sering memperbaruinya (setiap jam kecuali untuk perubahan orientasi kotak). Tapi tidak untuk saat ini. Itu sebabnya (dan untuk membatasi konsumsi) saya masih menggunakan tampilan HH:MM (bukan detik).

Jadi saya harus mencari cara lain untuk memperbarui tampilan. Layar ini (beberapa di antaranya) mendukung pembaruan sebagian (diterapkan baik ke area layar, atau ke seluruh layar…) tetapi itu tidak baik bagi saya karena layar besar saya (yang menampilkan waktu) menyimpan bayangan piksel yang diganti. Misalnya, ketika melewati 10:12 ke 10:13, '2' sedikit terlihat di dalam '3', dan menjadi lebih terlihat setelah '4', '5', dll. Saya ingin untuk menunjukkan bahwa ini adalah kasus untuk layar saya: Saya mendiskusikannya dengan penulis perpustakaan tampilan e-paper GxEPD2 yang mengatakan kepada saya bahwa dia tidak mengamati fenomena ini dengan layarnya sendiri. Kami mencoba mengubah parameter tanpa berhasil berburu hantu.

Jadi kami harus mencari solusi lain: Saya mengusulkan untuk melakukan penyegaran ganda parsial, yang memecahkan masalah (setidaknya itu memuaskan bagi saya). Jam-jam berlalu tanpa layar berkedip dan tidak ada hantu. Namun, pergantian tidak langsung: dibutuhkan sedikit lebih dari satu detik untuk mengubah waktu.

Langkah 5: Membuatnya

Membuatnya
Membuatnya
Membuatnya
Membuatnya
Membuatnya
Membuatnya
Membuatnya
Membuatnya

Untuk memastikan bahwa tidak ada yang bergerak di dalam saat orientasi berubah, komponen yang berbeda (display, modul elektronik, PCB, baterai) direkatkan dengan lem. Untuk merutekan kabel di bawah PCB, saya memasangnya pada kaki yang dibuat dengan spacer, hal yang sama berlaku untuk baterai.

Segera saya akan memasang konektor mikrofon USB eksternal sehingga saya tidak perlu membuka casing untuk mengisi ulang baterai.

Mungkin saya juga akan tertarik untuk mengupdate dengan OTA untuk menyempurnakan itu semua….

Langkah 6: Kode dan File

Image
Image

Tiga file arsip disediakan:

  • Weather station.zip: kode Arduino, untuk diunggah menggunakan Arduino IDE
  • Boite ecran.zip: file printer CAD dan 3D untuk kasing
  • data.zip: file yang akan diupload di SPIFFS dari ESP32.

Jika Anda tidak tahu cara mengunggah file ke SPIFFS ESP32, baca saja tutorial ini, yang menyajikan plugin yang sangat berguna dan cara menggunakannya di Arduino IDE.

Pemrograman tidur nyenyak sangat berbeda dari pemrograman standar Arduino. Untuk ESP32, itu berarti ESP32 bangun dan menjalankan pengaturan, lalu tidur. Jadi, fungsi loop kosong, dan tidak pernah dieksekusi.

Beberapa fase inisialisasi harus dijalankan hanya sekali pada eksekusi pertama (seperti mendapatkan waktu, data cuaca, kutipan, dll), sehingga ESP32 perlu mengetahui apakah bangun saat ini adalah yang pertama atau tidak: untuk itu, solusinya adalah menyimpan variabel dalam RTC RAM (yang tetap aktif bahkan selama fase tidur nyenyak) yang meningkat pada setiap bangun. Jika sama dengan 1 maka itu adalah eksekusi pertama dan ESP32 menjalankan fase inisialisasi, jika tidak, fase ini dilewati.

Untuk membangunkan ESP32, ada beberapa kemungkinan:

  • Pengatur waktu bangun: kode menghitung durasi tidur nyenyak sebelum tidur. Ini digunakan untuk memperbarui waktu (setiap 1, 2, 3, atau 5 menit) atau data cuaca (setiap 3 atau 4 jam) dari kutipan dan santo hari ini (setiap 24 jam)
  • Interrupt wake-up: accelerometer mengirimkan sinyal yang digunakan untuk membangunkan ESP32. Ini digunakan untuk mendeteksi perubahan orientasi dan memperbarui tampilan
  • Bangun sensor sentuh: ESP32 dilengkapi dengan beberapa pin yang berfungsi sebagai sensor sentuh, tetapi tidak dapat digunakan dengan penghitung waktu, jadi saya tidak menggunakan ini.

Ada trik pemrograman lain di tempat lain dalam kode, untuk menjaga waktu akurat sekaligus menghemat energi (yaitu tidak menghubungkan server NTP setiap menit), untuk menghapus aksen yang tidak didukung oleh pustaka Adafruit GFX, untuk menghindari pembaruan tampilan jika tidak perlu, untuk mengatur parameter accelerometer terutama untuk interupsi bangun, menghitung waktu tidur secara akurat jika ada timer bangun, hindari menggunakan konsol Serial jika tidak terhubung ke IDE (untuk menghemat energi lagi), putuskan sambungan wifi saat tidak diperlukan, dll… dan kodenya penuh dengan komentar yang membantu memahami fungsinya.

Terima kasih telah membaca Instruksi ini (yang pertama saya). Saya harap Anda menyukainya dan menikmati pembuatan stasiun cuaca ini

Kontes Sensor
Kontes Sensor

Runner Up dalam Kontes Sensor

Direkomendasikan: