Senin, 24 Desember 2018

Iot Arduino: Membangun Project Hardware Khusus Iot Dengan Arduino


IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknologi mungil ini. Salah satunya dari Scott Tattersall yang berkecimpung di dunia teknologi ini dan pengalaman dia di rilis di opensource.





Baru-baru ini kami ingin merancang perangkat Internet of Things (IoT) berdaya rendah IoT Arduino untuk para developer, dengan sensor bawaan yang sanggup dipakai untuk mengirimkan data sensor dari lokasi mana pun ke cloud, dan berpotensi mengendalikan perangkat yang terhubung menyerupai termostat , lampu, kunci pintu, dan produk otomasi rumah lainnya.





Sepanjang jalan, kami mencar ilmu bahwa membuat perangkat IoT Arduino baru, dari inspirasi ke prototipe ke produk akhir, tidak sesederhana yang dikira, dan tidak ada perangkat pengembangan “instan” untuk memulai. Namun, dengan mencari tahu bagaimana melakukannya, kami membuat produk gres bernama  Siguino , papan sirkuit IoT Arduino open source , yang kami harap akan membuat lebih gampang dan lebih cepat bagi orang lain untuk membuat produk IoT Arduino mereka sendiri.





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino
Perangkat Arduino




Siguino didasarkan pada versi daya rendah dari  Arduino Pro Mini yang mempunyai sensor dan antena onboard, dan hanya memakai satu baterai. Ini juga memanfaatkan Sigfox , jaringan area daya rendah yang dirancang untuk menghubungkan perangkat IoT Arduino ke cloud.





Artikel ini menjelaskan tahapan untuk mendapatkan dari prototipe papan daerah bekas pemotongan roti (tetapi berfungsi) ke papan sirkuit cetak (PCB) final yang dirancang khusus yang diharapkan sanggup dipakai orang lain.






Project IOT Arduino





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino
Prototipe 1 dibandingkan dengan prototipe akhir




1. Breadboarding





Seperti semua proyek maker baik dimulai, kami mulai dengan  breadboarding keluar sirkuit konseptual. Ini melibatkan pengidentifikasian fungsi yang Anda inginkan dari perangkat Anda dan komponen apa yang akan Anda gunakan. Kami ingin perangkat kami:





  • Menjadi daya rendah dan menurut Arduino (misalnya, Arduino Pro Mini, yang menggunakan chip ATmega328P )
  • Sertakan chip Sigfox sehingga sanggup mengirim pesan melalui jaringan Sigfox. Kami memilih  chip WiSOL  SFMR10 karena dua alasan:
    • Ini yaitu chip send-only dari transceiver, dan kami tidak punya rencana untuk komunikasi dua arah
    • Ada DevKit  tersedia untuk itu (sangat mempunyai kegunaan untuk papan daerah memotong roti dan prototipe)
  • Memiliki empat sensor dasar:
    • Temperatur (SparkFun  DS18B20 ) untuk termostat yang terhubung
    • Level cahaya (fotosel standar) untuk lampu yang terhubung
    • Deteksi magnetik “efek hall” untuk membuka / menutup pintu, menyerupai kalau gerbang telah dibuka atau dibiarkan terbuka (DigiKey  AH9246-W-7 ) 
    • Deteksi gerakan untuk peralatan keamanan, deteksi jatuh, deteksi gerakan perimeter, dan banyak lagi. Kami bereksperimen dengan trip switch, switch merkuri, dan banyak lagi, tetapi menetapkan accelerometer (Adafruit  LIS3DH ) yaitu pilihan terbaik bagi maker, sebab membuka kemungkinan papan asli. (Perhatikan bahwa papan breakout untuk komponen ini bukan daya rendah , meskipun chip mentahnya.) 




IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Hasilnya yaitu serangkaian komponen yang agak acak-acakan (tapi fungsional!):





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Setelah semuanya bekerja, kami menghabiskan sedikit waktu menyusun versi yang lebih rapi memakai kabel papan jumper:





2. Tulis kode IOT Arduino





