Memperbaiki termostat kamar saya , yang saya tulis sebelumnya , saya berangkat untuk menambahkannya dengan sensor suhu nirkabel untuk mengukur suhu udara luar ruangan, memasang termostat bertenaga baterai dan mengganti modul penerima-penerima RF 433MHz dengan sepasang modul radio lainnya dengan jangkauan modul radio yang lebih panjang dengan jangkauan komunikasi yang lebih panjang pada tegangan suplai yang tidak lebih dari 3V. Dalam penyelesaian masalah ini, sebuah stasiun cuaca otonom muncul, yang akan dibahas di bawah ini.
Stasiun cuaca terdiri dari dua node, sebut saja mereka penganalisa dan termometer untuk kesederhanaan. Komunikasi antar node - nirkabel, melalui udara.
Alat analisis ini didasarkan pada pengontrol ATMEGA328P dan mengukur suhu dan kelembaban di dalam ruangan (sensor suhu dan kelembaban DHT22) dan tegangan suplai alat analisis, yang disediakan oleh dua baterai AA 1.5V. Pengontrol menerima sinyal dari penerima LoRa, yang menerima informasi dari termometer (sensor jarak jauh) melalui udara. Informasi dari pengontrol ditampilkan pada LCD NOKIA 5110.
Termometer, yang juga dipasang pada pengontrol ATMEGA328P, mengukur suhu luar-ruang (sensor suhu DS18B20) dan tegangan suplai dari unit jarak jauh, yang diatur pada dua baterai AA 1,5 V. Pemancar LoRa dari unit ini mentransfer suhu dan tegangan suplai ke alat analisis.
Kontroler ATMEGA328P dan pemancar LoRa dari termometer dimasukkan ke mode tidur untuk menghemat daya baterai setelah pengukuran dan mengirim informasi. Tegangan catu daya ke sensor DS18B20 diterapkan secara terprogram hanya selama durasi pengukuran suhu. Mengukur dan mengirim data dari termometer dilakukan dengan periode sekitar satu menit.
Dalam mode kerja-tidur yang sama, alat analisa juga bekerja. Durasi pengontrol dan penerima analisis selama beberapa detik lebih dari satu menit. Ini dilakukan untuk menerima sinyal dari termometer dengan percaya diri - bagaimanapun juga, operasi termometer dan alat analisa tidak disinkronkan. Kemudian ATMEGA328P dan penerima LoRa diatur ke mode tidur selama 14 menit sebelum bangun dan memulai siklus berikutnya. DHT22 hanya menyediakan daya selama pengukuran.
Untuk memprogram mode tidur pengendali ATMEGA328P, perpustakaan LowPower.h digunakan.
Dengan keluarnya baterai, nilai tegangan berkurang pada mereka.
Batas bawah tegangan operasi untuk pengontrol ATMEGA328P adalah 1.8V. Pada saat yang sama, instalasi pabrik sekering ATMEGA328P dilakukan untuk memantau ambang tegangan suplai 2,7V, sehingga perlu untuk mengubah pengaturan pabrik sekring ke ambang pemantauan 1,8V untuk menjamin pengoperasian pengontrol ketika ditenagai oleh baterai yang terkuras.
Generator pengontrol internal mungkin tidak mulai pada frekuensi 16 MHz dengan tegangan suplai 3 V atau sedikit lebih rendah. Kedua pengendali bekerja dengan kuarsa 16 MHz pada tegangan suplai yang berkurang 2,7 ... 2,8 V, jadi saya tidak mengubah kuarsa 16 MHz menjadi 8 MHz.
Untuk merakit perangkat, Anda akan memerlukan komponen, daftar yang dan biayanya diperkirakan pada harga situs web AliExpress ditunjukkan pada tabel.
Komponen | Harga, $ |
penganalisa |
ATMEGA328P-PU Controller | 1,59 |
Sensor suhu dan kelembaban DHT22 | 2,34 |
Pemancar LoRa Ra-01 | 3,95 |
LCD NOKIA 5110 | 1.91 |
Papan tempat memotong roti (pemasangan), kabel pemasangan, baterai AA, resonator kuarsa 16 MHz, resistor, dll. | 4,00 |
termometer |
ATMEGA328P-PU Controller | 1,59 |
Sensor suhu DS18B20 | 0,63 |
Pemancar LoRa Ra-01 | 3,95 |
Papan pengembangan (fiberglass), kabel pemasangan, baterai AA, resonator kuarsa 16 MHz, resistor, dll. | 4,00 |
Total (kurang-lebih): | 24 |
Penganalisa
Otak penganalisa adalah pengontrol ATMEGA328P. Ini menerima sinyal dari sensor DHT22 dan, melalui protokol SPI, berkomunikasi dengan penerima LoRa dan layar NOKIA 5110.
Ada banyak keluhan di Internet tentang rendahnya akurasi DHT22. Hari ini ada alternatif: sensor suhu dan kelembaban yang lebih modern HTU21 (GY21) , (Vcc = 3 ... 5 V), Si7021 , (Vcc = 1.9 ... 3.6 V), SHT21 , (Vcc = 2.1 .... 3,6 V).
Saya menggunakan DHT22, karena perbedaan antara pembacaan kelembaban spesimen saya dari sensor ini dan thermo-hygrometer LaCrosse WS-9024IT yang tersedia secara komersial tidak lebih dari 8 unit, yang cukup dapat diterima untuk keperluan rumah tangga. Perbedaan antara pembacaan kelembaban meningkat sangat jika tegangan suplai DHT22 lebih rendah dari 3V. Ini bisa dimengerti, karena tegangan suplai DHT22 harus dalam 3 ... 5V. Kesimpulannya - idealnya dalam kondisi ini, sensor Si7021 cocok dengan rangkaian penganalisa.
Pada gambar di bawah ini - pinout dari elemen stasiun cuaca.
Fusion dan lebih banyak lagi dari berbagai pengontrol, termasuk ATMEGA328P, dapat dibaca dan diedit dengan utilitas SinaProg. Jika ini adalah pertama kalinya Anda menemukan program ini, maka meskipun memiliki antarmuka yang intuitif, jangan mencoba untuk mulai bekerja dengannya setelah menginstal aplikasi. Pertama baca artikel ini di mana HWman memberikan add-on SinaProg yang diperlukan saat menggunakan papan Arduino UNO sebagai bootloader.
Saya menyarankan Anda untuk terlebih dahulu membaca pengaturan pabrik dari ATMEGA328P fusi dan menyimpan nilai-nilai mereka untuk kembali kepada mereka jika terjadi kegagalan. Pada pengontrol saya, pengaturan pabrik untuk bit sekering adalah: RENDAH: 0xFF, TINGGI: 0xDE, DIPERPANJANG: 0x05 (Vcc = 2.7V, BODLEVEL = 101). Sekering baru untuk memantau ambang 1,8V yang ingin Anda atur: LOW: 0xFF, HIGH: 0xDE, EXTENDED: 0x06 (Vcc = 1.8V, BODLEVEL = 110).
Sketsa analisa untuk memuat di ATMEGA328P berada di bawah spoiler.
sketsa analisa`` `cpp
/ *
Stasiun cuaca otonom pada pengontrol ATMEGA328P dan bertenaga baterai dengan sensor jarak jauh nirkabel, penganalisa
https://habr.com/en/post/470381/
* /
#termasuk <SPI.h>
#termasuk <LoRa.h>
#termasuk <DHT.h>
#define DHTPIN 3 // pin digital apa yang terhubung dengan kami
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht (DHTPIN, DHTTYPE);
timah apung = 0;
int Hin = 0;
mengapung BatteryInLevel; // tegangan baterai dasar
String LoRaData, Tout_str, BatteryInLevel_str, BatteryOutLevel_str;
// tidur
#termasuk <LowPower.h>
#define PowerDHT (4) // pin daya DHT22
sleepCounter int unsigned;
// Nokia 5110
#termasuk <SPI.h>
#include <Adafruit_GFX.h> //https://esp8266.ru/forum/threads/esp8266-5110-nokia-lcd.1143/#post-16942
#include <Adafruit_PCD8544.h> //https://esp8266.ru/forum/threads/esp8266-5110-nokia-lcd.1143/#post-16942
// pengatur waktu
#termasuk <SimpleTimer.h>
Timer SimpleTimer;
Adafruit_PCD8544 display = Adafruit_PCD8544 (5, 7, 6);
batal sendSensor () {
digitalWrite (PowerDHT, 1);
delay (2000);
Hin = dht.readHumidity ();
Timah = dht.readTemperature ();
/ * if (isnan (Hin) || isnan (Tin)) {
// Serial.println ("Gagal membaca dari sensor DHT!");
kembali
} * /
digitalWrite (PowerDHT, 0);
// pengukuran tegangan baterai:
analogReference (INTERNAL);
int sensorValue = analogRead (A4);
BatteryInLevel = (sensorValue * 3.2 / 1024);
}
batal draw () {
display.clearDisplay ();
// Timah
{
display.setTextSize (2);
display.setCursor (8, 0);
display.println (Tin, 1); // satu tempat desimal
display.setCursor (68, 0);
display.println ("C");
}
// hin
{
display.setTextSize (2);
display.setCursor (8, 16);
display.println (String (Hin) + "%");
}
// Tout
{
char chr_Tout [12];
Tout_str.toCharArray (chr_Tout, 5);
display.setTextSize (1);
display.setCursor (50, 16);
display.println (String (chr_Tout) + "C");
}
// Level Baterai Habis
{
char chr_BatteryOutLevel [12];
BatteryOutLevel_str.toCharArray (chr_BatteryOutLevel, 4);
display.setTextSize (1);
display.setCursor (2, 32);
display.println ("BAT Out:" + String (chr_BatteryOutLevel) + "V");
}
// Level Baterai
{
display.setTextSize (1);
display.setCursor (2, 40);
display.println ("BAT In:„);
display.setCursor (56, 40);
display.println (BatteryInLevel, 1); // satu tempat desimal
display.setCursor (74, 40);
display.println ("V");
}
display.display ();
/ *
Serial.println ("Tin:" + String (Tin) + "* C");
Serial.println ("Hin:" + String (Hin) + "%");
Serial.println ("Tout:" + String (Tout_str) + "* C");
Serial.println ("BAT_In:" + String (BatteryInLevel) + "V");
Serial.println ("BAT_Out:" + String (BatteryOutLevel_str) + "V");
Serial.println ("......");
* /
}
membatalkan sleepDevice () {
// sleepCounter = 65 - 10 mnt
// sleepCounter = 91 - 14 mnt
untuk (sleepCounter = 91; sleepCounter> 0; sleepCounter--) // 91 !!!
{
LoRa.sleep ();
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
LoRa.sleep ();
}
membatalkan SignalReception () {
// coba parsing paket
int packetSize = LoRa.parsePacket ();
if (packetSize) {
// baca paket
while (LoRa.available ()) {
LoRaData = LoRa.readString ();
// Serial.println ("Diterima:" + (LoRaData));
}
int pos1 = LoRaData.indexOf ('#');
Tout_str = LoRaData.substring (0, pos1);
BatteryOutLevel_str = LoRaData.substring (pos1 +1, LoRaData.length ());
}
}
pengaturan batal () {
//Serial.begin(9600);
pinMode (PowerDHT, OUTPUT);
// inisialisasi dan hapus tampilan
display.begin ();
display.clearDisplay ();
display.display ();
display.setContrast (60); // atur kontrasnya
display.clearDisplay ();
display.setTextSize (2);
display.setCursor (12, 16);
display.println (">>>>>"); // indikasi mulai bekerja ketika dihidupkan
display.display ();
dht.begin ();
sendSensor ();
menggambar ();
while (! LoRa.begin (433E6)) {
//Serial.println (".");
keterlambatan (500);
}
// Rentang untuk kata sinkronisasi adalah antara "0 - 0xFF".
LoRa.setSyncWord (0xF3);
//Serial.println (wonLoRa Inisialisasi ");
timer.setInterval (20000, sendSensor);
timer.setInterval (5000, draw);
timer.setInterval (65000, sleepDevice);
}
void loop () {
SignalReception ();
timer.run ();
}
`` ``
Untuk bekerja dengan pengontrol ATMEGA328P, saya menggunakan papan Arduino UNO sebagai programmer. Ada video bagus di Youtube tentang cara menginstal bootloader dan mengunduh sketsa ke pengontrol ATMEGA328 menggunakan papan Arduino UNO.
Sketsa tersebut mengomentari perintah untuk keluaran ke monitor port serial (Serial). Batalkan komentar jika perlu.
Siklus dimulai dengan mendengarkan siaran dan menerima informasi oleh penerima LoRa. Timer mengatur waktu mendengarkan - 65 detik. Pada saat ini, dengan periode 5 detik, informasi pada layar NOKIA diperbarui dan, dengan periode 20 detik (3 kali), sensor DHT22 mengukur suhu, kelembaban, dan juga level tegangan baterai melalui salah satu input analog controller. Tegangan suplai ke DHT22 diterapkan hanya selama pengukuran dengan penundaan minimal 2 detik, di mana sensor masih bekerja. Output ADC dalam sketsa diskalakan ke tegangan baterai baru, yaitu 3,2V (1,6V x 2). Waktu mendengarkan udara dipilih sedikit lebih dari 1 menit untuk dengan percaya diri menerima satu paket dari termometer yang bekerja pada transmisi dengan periode 1 menit, tetapi lebih pada yang di bawah. Kemudian, pada detik ke-62, controller dan receiver dimasukkan ke mode sleep, yang berlangsung sekitar 14 menit, yaitu periode siklus "bekerja / tidur" dari penganalisa adalah sekitar 15 menit. Saya perhatikan bahwa mode tidur pada alat analisis adalah tindakan paksa yang dirancang untuk secara signifikan mengurangi konsumsi.
Sebagai perbandingan, tabel di bawah ini menunjukkan karakteristik termohygrometer LaCrosse WS-9024IT dan penganalisa dari proyek ini.
Parameter | LaCrosse WS-9024IT | SadilTM |
Nutrisi | 2xAA, 3B, Durasell | 2xAA, 3V, GP Ultra +, 1800 mAh |
Konsumsi tidur | | 350 μA (10 μA) |
Durasi tidur | | 14 mnt |
Konsumsi operasional | <200 μA | 12-18 mA |
Durasi kerja | | sekitar 1 mnt |
Periode Siklus Kerja / Tidur | | 15 mnt |
Waktu operasi | sekitar 2 tahun | sekitar 2,5 bulan |
Konsumsi LaCrosse saat ini sangat banyak menari. Dalam tabel tersebut saya memberikan nilai terukur puncak untuk menunjukkan urutan konsumsi: tidak lebih dari dua ratus mikroamp.
Saya ingin melengkapi tabel dengan hasil perkembangan amatir yang serupa, tetapi saya tidak menemukan apa pun. Mungkin karena sebagian besar amatir menghasilkan informasi dari sensor ke komputer, tablet, ponsel cerdas atau dalam perjalanan ke salah satu layanan di jaringan di mana masalah menghemat masa pakai baterai sama sekali tidak ada.
Kontributor utama untuk analyzer sleep (350 μA) adalah LCD. Jika Anda mematikannya, maka konsumsinya akan turun menjadi 10 μA. Konsumsi puncak 18 mA terjadi ketika penerima LoRa menerima sinyal dari pemancar, tetapi sinyal membutuhkan beberapa mikrodetik. Waktu ini sangat singkat dibandingkan dengan menit penerima dalam mode mendengarkan dan konsumsi 10 mA, jadi saya tidak memperhitungkan puncak jangka pendek ini ketika menghitung waktu pengoperasian pada satu set baterai.
Perhitungan jam kerja.
Konsumsi rata-rata saat ini: 10 mA / 15 + 0,35 mA = 1,0 mA, di mana 15 adalah siklus kerja. Waktu pengoperasian: 1800 mA * jam / 1,0 mA = 1800 jam (2,5 bulan).
Saya akan mengklarifikasi:
- Perhitungannya sangat perkiraan.
- Jam operasional LaCrosse didasarkan pada pengalaman saya sendiri. Saya sudah lama menggunakan perangkat ini.
Termometer
Kapasitas dan tegangan baterai dalam cuaca dingin sangat berkurang . Oleh karena itu, agar tidak mengekspos baterai dan perangkat secara keseluruhan pada pengujian sekuat itu, saya hanya mengeluarkan sensor suhu DS18B20 di luar ruangan, dan unit serta baterai ada di dalam ruangan. DS18B20 terhubung ke papan host dengan kabel tiga kawat tipis. Saya melihat solusi ini di stasiun cuaca serial saya - pengembang yakin bahwa akan selalu ada celah di apartemen untuk meletakkan kabel dengan diameter beberapa milimeter.
Sekering untuk termometer ATMEGA328P sama dengan untuk alat analisa.
Perakitan termometer juga dibangun di atas pengontrol ATMEGA328P. Ini menerima sinyal dari sensor DS18B20, mengukur tegangan suplai dan mengontrol pemancar LoRa.
Sketsa termometer berada di bawah spoiler.
sketsa termometer #include <OneWire.h> OneWire ds(7); //pin 13, Atmega328P #include <SPI.h> #include <LoRa.h> #include <LowPower.h> #define PowerDS18B20 (6) //pin 12 (Atmega328P), e DS18B20 unsigned int sleepCounter; // , float Tout; // int i; // (20 1 ) String messageTout; // LoRa- float batteryLevel; // const int batteryPin = A0; // pin 23 (Atmega328P), void Measurement () { // byte data[2]; digitalWrite(PowerDS18B20, 1); ds.reset(); ds.write(0xCC); // (1 ) ds.write(0x44); // delay(700); ds.reset(); ds.write(0xCC); ds.write(0xBE); // data[0] = ds.read(); data[1] = ds.read(); Tout = ((data[1] << 8) | data[0]) * 0.0625; // Serial.println("Tout= "+ String(Tout)); digitalWrite(PowerDS18B20, 0); // : analogReference(INTERNAL); int sensorValue = analogRead(A0); batteryLevel = (sensorValue * 3.2 / 1024); // Serial.println("BAT= "+ String(batteryLevel)); } void SetSynchLoRa () { int counter = 0; while (!LoRa.begin(433E6) && counter < 10) { // Serial.print("."); counter++; delay(500); } LoRa.setTxPower(4); // 2-20 /* if (counter == 10) { // Serial.println("Failed to initialize ..."); }*/ LoRa.setSyncWord(0xF3); } void SendMessage () { // (, ) messageTout = String(Tout) + "#" + String(batteryLevel); // Serial.println(messageTout); delay(250); LoRa.beginPacket(); LoRa.print(messageTout); LoRa.endPacket(); } void setup() { //Serial.begin(9600); // Serial.println("Initializing ..."); pinMode(PowerDS18B20, OUTPUT); SetSynchLoRa (); } void loop() { //Serial.println(""); //Serial.println("i = " + String(i)); if (i >= 30) { // i >= 30 (1 ) — (, — 1 /1 ) for (sleepCounter = 5; sleepCounter > 0; sleepCounter--) { LoRa.sleep (); LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); } Measurement (); SendMessage (); LoRa.sleep (); } else { // 1 , — 1 /2 Measurement (); SendMessage (); delay (1000); } i++; if (i >= 30) i = 30; // }
Sepasang pemancar-penerima LoRa menyediakan komunikasi yang stabil pada jarak 1,5 km dengan visibilitas langsung dan hingga 300 m di daerah perkotaan, tentu saja, maksimum atau mendekati daya pemancar maksimum: 17-20 dB. Untuk koneksi yang stabil di dalam apartemen, 4 dB sudah cukup.
Pada awalnya, ketika daya terhubung, termometer beroperasi dalam mode intensif selama satu menit. Ini mengukur suhu, tegangan baterai dan mengirimkan nilainya di udara setiap 2 detik. Ini untuk kenyamanan. Misalkan Anda tidak perlu menunggu sebentar saat mengganti baterai atau debugging. Informasi dari sensor akan muncul pada layar penganalisa pada detik pertama setelah menghubungkan baterai termometer dan penganalisis. Secara alami, Anda harus bergegas dan tidak membuat jarak waktu selama lebih dari satu menit antara menghubungkan baterai pada kedua node.
Kemudian sensor jarak jauh masuk ke mode normal. Setelah mengukur dan mengirim informasi yang berlangsung sedikit lebih dari detik pertama, pengontrol dan pemancar dimasukkan ke mode tidur perangkat lunak selama sekitar 1 menit.
Perhitungan jam kerja.
Konsumsi rata-rata saat ini: 14 mA / 60 + 0,005 mA = 0,24 mA, di mana 60 adalah siklus kerja. Waktu pengoperasian: 1800 mA * jam / 0,24 mA = 7500 jam (10 bulan).
Klarifikasi sebelumnya mengenai akurasi waktu operasi yang dihitung dari satu set baterai tetap valid.
Dan tabel perbandingan. Ini berisi hasil dari beberapa proyek serupa dari Internet.
Parameter | LaCrosse WS-9024IT | maniak | avs24rus | SadilTM |
Nutrisi | 2xAAA, 3B, Durasell | 3V, CR2450 Renata, 540 mAh | 3V, CR2450, 550-610 mAh | 2xAA, 3V, GP Ultra +, 1800 mAh |
Konsumsi tidur | | 0,14 mA (?) | 14 μA | 5 μA |
Durasi tidur | | | | 1 mnt |
Konsumsi operasional | <700 μA | 13,57 mA | 16 - 18 mA | 14 mA |
Durasi kerja | | 0,027 dtk | | 1 detik |
Periode Siklus Kerja / Tidur | | 1 mnt | 10 mnt | 1 mnt |
Waktu operasi | sekitar 2 tahun | | lebih dari 0,5 tahun | sekitar 10 bulan |
Jika node dirakit tanpa kesalahan, maka pada layar kita akan melihat gambar berikut:

Dari tabel perbandingan dapat dilihat bahwa konsumsi puncak perangkat amatir adalah urutan besarnya lebih tinggi daripada dalam fungsi analog dari industri LaCrosse. Misalnya, 14 mA berbanding 700 μA untuk sensor jarak jauh dan 10 ... 18 mA berbanding 200 μA untuk alat analisis. Perbedaan mencolok dalam konsumsi maksimum dijelaskan, menurut pendapat saya, oleh fakta bahwa pengendali di sirkuit amatir diprogram menggunakan platform Arduino IDE, fungsi berat dan perpustakaan, dan dalam produk industri - kemungkinan besar dalam salah satu bahasa tingkat rendah atau, misalnya, di C ++ (omong-omong, bahasa dasar Arduino) atau C (C). Jika Anda menggunakan bahasa ini, maka saya yakin Anda dapat mencapai konsumsi yang sebanding dengan desain industri. Namun, ini secara eksperimental sangat meyakinkan ditunjukkan oleh HWman dalam publikasi “ Mengapa Banyak Orang Tidak Suka Arduino ”. Melakukan sketsa paling sederhana hingga selusin baris (Blink), dilakukan di Arduino IDE dalam satu kasus dan dalam kasus lain - “simple C”, seperti yang dikatakan penulis dalam video, menyebabkan hilangnya kinerja 26 kali. Singkatnya, peningkatan konsumsi sumber daya adalah biaya untuk kenyamanan dan usaha kecil dari pihak programmer - sisanya akan dilakukan oleh fungsi "rakus" dari lingkungan pengembangan untuknya di Arduino. Saya mengantisipasi bahwa Anda harus berusaha keras dan menguasai setidaknya dasar-dasar C / C ++, yang fungsinya dikompilasi oleh Arduino IDE.
Kesimpulan
• Penganalisis dan termometer rakitan memiliki konsumsi arus terlalu banyak dibandingkan dengan desain industri.
• Yang ketiga menyarankan dirinya untuk dua baterai di sirkuit, maka masalah berikut ini secara otomatis diselesaikan: tidak perlu menginstal ulang sekering, controller beroperasi pada frekuensi 16 MHz, sensor DHT22, DS18B20 jauh dari ambang batas bawah tegangan suplai mereka. Yang terakhir ini penting, karena tegangan suplai tidak langsung disuplai ke sensor, tetapi secara terprogram melalui kunci dari pin pengontrol, yang turun sekitar 1V.
• Penggunaan modul radio LoRa, dengan daya pemancar yang dapat diprogram sebesar 4 dB, memungkinkan untuk membuat koneksi yang stabil di dalam apartemen dengan catu daya modul dari dua baterai AA.
Tautan Terkait
Unit Sensor Nirkabel Nirkabel Energi Rendah
Sensor Penerangan Nirkabel CR2450
Suhu nirkabel, kelembaban dan sensor tekanan atmosfer pada nRF52832
Termometer Nirkabel
Ubah Arduino menjadi pemrogram AVRISP yang lengkap
Lora dan tidur
Pelajari tentang bit konfigurasi ATmega328P dan cara menggunakannya dengan kristal kuarsa eksternal
Kalkulator Fusion AVR
Mengapa banyak orang tidak suka Arduino
Uji baterai hebat
Baterai dalam dingin