fbpx

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 beliau 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 dapat digunakan untuk mengirimkan data sensor dari lokasi mana pun ke cloud, dan berpotensi mengendalikan perangkat yang terhubung seperti termostat , lampu, kunci pintu, dan produk otomasi rumah lainnya.

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

project-iot-arduino IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino
Perangkat Arduino

Siguino didasarkan pada versi daya rendah dari  Arduino Pro Mini yang memiliki sensor dan antena onboard, dan hanya menggunakan 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 tempat bekas pemotongan roti (tetapi berfungsi) ke papan sirkuit cetak (PCB) final yang dirancang khusus yang diharapkan dapat digunakan orang lain.

Project IOT Arduino

prototipe-1 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 berdasarkan Arduino (misalnya, Arduino Pro Mini, yang menggunakan chip ATmega328P )
  • Sertakan chip Sigfox sehingga dapat mengirim pesan melalui jaringan Sigfox. Kami memilih  chip WiSOL  SFMR10 karena dua alasan:
    • Ini adalah chip send-only dari transceiver, dan kami tidak punya rencana untuk komunikasi dua arah
    • Ada DevKit  tersedia untuk itu (sangat berguna untuk papan tempat 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, seperti jika 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 memutuskan accelerometer (Adafruit  LIS3DH ) adalah pilihan terbaik bagi maker, karena membuka kemungkinan papan asli. (Perhatikan bahwa papan breakout untuk komponen ini bukan daya rendah , meskipun chip mentahnya.) 
proto-2 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Hasilnya adalah serangkaian komponen yang agak berantakan (tapi fungsional!):

proto-3 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

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

2. Tulis kode IOT Arduino

Langkah selanjutnya adalah menulis kode dasar untuk membuat perangkat papan sirkuit untuk melakukan apa yang kami inginkan. Beberapa di antaranya standar dan termasuk dalam contoh kode yang ada untuk setiap komponen. Misalnya, kode untuk mengukur suhu menggunakan DS18B20 terlihat seperti 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 memilih perpustakaan Rocket Scream , tersedia di GitHub . Home Automation Community  dan  Andreas Rohner memberikan informasi yang baik tentang 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 dapat dikomunikasikan dengan menggunakan perintah AT standar (dan contoh 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 mudah untuk mengirim perintah, misalnya 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 menyelesaikan 
  
  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 tanggapan 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 memilih mode tidur dasar, meskipun chip ini juga mendukung opsi “deep sleep”. Tampaknya tidak layak untuk beralih dari ~ 1.5μA ke <1μA, karena aliran arus diam 1.5μA lebih dari cukup untuk tujuan kami. Kode siklus sleep / wake terlihat seperti 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 memutuskan 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 ++ menggunakan 4 byte memori, tetapi Anda tidak ingin menggunakan hingga 4 byte dari pesan 12-byte Anda mengirim nomor jika tidak diperlukan. Secara umum, Anda hanya perlu mengetahui nilai suhu hingga setengah derajat keakuratan, yang memungkinkan Anda mengompres seluruh rentang suhu yang mungkin menjadi 8 bit (1 byte) karena, dengan membatasi rentang -40 hingga +80 hingga setengah kenaikan -degree, Anda hanya memiliki 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 hingga +50 C dengan akurasi setengah derajat, yang membutuhkan 7 bit untuk suhu, ditambah 5 bit untuk tingkat cahaya (dari 0 hingga 1.000), 1 bit untuk membuka / menutup atau perangkat bergerak, dan 4 bit untuk nomor urutan pesan sehingga kami dapat menemukan pesan yang tidak terjawab. Jadi, sensor dasar kami hanya perlu menggunakan 18 bit dari 12 byte ruang pesan yang tersedia, dikemas seperti ini:

image 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 memilih versi stripboarddari sirkuit ini. Hasil akhirnya harus menjadi versi sirkuit yang lebih rapi dan lebih ketat, yang sangat berguna dalam membantu memangkas desain PCB akhir. (Hal ini penting karena, sebagai patokan, semakin besar PCB, semakin tinggi biayanya.) Ini juga memberikan ide bagus tentang perumahan seperti apa yang mungkin diperlukan untuk produk akhir.

Baca Juga:  Big Data : Cara Kerja dan Masa Depan Bisnis

Kami juga menggunakan Fritzing , perangkat lunak yang bagus untuk meletakkan stripboard atau sirkuit Veroboard . Hal ini memungkinkan Anda untuk mendesain rangkaian virtual yang dapat Anda duplikasi di stripboard Anda. Sirkuit prototipe kami terlihat seperti ini di Fritzing:

image-1 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Yang menyebabkan rangkaian aktual ini (berfungsi):

image-2 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 dapat digunakan untuk papan kecil (<80cm) dan memiliki banyak pustaka komponen (termasuk pustaka pihak ketiga yang baik, misalnya, semua komponen SparkFun dan AdaFruit).

Kami belajar semua yang perlu kami ketahui tentang Eagle dari tutorial SparkFun ini:

Beberapa tips yang kami sarankan dari pengalaman:

  • Selalu lakukan pemeriksaan aturan desain (dan periksa kembali) setelah setiap perubahan, tidak peduli seberapa kecil. Periksa kembali setelah tuangkan tanah, bahkan jika perubahan seharusnya tidak mempengaruhi tuangkan tanah. (Tuang tanah tembaga dibuat dengan mengisi area terbuka yang tidak digunakan dengan tembaga, umumnya di lapisan luar papan, kemudian menghubungkan isian tembaga dengan jahitan vias ke tanah. Tanah yang dituang berguna pada papan dua lapis yang kekurangan bidang referensi padat; mengurangi crosstalk karena kopling kapasitif.)
  • Saat merutekan dengan komponen yang sangat kecil (mis. Komponen pemasangan permukaan FPGA ), cobalah untuk tidak memiliki lubang di bawah komponen untuk menghindari masalah 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 dapat melihat). Ini juga mudah untuk dilupakan ketika merutekan seberapa kecil beberapa komponen ini.

Dengan kata lain, jangan lakukan ini:

image-3 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Alih-alih lakukan ini:

image-4 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino
  • Dengan komponen yang lebih besar, cobalah untuk tidak memiliki lubang perutean terlalu dekat dengan kaki atau bantalan komponen untuk alasan yang sama seperti di atas.

Tata letak papan kami yang sepenuhnya dialihkan tampak seperti ini:

image-5 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 adalah bagaimana membangun prototipe yang mencakup komponen yang dipasang di permukaan (SMC). Jauh lebih mudah untuk menggunakan komponen berlapis melalui lubang (PTH) untuk prototyping (misalnya, papan tempat memotong roti), tetapi Anda tidak akan memilih komponen PTH untuk produk akhir, karena SMC lebih kecil dan lebih rapi.

Baca Juga:  5 Cara Menjaga Keamanan Perangkat Internet of Things dari Peretas

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 memiliki mesin surface mount (seperti mesin pick & place atau oven reflow solder)? Anda bisa membuat oven reflow sendiri , tetapi jika Anda membangun sirkuit sendiri, kami pikir jenis penyimpangan dari fokus itu sedikit memakan waktu. Dan, ini sebagian besar tidak perlu, karena Anda dapat menyolder hampir semua SMC dengan latihan yang cukup, dan Anda dapat menggunakan pistol udara solder yang relatif murah untuk mempermudah pekerjaan.

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

image-6 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Zerodamage , via Wikimedia Commons, CC BY 3.0

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

Alat-alat yang dibutuhkan meliputi:

  • Timah solder:  Sudah pasti layak untuk membayar sedikit lebih banyak untuk Timah solder berkualitas baik. Kami mulai dengan yang murah, dan beberapa minggu 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 digunakan daripada yang kami harapkan (mendapatkan tekanan udara yang tepat sehingga Anda tidak meniup komponen kecil dari papan adalah bentuk seni!), itu telah membuat menyolder beberapa sirkuit terintegrasi paket yang lebih kecil (VFLGA) , seperti LIS3DH, jauh lebih mudah. (Kami bahkan tidak yakin bagaimana kami akan melakukan ini dengan setrika solder sendirian, meskipun tampaknya itu mungkin.) Ini juga membuatnya mudah untuk menghapus komponen ketika Anda mengacaukan sesuatu.
  • Pinset: Satu set pinset berkualitas tinggi yang sangat bagus sangat penting untuk mengambil komponen yang sangat kecil.
  • Kaca pembesar / pembesar mata: Untuk memperbesar pada solder untuk memeriksa solder yang buruk, jembatan solder, gumpalan, pin yang terlewat, dll., Kami menemukan kaca pembesar perhiasan, lebih disukai dengan lampu yang terpasang di dalam, sangat berguna.

6. Mengukur konsumsi daya

Pengukuran konsumsi daya adalah bagian yang sangat sulit, tetapi sangat penting, dari proses tersebut. Kami ingin perangkat kami menjadi daya sangat rendah sehingga dapat bekerja selama satu tahun dengan baterai kecil (yaitu, 900mAh CR2). Ini berarti memastikan bahwa arus diam (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 saat ini, sebagian besar memiliki resolusi yang buruk untuk ujung yang sangat rendah. Mekanisme manual, seperti ammeter yang terhubung melintasi jalur catu daya, tidak praktis untuk digunakan dan juga hanya memberikan gambaran tentang seberapa banyak arus yang digunakan pada waktu tertentu (dan dalam beberapa kasus tidak bereaksi cukup cepat untuk setiap pengukuran yang andal).

Dari berbagai opsi yang kami coba, satu-satunya yang bekerja pada akhirnya 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 adalah bahwa kami tidak bisa membuatnya bekerja dengan andal di Linux, meskipun itu adalah program Python, jadi kami harus boot ke Windows untuk menggunakannya.)

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

image-7 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 datang 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 tugas 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 bagian lain dalam rentang ATmega):