Langkah selanjutnya yaitu menulis kode dasar untuk membuat perangkat papan sirkuit untuk melaksanakan apa yang kami inginkan. Beberapa di antaranya standar dan termasuk dalam teladan kode yang ada untuk setiap komponen. Misalnya, kode untuk mengukur suhu menggunakan DS18B20 terlihat menyerupai ini:





#include <DallasTemperature.h>
#include <OneWire.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature temp_sensor(&oneWire);

void setup(){
Serial.begin(9600);
temp_sensor.begin();

Serial.println("DS18B20 Temperature Test\n\n");

delay(300);//Let system settle

}//end "setup()"

void loop(){

Serial.print("Requesting temperatures...");
temp_sensor.requestTemperatures(); // Send the command to get temperatures

Serial.print("Temperature is: ");
float temp_reading = temp_sensor.getTempCByIndex(0);
Serial.println(temp_reading);

delay(1000);
}// end loop()




Ada sejumlah perpustakaan pihak ketiga yang menyediakan pilihan untuk penggunaan daya rendah dari Arduino Pro Mini. Kami menentukan perpustakaan Rocket Scream , tersedia di GitHub . Home Automation Community  dan  Andreas Rohner menyampaikan informasi yang baik wacana memodifikasi Arduino Pro Mini untuk konsumsi daya rendah. Penggunaan sampel untuk proyek ini adalah:





// **** INCLUDES *****

#include "LowPower.h"

void setup()

{

// No setup is required for this library

}

void loop()

{

// Enter power down state for 8 s with ADC and BOD module disabled

LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

// Do something here

// Example: Read sensor, data logging, data transmission.

}




Chip WiSOL Sigfox sanggup dikomunikasikan dengan memakai perintah AT standar (dan teladan dasar disertakan dengan lembar data produk). Untuk proyek ini, kami hanya membutuhkan dua fungsi:





  • Kirim pesan:  Kami menulis pembungkus untuk perintah AT tingkat rendah untuk membuatnya lebih gampang untuk mengirim perintah, contohnya untuk menguji perangkat, dan pesan:




String send_at_command (perintah String, int wait_time) { 
altSerial.println (command);
delay (wait_time);
return recv_from_sigfox ();
}

membatalkan test_sigfox_chip () {
Serial.println ("Uji Sigfox Comms \ n \ n");
altSerial.begin (9600);
delay (300); // Biarkan sistem menuntaskan

Serial.println ("Periksa awake dengan AT Command ...");
chip_response = send_at_command ("AT", 50);
Serial.println ("Mendapat respons dari modul sigfox:" + chip_response);

Serial.println ("Mengirim tes comms ...");
chip_response = send_at_command ("AT", 50);
Serial.println ("Comms menguji jawaban dari modul sigfox:" + chip_response);


Serial.println ("Dev ID reponse dari modul sigfox:" + chip_response);

chip_response = send_at_command ("AT $ I = 11", 50);
Serial.println ("PAC Code merespons dari modul sigfox:" + chip_response);
}

// pesan kirim
chip_response = send_at_command ("AT $ SF =" + hex_bits, 10000);
Serial.println ("Respons dari modul sigfox:" + chip_response);




  • Masuk ke mode daya rendah (sleep):  Kami menentukan mode tidur dasar, meskipun chip ini juga mendukung opsi “deep sleep”. Tampaknya tidak layak untuk beralih dari 1.5μA ke <1μA, sebab anutan arus membisu 1.5μA lebih dari cukup untuk tujuan kami. Kode siklus sleep / wake terlihat menyerupai ini:




//Sigfox sleep mode enabled via AT$P=1 command
// to wake need to set UART port low (see AX-SIGFOX-MODS-D.PDF for further details)
void set_sigfox_sleep(bool go_sleep){
String chip_response;
if (go_sleep){
//send go sleep AT command
chip_response = send_at_command("AT$P=1", 100);
Serial.println("Set sleep response: " + chip_response);
}else{
//wake up sigfox chip
altSerial.end();
pinMode(TX_PIN, OUTPUT);
digitalWrite(TX_PIN, LOW);
delay(100);
altSerial.begin(9600);
}
}




Packing:





Kami menetapkan untuk menggunakan  sedikit pengepakan  untuk pesan Sigfox; karena pesan Sigfox maksimum 12 byte, ada baiknya untuk memeras data sebanyak mungkin ke masing-masing. Misalnya, asumsikan suhu yang dikembalikan oleh sensor suhu akan mengambang antara -40 dan +80 derajat Celcius. Float di C ++ memakai 4 byte memori, tetapi Anda tidak ingin memakai sampai 4 byte dari pesan 12-byte Anda mengirim nomor kalau tidak diperlukan. Secara umum, Anda hanya perlu mengetahui nilai suhu sampai setengah derajat keakuratan, yang memungkinkan Anda mengompres seluruh rentang suhu yang mungkin menjadi 8 bit (1 byte) karena, dengan membatasi rentang -40 sampai +80 sampai setengah kenaikan -degree, Anda hanya mempunyai 240 nilai yang mungkin, sebagai berikut:





0b00000000 [0] = -40 
0b00000001 [1] = -39,5 0b00000010
[2] = -39
...
0b11101111 [239] = 79,5
0b11110000 [240] = 80




Untuk menghemat lebih banyak ruang, kami membatasi jangkauan kami ke -10 sampai +50 C dengan akurasi setengah derajat, yang membutuhkan 7 bit untuk suhu, ditambah 5 bit untuk tingkat cahaya (dari 0 sampai 1.000), 1 bit untuk membuka / menutup atau perangkat bergerak, dan 4 bit untuk nomor urutan pesan sehingga kami sanggup menemukan pesan yang tidak terjawab. Jadi, sensor dasar kami hanya perlu memakai 18 bit dari 12 byte ruang pesan yang tersedia, dikemas menyerupai ini:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Kami mengadaptasi satu set fungsi pengemasan bit yang akan mengambil semua data sensor, serta jumlah bit yang ingin kami gunakan untuk masing-masing, dan mengemasnya menjadi nilai 12-byte tunggal:





#ifndef BITPACKER_H_INCLUDED
#define BITPACKER_H_INCLUDED

#include <stdint.h>

#define BIT(n) ( 1UL<<(n) ) //UL = unsigned long, forces chip to use 32bit int not 16

#define BIT_SET(y, mask) ( y |= (mask) )
#define BIT_CLEAR(y, mask) ( y &= (mask) )
#define BIT_FLIP(y, mask) ( y ^= (mask) )

/*
Set bits Clear bits Flip bits
y 0x0011 0x0011 0x0011
mask 0x0101 | 0x0101 & 0x0101 ^
--------- ---------- ---------
result 0x0111 0x0010 0x0110
*/

//! Create a bitmask of length \a len.
#define BIT_MASK(len) ( BIT(len)-1 )

//! Create a bitfield mask of length \a starting at bit \a start.
#define BF_MASK(start, len) ( BIT_MASK(len)<<(start) )

//! Prepare a bitmask for insertion or combining.
#define BF_PREP(x, start, len) ( ((x)&BIT_MASK(len)) << (start) )

//! Extract a bitfield of length \a len starting at bit \a start from \a y.
#define BF_GET(y, start, len) ( ((y)>>(start)) & BIT_MASK(len) )

//! Insert a new bitfield value \a x into \a y.
#define BF_SET(y, x, start, len) \
( y= ((y) & BF_MASK(start, len)) | BF_PREP(x, start, len) )

namespace BitPacker {
static uint32_t get_packed_message_32(unsigned int values[], unsigned int bits_used[], int num_vals){
uint32_t retval = 0x0;
int j = 0;
for (int i=0;i<num_vals;i++){
BF_SET(retval, values[i], j, j + bits_used[i]);
j += bits_used[i];
}
return retval;
}

static uint64_t get_packed_message_64(unsigned int values[], unsigned int bits_used[], int num_vals){
uint64_t retval = 0x0;
int j = 0;
for (int i=0;i<num_vals;i++){
BF_SET(retval, values[i], j, j + bits_used[i]);
j += bits_used[i];
}
return retval;
}

}
#endif // BITPACKER_H_INCLUDED