Pengaturan sekering:

Sekering adalah bit non-volatile yang mendefinisikan sejumlah aspek yang dapat diprogram sesuai dengan perilaku 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 eksekusi kode pada voltase yang ditetapkan untuk menghindari operasi yang tidak dapat diandalkan saat daya terlalu rendah.

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

Bootloader:

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

Untuk proyek ini, kami menggunakan UNO Arduino terpisah untuk melakukan 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 target sebagai berikut:
Baca Juga:  4 Produk Smart Home Terbaik Untuk Menjaga Rumah Anda Tetap Aman
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 menunjukkan hasil di jendela monitor serial; ikuti instruksi di jendela serial (mis., “L” untuk Load Bootloader)
  3. Perhatikan bahwa bootloader akan mengatur chip untuk menggunakan clock 8MHz internal; ini dapat dimodifikasi jika Anda memiliki kristal eksternal (lihat catatan dalam sketsa)

Pemuatan kode program IOT Arduino:

Setelah chip menginstal bootloader, kode program dapat dimuat melalui antarmuka FTDI. Arduino IDE yang berjalan pada PC pengembang dapat memuat kode aplikasi langsung 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 berbagai sumber daya:

  • Komponen perangkat keras: Untuk memotong papan sirkuit Anda, Anda akan memerlukan komponen seperti berbagai resistor, kapasitor, sensor, sirkuit terpadu, dll. Anda dapat menemukan beberapa di antaranya di situs utama seperti 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 memiliki beberapa saran di bawah “Memilih Produsen PCB” yang mungkin layak untuk dilihat. Kami menggunakan  Multi-CB  dan menemukan mereka sangat bagus, tepat waktu, dan harga bersaing, walaupun kami harus membayar melalui transfer bank karena mereka tidak menawarkan opsi pembayaran online.
  • Pembuatan PCB:  Setelah PCB Anda sepenuhnya dirancang, komponen Anda dibeli dan disolder tangan, dan prototipe terakhir Anda diuji, sekarang saatnya untuk membuatnya diproduksi dalam jumlah besar. Kami menerima penawaran yang sangat masuk akal dari PCBCart , termasuk perakitan dan pemrograman chip ATmega. Karena Kami belum membuat papan, kami tidak bisa 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) … sekarang apa !? Bagaimana Anda akan memproses pesan-pesan itu dan apa yang akan Anda lakukan dengannya?