3. Prototipe Sirkuit IOT Arduino





Sebelum merancang sirkuit PCB untuk perangkat Anda, ada baiknya untuk membuat rangkaian prototipe yang lebih kecil dan lebih rapi. Saya menentukan versi stripboarddari sirkuit ini. Hasil alhasil harus menjadi versi sirkuit yang lebih rapi dan lebih ketat, yang sangat mempunyai kegunaan dalam membantu memangkas desain PCB akhir. (Hal ini penting karena, sebagai patokan, semakin besar PCB, semakin tinggi biayanya.) Ini juga menyampaikan inspirasi cantik wacana perumahan menyerupai apa yang mungkin diharapkan untuk produk akhir.





Kami juga memakai Fritzing , perangkat lunak yang cantik untuk meletakkan stripboard atau sirkuit Veroboard . Hal ini memungkinkan Anda untuk mendesain rangkaian virtual yang sanggup Anda duplikasi di stripboard Anda. Sirkuit prototipe kami terlihat menyerupai ini di Fritzing:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Yang mengakibatkan rangkaian kasatmata ini (berfungsi):





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




4. Merancang dan mencetak PCB





Untuk mendesain PCB , kami menggunakan  Autodesk Eagle , perangkat lunak luar biasa yang sanggup dipakai untuk papan kecil (<80cm) dan mempunyai banyak pustaka komponen (termasuk pustaka pihak ketiga yang baik, misalnya, semua komponen SparkFun dan AdaFruit).





Kami mencar ilmu semua yang perlu kami ketahui wacana Eagle dari tutorial SparkFun ini:









Beberapa tips yang kami sarankan dari pengalaman:





  • Selalu lakukan pemeriksaan aturan desain (dan periksa kembali) sesudah setiap perubahan, tidak peduli seberapa kecil. Periksa kembali sesudah tuangkan tanah, bahkan kalau perubahan seharusnya tidak mempengaruhi tuangkan tanah. (Tuang tanah tembaga dibentuk dengan mengisi area terbuka yang tidak dipakai dengan tembaga, umumnya di lapisan luar papan, kemudian menghubungkan isian tembaga dengan jahitan vias ke tanah. Tanah yang dituang mempunyai kegunaan pada papan dua lapis yang kekurangan bidang tumpuan padat; mengurangi crosstalk sebab kopling kapasitif.)
  • Saat merutekan dengan komponen yang sangat kecil (mis. Komponen pemasangan permukaan FPGA ), cobalah untuk tidak mempunyai lubang di bawah komponen untuk menghindari dilema ketika Anda menyolder tangan atau komponen pemasangan permukaan untuk pengujian prototipe tanpa adanya perkakas profesional (misalnya, solder reflow oven, mesin pick & place, dll.). Sangat sulit untuk memastikan solder yang diaplikasikan dengan tangan atau pasta solder tidak berada di bawah komponen dan mengalir ke lubang perutean di bawahnya (di mana Anda tidak sanggup melihat). Ini juga gampang untuk dilupakan ketika merutekan seberapa kecil beberapa komponen ini.




Dengan kata lain, jangan lakukan ini:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Alih-alih lakukan ini:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




  • Dengan komponen yang lebih besar, cobalah untuk tidak mempunyai lubang perutean terlalu akrab dengan kaki atau alas komponen untuk alasan yang sama menyerupai di atas.




Tata letak papan kami yang sepenuhnya dialihkan tampak menyerupai ini:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




5. Komponen yang dipasang di permukaan solder





Yang tidak diketahui bagi kami pada awal proyek ini yaitu bagaimana membangun prototipe yang meliputi komponen yang dipasang di permukaan (SMC). Jauh lebih gampang untuk memakai komponen berlapis melalui lubang (PTH) untuk prototyping (misalnya, papan daerah memotong roti), tetapi Anda tidak akan menentukan komponen PTH untuk produk akhir, sebab SMC lebih kecil dan lebih rapi.





Apa yang terjadi ketika Anda mendesain tata letak PCB Anda dengan komponen SMC ideal Anda, Anda mencetaknya, dan Anda ingin menggabungkan semuanya dan mengujinya, tetapi Anda tidak mempunyai mesin surface mount (seperti mesin pick & place atau panggangan reflow solder)? Anda bisa membuat panggangan reflow sendiri , tetapi kalau Anda membangun sirkuit sendiri, kami pikir jenis penyimpangan dari fokus itu sedikit memakan waktu. Dan, ini sebagian besar tidak perlu, sebab Anda sanggup menyolder hampir semua SMC dengan latihan yang cukup, dan Anda sanggup memakai pistol udara solder yang relatif murah untuk mempermudah pekerjaan.





Kami memakai saluran YouTube EEVBlog untuk mempelajari dasar-dasar penyolderan SMC , dan pada alhasil kami menyerahkan semuanya ke 0402 komponen (sangat kecil Anda akan gagal kalau Anda bernapas terlalu berat!). Untuk konteks, lihat tabel perbandingan ukuran komponen ini:





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Zerodamage , via Wikimedia Commons, CC BY 3.0




Kami tidak akan merekomendasikan memakai komponen 0402 di sirkuit Anda. (Kami tidak punya pilihan, sebab mereka yaitu pecahan dari jaringan frekuensi radio di bawah antena, dan komponen yang lebih besar sanggup menghipnotis kinerja antena.) Faktanya, komponen 0602 juga sangat kecil dan sulit untuk disolder, tetapi dengan sedikit berlatih itu semua sangat sanggup dilakukan. Kami akan merekomendasikan memesan beberapa PCB tambahan dengan batch pertama, murni untuk praktik penyolderan, sebab Anda kemungkinan besar akan mengacaukan upaya pertama Anda.





Alat-alat yang dibutuhkan meliputi:





  • Timah solder:  Sudah niscaya layak untuk membayar sedikit lebih banyak untuk Timah solder berkualitas baik. Kami mulai dengan yang murah, dan beberapa ahad kemudian kami membuangnya untuk yang lebih baik , dan semuanya lebih mudah.
  • Hot soldering gun: Kami juga membeli  hot air gun ; sementara itu terbukti lebih sulit untuk dipakai daripada yang kami harapkan (mendapatkan tekanan udara yang sempurna sehingga Anda tidak meniup komponen kecil dari papan yaitu bentuk seni!), itu telah membuat menyolder beberapa sirkuit terintegrasi paket yang lebih kecil (VFLGA) , menyerupai LIS3DH, jauh lebih mudah. (Kami bahkan tidak yakin bagaimana kami akan melaksanakan ini dengan setrika solder sendirian, meskipun sepertinya itu mungkin.) Ini juga membuatnya gampang untuk menghapus komponen ketika Anda mengacaukan sesuatu.
  • Pinset: Satu set pinset berkualitas tinggi yang sangat cantik sangat penting untuk mengambil komponen yang sangat kecil.
  • Kaca pembesar / pembesar mata: Untuk memperbesar pada solder untuk menyidik solder yang buruk, jembatan solder, gumpalan, pin yang terlewat, dll., Kami menemukan beling pembesar perhiasan, lebih disukai dengan lampu yang terpasang di dalam, sangat berguna.




6. Mengukur konsumsi daya





Pengukuran konsumsi daya yaitu pecahan yang sangat sulit, tetapi sangat penting, dari proses tersebut. Kami ingin perangkat kami menjadi daya sangat rendah sehingga sanggup bekerja selama satu tahun dengan baterai kecil (yaitu, 900mAh CR2). Ini berarti memastikan bahwa arus membisu (undian arus konstan) sekecil mungkin, turun ke kisaran μA rendah, sementara memperhitungkan penarikan arus lebih tinggi sesekali selama pengiriman pesan. Meskipun ada sejumlah metode untuk menilai kebutuhan sirkuit ketika ini, sebagian besar mempunyai resolusi yang jelek untuk ujung yang sangat rendah. Mekanisme manual, menyerupai ammeter yang terhubung melintasi jalur catu daya, tidak mudah untuk dipakai dan juga hanya menyampaikan citra wacana seberapa banyak arus yang dipakai pada waktu tertentu (dan dalam beberapa perkara tidak bereaksi cukup cepat untuk setiap pengukuran yang andal).