image-8 IOT Arduino: Membangun Project Hardware Khusus IOT dengan Arduino

Callback Sigfox

Hal pertama yang harus dilakukan adalah membuat server Sigfox meneruskan pesan yang diterima oleh perangkat Anda ke server web atau layanan yang Anda kontrol. Ada banyak opsi dengan sistem Sigfox tentang cara melakukan ini, tetapi saya pikir yang paling mudah adalah dengan membangun layanan web RESTful Anda sendiri (dijelaskan di bawah), dan minta server Sigfox membuat permintaan HTTP (S) ke layanan baru Anda dengan data pesan. Ini dapat dilakukan dalam backend Sigfox dengan menggunakan mekanisme panggilan balik untuk perangkat Anda, di mana Anda dapat menentukan variabel yang diposting atau parameter URL, seperti yang diperlukan dari daftar variabel yang tersedia termasuk data pesan mentah:

RESTFul layanan web Project IOT Arduino

Layanan web yang tenang adalah API modern dan ada di mana-mana di web. Ada banyak cara untuk membuatnya, tetapi saya memutuskan untuk menggunakan bahasa pemrograman Go, pertama, karena itu adalah bahasa yang ingin saya pelajari, dan kedua, karena mudah digunakan melalui Docker. Struktur dasar layanan web (menyimpan ke database MongoDB) di Go terlihat seperti 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 bangun untuk pemrosesan dasar data mentah dari server Sigfox akan memiliki struktur yang sama.

Sesuatu yang kami temukan sangat berguna untuk parsing pesan Sigfox agak membongkar (karena kami menggunakan 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 seperti 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 adalah melalui If This Then That (IFTTT) , yang merupakan penggabungan berbagai API dan sistem yang berbeda. Setelah Anda menghubungkan perangkat Anda ke IFTTT , Anda dapat mengakses tindakan tindak lanjut yang ada. Misalnya, “Jika [perangkat Anda mengirim X] maka [kirim email ke Y], atau [buat Alexa mengatakan Y], atau [nyalakan Philips Hue menyala di ruang Y],” atau segudang opsi lainnya.

Penutup

Langkah saya berikutnya untuk proyek Siguino adalah mengembangkan perumahan 3D untuknya, melalui program 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 adalah mempelajari teknologi IOT Arduino, kami membuat semua kode perangkat lunak dan perangkat keras sumber terbuka di  GitHub . Jika Anda memiliki pertanyaan atau menemukan informasi yang bernilai ini, beri tahu kami di komentar.

Sumber: Opensource, GitHub, Scott Tattersall