Dari banyak sekali opsi yang kami coba, satu-satunya yang bekerja pada alhasil adalah  Power Profiler Kit (PPK) dari Nordic Semiconductor. Itu tidak terlalu mahal (sekitar $ 100 untuk itu dan alas tiang) dan itu bekerja dengan sangat baik. (Satu-satunya keluhan kami yaitu bahwa kami tidak sanggup membuatnya bekerja dengan ahli di Linux, meskipun itu yaitu jadwal Python, jadi kami harus boot ke Windows untuk menggunakannya.)





PPK menghasilkan pandangan konstan konsumsi daya sampai resolusi sangat rendah (<1μA) dan juga rata-rata berjalan untuk jendela waktu (persis menyerupai yang kami butuhkan untuk perhitungan masa pakai baterai ):





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




7. Memprogram bootloader ATmega IOT Arduino





Chip ATmega mentah yang Anda mungkin telah disolder ke PCB Anda mungkin tidak tiba dengan hardcoded dengan pengaturan sekering yang benar (lihat di bawah) atau dengan bootloader yang diprogram, jadi Anda mungkin perlu mengkonfigurasinya untuk operasi papan Anda yang benar. Ini secara mengejutkan membingungkan bagi perancang / pembuat PCB pertama kali!





Ada tiga kiprah utama yang harus ditangani ketika menyiapkan chip ATmega mentah yang diterima dari pemasok chip. (Catatan: Detailnya merujuk ke ATmega328P, tetapi sebagian besar juga berlaku untuk pecahan lain dalam rentang ATmega):





Pengaturan sekering:





Sekering yaitu bit non-volatile yang mendefinisikan sejumlah aspek yang sanggup diprogram sesuai dengan sikap chip. Ada tiga byte sekering, masing-masing dengan 8 bit: byte rendah, byte tinggi, dan byte diperluas. Sebagai contoh, ini mengontrol tipe jam apa yang menggerakkan chip atau pada tegangan apa brown-out-detector (BOD) memicu. BOD menghentikan sanksi kode pada voltase yang ditetapkan untuk menghindari operasi yang tidak sanggup dipercaya ketika daya terlalu rendah.





Nilai default diatur dalam chip yang disediakan pabrik. Ini mungkin sesuai dengan tujuan penggunaan chip. Tetapi kalau tidak, mereka perlu diubah. Ini dilakukan melalui bus SPI memakai antarmuka yang sesuai, contohnya papan Ardiuno Uno. Ada beberapa panduan cantik untuk proses ini di sini dan di sini .





Bootloader:





Kode yang diharapkan untuk menjalankan aplikasi proyek perlu dimuat ke dalam chip. Biasanya perangkat header FTDI dipakai untuk menghubungkan chip melalui USB ke PC pemrograman. Dalam hal ini, chip memerlukan jadwal bootloader yang harus diinstal untuk memfasilitasi operasi ini. Ini, pada dasarnya, yaitu jadwal untuk memuat program, tetapi dimuat melalui bus SPI memakai antarmuka yang sesuai.





Untuk proyek ini, kami memakai UNO Arduino terpisah untuk melaksanakan bootload chip ATmega sebagai berikut:





  1. Untuk bootloader, gunakan  programmer chip ATmega oleh Nick Gammon
  2. Download file ZIP
  3. Ekstrak folder ATmega_Board_Programmer (mis., Ke direktori Arduino IDE Libraries)
  4. Buka sketsa ATmega_Board_Programmer
  5. Hubungkan Arduino Uno standar ke PC Anda
  6. Atur papan ke “Arduino / Genuino Uno” dan atur port yang benar
  7. Unggah sketsa ATmega_board_programmer
  8. Putuskan Uno dari PC dan sambungkan chip sasaran sebagai berikut:




UnoTarget
D10 Reset
D11 MOSI
D12 MISO
D13SCK
Gnd Gnd
+5V Vcc




  1. Sambungkan kembali Uno ke PC -> Setel port -> Jalankan Serial Monitor 115200 baud
  2. Bootloader harus segera dijalankan dan memperlihatkan hasil di jendela monitor serial; ikuti arahan di jendela serial (mis., “L” untuk Load Bootloader)
  3. Perhatikan bahwa bootloader akan mengatur chip untuk memakai clock 8MHz internal; ini sanggup dimodifikasi kalau Anda mempunyai kristal eksternal (lihat catatan dalam sketsa)




Pemuatan kode jadwal IOT Arduino:





Setelah chip menginstal bootloader, kode jadwal sanggup dimuat melalui antarmuka FTDI. Arduino IDE yang berjalan pada PC pengembang sanggup memuat kode aplikasi eksklusif ke chip melalui antarmuka ini.





8. Mencetak PCB, membeli komponen, manufaktur, dan perakitan Hardware IOT Arduino





Untuk beralih dari papan sirkuit ke pembuatan massal, Anda akan membutuhkan banyak sekali sumber daya:





  • Komponen perangkat keras: Untuk memotong papan sirkuit Anda, Anda akan memerlukan komponen menyerupai banyak sekali resistor, kapasitor, sensor, sirkuit terpadu, dll. Anda sanggup menemukan beberapa di antaranya di situs utama menyerupai Amazon, tetapi saya merekomendasikan beberapa situs perangkat keras khusus sebagai pilihan yang lebih baik. Saya terutama menggunakan  DigiKey ; Mouser  dan  Farnell  juga bagus.
  • Pencetakan PCB:  Setelah Anda mendesain PCB Anda dan membuat file Gerber yang menentukan bagaimana itu akan dicetak, Anda akan perlu menemukan perusahaan untuk mencetaknya. SparkFun mempunyai beberapa saran di bawah “Memilih Produsen PCB” yang mungkin layak untuk dilihat. Kami menggunakan  Multi-CB  dan menemukan mereka sangat bagus, sempurna waktu, dan harga bersaing, walaupun kami harus membayar melalui transfer bank sebab mereka tidak menyampaikan opsi pembayaran online.
  • Pembuatan PCB:  Setelah PCB Anda sepenuhnya dirancang, komponen Anda dibeli dan disolder tangan, dan prototipe terakhir Anda diuji, kini saatnya untuk membuatnya diproduksi dalam jumlah besar. Kami mendapatkan penawaran yang sangat masuk logika dari PCBCart , termasuk perakitan dan pemrograman chip ATmega. Karena Kami belum membuat papan, kami tidak sanggup mengomentari kualitas atau layanan mereka.




9. Melakukan pengembangan backend IOT Arduino





Jadi Anda telah membangun perangkat Anda, dan mengirim pesan di jaringan Sigfox (pada dasarnya ke server Sigfox) … kini apa !? Bagaimana Anda akan memproses pesan-pesan itu dan apa yang akan Anda lakukan dengannya?





IOT arduino salah satu project kecil yang mulai banyak dilakukan eksperimen dengan teknolo IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino




Callback Sigfox





Hal pertama yang harus dilakukan yaitu membuat server Sigfox meneruskan pesan yang diterima oleh perangkat Anda ke server web atau layanan yang Anda kontrol. Ada banyak opsi dengan sistem Sigfox wacana cara melaksanakan ini, tetapi saya pikir yang paling gampang yaitu dengan membangun layanan web RESTful Anda sendiri (dijelaskan di bawah), dan minta server Sigfox membuat usul HTTP (S) ke layanan gres Anda dengan data pesan. Ini sanggup dilakukan dalam backend Sigfox dengan memakai prosedur panggilan balik untuk perangkat Anda, di mana Anda sanggup menentukan variabel yang diposting atau parameter URL, menyerupai yang diharapkan dari daftar variabel yang tersedia termasuk data pesan mentah:





RESTFul layanan web Project IOT Arduino





Layanan web yang damai yaitu API modern dan ada di mana-mana di web. Ada banyak cara untuk membuatnya, tetapi saya menetapkan untuk memakai bahasa pemrograman Go, pertama, sebab itu yaitu bahasa yang ingin saya pelajari, dan kedua, sebab gampang dipakai melalui Docker. Struktur dasar layanan web (menyimpan ke database MongoDB) di Go terlihat menyerupai ini:





// Handler for HTTP Post - "/sensordata"
// Register new sensor data
func NewSensorData(w http.ResponseWriter, r *http.Request) {
var dataResource SensorDataResource
// Decode the incoming Task json
err := json.NewDecoder(r.Body).Decode(&dataResource)
if err != nil {
common.DisplayAppError(
w,
err,
"Invalid Sensor Data format",
500,
)
return
}
sensorData := &dataResource.Data
context := NewContext()
defer context.Close()
c := context.DbCollection("SensorData")
repo := &db.SensorDataRepository{c}
// Insert a sensor data document
repo.Create(sensorData)
if j, err := json.Marshal(SensorDataResource{Data: *sensorData}); err != nil {
common.DisplayAppError(
w,
err,
"An unexpected error has occurred",
500,
)
return
} else {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
w.Write(j)
}
}




Sebagian besar layanan web sederhana yang Anda berdiri untuk pemrosesan dasar data mentah dari server Sigfox akan mempunyai struktur yang sama.





Sesuatu yang kami temukan sangat mempunyai kegunaan untuk parsing pesan Sigfox agak membongkar (karena kami memakai sedikit pengepakan sebelumnya dengan kode IOT Arduino kami untuk memeras data sebanyak mungkin ke dalam pesan Sigfox kami). Kode Go yang sesuai untuk membongkar data terlihat menyerupai ini:





func bit(n uint64) uint64 {
return 1<<n
}

func bit_set(y uint64, mask uint64) uint64 {
return y | mask
}

func bit_clear(y uint64, mask uint64) uint64 {
return y & ^mask
}

func bit_flip(y uint64, mask uint64) uint64 {
return y ^ mask
}

func bit_mask(len uint64) uint64 {
return bit(len) - 1
}

func Bf_mask(start uint64, len uint64) uint64 {
return bit_mask(len) << start
}

func Bf_prep(x uint64, start uint64, len uint64) uint64 {
return (x & bit_mask(len)) << start
}

func Bf_get(y uint64, start uint64, len uint64) uint64 {
return (y>>start) & bit_mask(len)
}

func Bf_set(y uint64, x uint64, start uint64, len uint64) uint64 {
return (y & ^Bf_mask(start, len)) | Bf_prep(x, start, len)
}




Integrasi IFTTT IOT Arduino





Akhirnya, dalam hal membuat perangkat Anda mencapai sesuatu di luar pencatatan data, mungkin cara termudah untuk mengintegrasikannya dengan perangkat atau ekosistem lain yaitu melalui If This Then That (IFTTT) , yang merupakan penggabungan banyak sekali API dan sistem yang berbeda. Setelah Anda menghubungkan perangkat Anda ke IFTTT , Anda sanggup mengakses tindakan tindak lanjut yang ada. Misalnya, “Jika [perangkat Anda mengirim X] maka [kirim email ke Y], atau [buat Alexa menyampaikan Y], atau [nyalakan Philips Hue menyala di ruang Y],” atau segudang opsi lainnya.





Penutup





Langkah saya berikutnya untuk proyek Siguino yaitu membuatkan perumahan 3D untuknya, melalui jadwal sertifikasi perangkat Sigfox, mengutak-atik antena untuk mendapatkan hasil maksimal dari itu, dan mendanai dan mengatur proses produksi pertama perangkat.





Karena tujuan utama kami untuk proyek ini yaitu mempelajari teknologi IOT Arduino, kami membuat semua kode perangkat lunak dan perangkat keras sumber terbuka di  GitHub . Jika Anda mempunyai pertanyaan atau menemukan informasi yang bernilai ini, beri tahu kami di komentar.





Sumber: Opensource, GitHub, Scott Tattersall




style="display:block"
data-ad-client="ca-pub-7299050187086935"
data-ad-slot="9246286780"
data-ad-format="auto"
data-full-width-responsive="true">


Sumber https://www.teknoiot.com


EmoticonEmoticon