Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Model Rail Digital DCC Command Station Arduino dan Aplikasi Gratis

Komponen dan persediaan

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
LMD18200t
× 1
PCB
× 1
Regulator Linier (7805)
× 1
Dioda Zener 3,6V 0,5W
× 1
Kapasitor 220 F
16 volt
× 1
Kapasitor 10 F
16 volt
× 1
Kapasitor Cakram Keramik, 0,1 F
× 3
Resistor 10k ohm
× 2
Melalui Resistor Lubang, 4,7 kohm
× 1
terminal sekrup 2 posisi tengah 3,5 mm, diameter pin 1,1 mm
× 1
terminal sekrup 6 posisi tengah 2,54 mm
× 1
soket 4 pin 2,54 mm
× 1
soket 12 pin 2,54 mm
× 2

Aplikasi dan layanan online

LocoMotive
Ini adalah versi gratis Aplikasi
LocoMotive DCC
Ini adalah versi terbaru termasuk membaca / menulis cv 1 hingga 255

Tentang proyek ini

Apa yang berbeda dari sistem ini ?
Sirkuit elektronik yang sangat sederhana menyediakan sinyal DCC dan daya untuk trek, namun Aplikasi melakukan pekerjaan yang sebenarnya! Komputer di ponsel Anda digunakan sepenuhnya dengan menyusun kode yang diperlukan untuk membentuk setiap paket instruksi, sehingga menyederhanakan tugas pengontrol Arduino !

Pembaruan 16 Agustus 2019:Rilis Aplikasi baru yang ditingkatkan - dengan fasilitas untuk Membaca / Menulis CV 1 hingga 255
Versi Aplikasi ini berbiaya £5 ditambah pajak dan tersedia di Google Play Store.

Pembaruan 18 Mei 2019:Rilis Aplikasi baru yang ditingkatkan - hingga 28 fungsi dengan judul yang dapat diedit, visibilitas, dan opsi sesaat. Kontrol hingga 4 lokasi sekaligus dengan bilah kecepatan di layar. Versi Aplikasi ini berbiaya £3 ditambah pajak dan tersedia di Google Play Store.

Pembaruan 17 Feb 2019:Anda mungkin harus memodifikasi modul Bluetooth HC-06 untuk memperluas jangkauan penerimaannya. Saya menambahkan kabel tembaga padat (dari kabel arde utama) dengan panjang 31,2 mm (1/4 dari panjang gelombang untuk 2,4 GHz). Lihat foto terlampir di Langkah 2.

Pembaruan 29 Jan 2019:Penambahan opsi sesaat pada F2 dan F3 untuk suara klakson Kecepatan maksimum preset untuk setiap locoIni adalah stasiun komando DCC paling efisien yang mungkin dibangun. Tidak ada sistem lain yang dapat melakukan banyak hal dengan komponen yang begitu sedikit. Stasiun Komando DCC yang berfungsi penuh dengan mudah dirakit dengan PCB tersedia di eBay plus hanya membutuhkan beberapa bagian. Aplikasi 'LocoMotive' dirancang untuk beroperasi pada ponsel Android yang menjalankan versi 4.1 dan lebih tinggi . Tidak perlu membeli sistem kepatutan apa pun, ini adalah unit yang berdiri sendiri yang dioperasikan oleh Aplikasi gratis yang disebut 'LocoMotive'Bekerja dengan dekoder yang sesuai dengan NMRA. Sistem ini mengkompilasi paket DCC yang beroperasi di dalam Aplikasi yang dikirim ke antarmuka Arduino untuk digabungkan dengan sinyal clock DCC. Beli PCB ini di eBay.Dapatkan LocoMotive Aplikasi gratis di Google Play Store.Fiturnya meliputi:

  • Kontrol 1 hingga 20 lokasi
  • Ideal untuk tata letak ukuran kecil hingga sedang
  • 2 Amps memuat drive hingga 16 lokomotif OO/HO menggunakan jembatan-H yang ditentukan
  • Tambahkan h-bridge yang kompatibel dengan arus lebih tinggi untuk menambah kapasitas beban
  • Dilindungi dari hubungan pendek
  • Otomatis melalui pemutus arus, dapat disesuaikan dalam kode Arduino
  • Lampu dan arah
  • Fungsi 1 sampai 8
  • Mengedit nama fungsi, visibilitas, dan tindakan sesaat
  • Turnout / poin / aksesoris mengoperasikan hingga 8 pasang output
  • Mengedit nama pemilih
  • Penamaan khusus untuk lokasi Anda dan atur kecepatan maksimum untuk setiap lokasi
  • Memrogram alamat loco CV1
  • Baca/tulis CV 1 sampai 255
  • Tambahkan alamat aksesori Anda sendiri
  • Pilih sumber listrik DC yang sesuai dengan skala yang digunakan (Z/N/OO/HO/O/G) 12v hingga 20v

Selanjutnya untuk pekerjaan sebelumnya pada sistem nirkabel DCC, saya telah mengembangkan Stasiun Komando Bluetooth yang terhubung ke sirkuit penerima berbasis Arduino dengan modul HC-06 BT dan driver Motor H-bridge LMD18200 yang menghasilkan 2 Amps.

Biaya keseluruhan suku cadang adalah sekitar £20 dengan suku cadang yang dibeli dari eBay.

Langkah 1:Sketsa Arduino

Sketsa lengkap terlampir. Bagian ini adalah loop dan kode penerima data. Aplikasi Android mengirimkan paket lengkap ke penerima dan didekodekan di sini menjadi larik data. Tergantung pada apakah 3 atau 4 byte yang diterima, kode akan menghasilkan format paket DCC yang benar untuk jalur kereta.

void loop() {jika(bluetooth.available()> 0); {inString =bluetooth.readStringUntil('\n');}if (inString.substring(0, 1)=="D") {string();}delay(20);}

String() void kemudian memisahkan data dari string teks yang diterima dan menempatkan setiap instruksi ke posisi yang sesuai dalam paket DCC.

Misalnya:

String teks yang diterima dari 'DD, 3, 63, 12, 48, ' diterjemahkan ke dalam paket Kecepatan 4 byte masing-masing 8 bit :

DD =pesan IDByte:[1] [2] [3] [4] Desimal:[3] [63] [12] [48] Biner:[0000 0011] [0001 1111] [0000 1100] [0001 1000] Aksi :[Loco 3] [langkah kecepatan] [ kecepatan loco] [ XOR data check]

String teks yang diterima dari 'DD, 1, 129, 128, ' diterjemahkan ke dalam paket Fungsi 3 byte masing-masing 8 bit :Desimal:[1] [129] [128] Biner:[0000 0001] [1000 0001] [1000 0000] Tindakan:[Loco 1] [ F1 aktif] [XOR data check]

Untuk informasi lebih lanjut tentang standar paket NMRA, lihat:https://www.nmra.org/sites/default/files/s-9.2.1_2...

s-9.2.1_2012_07.pdf

LMD membutuhkan sinyal DCC pada pin DIR dan pin PWM dalam posisi HIGH.

command_station_bluetooth_oct_2018.ino

Langkah 2:Diagram Sirkuit Fritzing

Arduino Pro Mini menerima data Bluetooth melalui modul HC-06. Arduino menghasilkan siklus clock standar NMRA data dalam format paket. Data yang diterima menginterupsi urutan saat data baru diterima dan paket DCC diperbarui untuk mengirim instruksi ke jalur kereta.

Daftar suku cadang yang dibutuhkan:

PCB tersedia di eBay.

Diskon 1 Arduino Pro Mini Atmega328P 5V/16M eBay

Diskon 1 LMD18200T H-bridge eBay

1 diskon modul Bluetooth HC-06 eBay

1 diskon 0,1 ohm Resistor Film Logam 2W 0,1R 2 Watt (11,5 mm x 4,5 mm) eBay

Diskon 3 Kapasitor 0.1uf eBay

2 dari 10kΩ Resistor eBay

1 dari Kapasitor 10uf 25v; eBay

1 dari Kapasitor 220uf 16v; eBay

1 diskon Phoenix Contact MKDS 1/2-3, 5 Blok Terminal PCB Sekrup 2 Arah 13.5A 200V 3.5mm eBay

Diskon 1 4.7kΩ Resistor eBay

1 off L7805 CV IC Regulator Tegangan Positif eBay

1 dari 4 pin Female Header Edge Pins Strip 0.1" 2.54mm eBay

2 off 12 pin Female Header Edge Pin Strip 0.1" 2.54mm eBay

1 off 6 pin 2.54mm PCB Universal Screw Terminal Block eBay

1 dari Dioda Zener 3.6V; 0.5W 1N4732A eBay

Kawat

Catu daya:Untuk tata letak OO/HO, gunakan catu daya 14v DC (mis. unit pengisi daya laptop dari eBay). Misalnya ini memberikan hingga 2,5 Amps. Periksa ukuran soket yang dipasang di panel yang diperlukan agar sesuai dengan colokan jack DC pada catu daya yang dipilih untuk proyek ini. https://www.ebay.co.uk/itm/Samsung-AC-DC-Adapter-...

Untuk memperluas jangkauan modul HC-06 Bt, solder kabel ke ujung antena pada modul. Saya menggunakan kabel tembaga padat (dari kabel pembumian utama) dengan panjang 31,2 mm (1/4 panjang gelombang untuk 2,4 GHz). Lihat foto di atas. Harap diperhatikan - koneksi HC-06 adalah Rx (pada PCB) ke Rx (pada modul) dan Tx ke Tx. Harap diperhatikan, kabel antena harus ditutup selongsong untuk menghindari korsleting yang tidak disengaja dengan komponen lain.

Untuk penggunaan modul h-bridge LMD18200 (seperti yang ditampilkan di atas ini dalam bentuk modul dengan heatsink dll), saya telah menambahkan komponen sensor arus untuk memberikan perlindungan dari masalah korsleting atau kelebihan beban di jalur kereta api, Diagram sirkuit yang diperbarui dan Arduino kode sekarang termasuk fungsi indera saat ini.

Kode membatasi arus maks hingga 2 Amps ketika tercapai, jembatan-h LMD18200 dimatikan dengan menerapkan sinyal TINGGI dari D13 pada Arduino ke input 'Rem' pada jembatan-h.

Penggunaan resistor penginderaan arus 0,1 ohm memberikan rentang input analog 0 hingga 200 mv pada pin sensor Arduino A0 untuk beban hingga 2 Amps. Untuk kira-kira 5mv per input langkah analog (1023 langkah total atau divisi) memberikan 0 hingga 40 divisi atau 2 Amps / 40 =50mA per divisi. Ketepatan arus yang diukur adalah 50 mA namun kami melindungi jembatan-h ketika 2 Amps tercapai. LMD18200 juga memiliki perlindungan suhu berlebih sebagai cadangan.if(C>2000){ // 2 amp

Serial.println("Arus Lebih"); digitalWrite(13, TINGGI); }

Nilai dari arus yang ditarik dikirim ke Aplikasi Android melalui Bluetooth setiap detik.void send_c(){t =millis() - lastmillis; if (t>=interval){ bluetooth.write(sensorValue); bluetooth.write('c'); mili terakhir =mili(); } }

Langkah 3:Aplikasi Android

Unduh Aplikasi gratis dari Google Play Store - 'LocoMotive'

Unduh Aplikasi lengkap (£5.99) dari Google Play Store - 'LocoMotive DCC'

Petunjuk terlampir untuk Aplikasi versi lengkap.

Kode

  • lokomotif_dcc_sep19.ino
lokomotif_dcc_sep19.inoArduino
Kode Arduino
// 1 Sep 2019// sketsa untuk digunakan dengan Aplikasi Android 'Lokomotif DCC'menggunakan LMD18200 h-bridge// fasilitas baca/tulis CV ditambahkan#include SoftwareSerial bluetooth(8,9); // RX TXint C;int sensorValue;long t =0;long lastmillis =0;interval panjang =1000;String inString;int a[8];int preamable_type =0;int Alamat;float CV_VAL;float cv_val;float cv_val0; float cv_val1;float cv_val2;float cv_val3;float cv_val4;float cv_val5;float cv_val6;float cv_val7;int test_num;int cv_write_val;int Cs;boolean cv_logic;boolean ok;int num;// gunakan pin digital DCC 6 dan 5 //Frekuensi timer adalah 2MHz untuk ( /8 skala awal dari 16MHz )#define TIMER_SHORT 0x8D // 58panjang pulsa penggunaan #define TIMER_LONG 0x1B // 116penggunaan panjang pulsa unsigned char last_timer=TIMER_SHORT; // simpan nilai penghitung waktu terakhir unsigned char flag=0; // digunakan untuk short atau long pulseunsigned char every_second_isr =0; // pulsa naik atau turun // definisi untuk state mesin #define PEMBUKAAN 0 #define SEPERATOR 1#define SENDBYTE 2unsigned char state=PEMBUKAAN;unsigned char preamble_count =16;unsigned char outbyte =0;unsigned char cbit =0x80;// variabelunsigned char xdata =0, data =0, data_f =0,data_f1 =0,data_f2 =0;int locoAdr =9; // ini adalah alamat default dari loco// buffer untuk commandstruct Message { unsigned char data[7]; unsigned char len;};#define MAXMSG 3// untuk saat ini, gunakan hanya 2 pesan - msg idle, loco Speed ​​msg, function msgstruct Message msg[MAXMSG] ={ { { 0xFF,0, 0xFF, 0, 0, 0, 0}, 3}, // pesan diam { { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // locoMsg dengan 128 langkah kecepatan 0x3f }; // loco msg harus diisi kemudian dengan kecepatan dan data XOR byte int msgIndex=0; int byteIndex=0;//Setup Timer2.//Mengonfigurasi 8-Bit Timer2 untuk menghasilkan interupsi pada frekuensi yang ditentukan.//Mengembalikan nilai beban waktu yang harus dimuat ke TCNT2 di dalam rutin ISR Anda.void SetupTimer2(){ //Pengaturan Timer2:Prescaler Timer /8, mode 0 //Jam timer =16MHz/8 =2MHz atau 0,5usec TCCR2A =0; TCCR2B =0<=MAXMSG) { msgIndex =0; } byteIndeks =0; //mulai pesan dengan byte 0 } break; SEPERATOR kasus:bendera=0; // pulsa panjang // lalu maju ke status berikutnya =SENDBYTE; // masuk ke byte berikutnya ... cbit =0x80; // kirim bit ini lain kali outbyte pertama =msg[msgIndex].data[byteIndex]; merusak; case SENDBYTE:if (outbyte &cbit) { flag =1; // kirim pulsa pendek } else { flag =0; // kirim pulsa panjang } cbit =cbit>> 1; if (cbit ==0) { // bit terakhir terkirim, apakah ada byte berikutnya? byteIndeks++; if (byteIndex>=msg[msgIndex].len) { // ini sudah menjadi byte XOR lalu lanjutkan ke preamble state =PREAMBLE; if (preamable_type ==0){ preamble_count =16; // panjang pembukaan normal 16 '1 } if (preamable_type ==1){ preamble_count =24; // pembukaan 24 '1 untuk CV1 tulis } } else { // kirim pemisah dan maju ke status byte berikutnya =SEPERATOR; } } merusak; } if (flag) { // if data==1 maka short pulse latency=TCNT2; TCNT2=latensi+TIMER_SHORT; last_timer=TIMER_SHORT; } else { // latensi pulsa panjang=TCNT2; TCNT2=latency+TIMER_LONG; last_timer=TIMER_LONG; } }}pengaturan batal(){Serial.begin(115200);analogReference(INTERNAL);pinMode(13, OUTPUT); bluetooth.begin(9600); penundaan (500); // tunggu modul bluetooth untuk memulai Serial.println("Bluetooth Started"); bluetooth.println("Bluetooth Dimulai");DDRD =B01100000; // daftarkan D5 untuk pin digital 5, D6 untuk pin digital 6 //Mulai pengatur waktu SetupTimer2();t =millis();lastmillis =millis();digitalWrite(6, LOW);digitalWrite(13, HIGH); // matikan bridge o/p offint get_cv_val =cv_calc(test_num);}batalkan arus(){int i; nilai int =0; int numReadings =5;for (i =0; i 2000){ // 2 amp Serial.println("Arus Lebih"); bluetooth.println("Pendek!"); digitalWrite(6, RENDAH); // kontrol logika sinyal DCC ke rendah (mati) digitalWrite(13, HIGH); // untuk mengerem, korsleting h-bridge o/p bluetooth.println(C); }}void loop() { if(bluetooth.available() ==true); { inString =bluetooth.readStringUntil('\n'); Serial.println(inString); } if (inString.substring(0,1) =="D"){ string(); } // paket DCC masuk if (inString.substring(0,1) =="C"){ digitalWrite(6, HIGH); digitalWrite(13, RENDAH); } // reset setelah arus lebih, kontrol logika sinyal DCC aktif, rem off if (inString.substring(0,1) =="G"){ digitalWrite(6, HIGH); digitalWrite(13, RENDAH); saat ini(); bluetooth.println(C);} // permintaan untuk memuat nilai saat ini if ​​(inString.substring(0,1) =="A"){ digitalWrite(6, HIGH); digitalWrite(13, RENDAH); get_cv_data(); cv1_prog(); digitalWrite(6, RENDAH); digitalWrite(13, HIGH);} if (inString.substring(0,3) =="dapatkan"){ cv_val =0; digitalWrite(6, TINGGI); digitalWrite(13, RENDAH); get_cv_num(); cv_baca(); digitalWrite(6, RENDAH); digitalWrite(13, TINGGI); } if (inString.substring(0,3) =="tambah"){ cv_write_val =0; digitalWrite(6, TINGGI); digitalWrite(13, RENDAH); get_cv_new_val(); repeat_cv_write(); digitalWrite(6, RENDAH); digitalWrite(13, TINGGI); } if (inString.substring(0,1) =="V"){ delay(50);bluetooth.print("CV1 diperbarui"); Serial.println(Alamat);} // cv1 tulis if (inString.substring(0,1) =="E"){ digitalWrite(6, LOW); // kontrol logika sinyal DCC ke rendah (mati) digitalWrite(13, HIGH); // untuk mengerem, korsleting h-bridge o/p } // e-stop inString =""; }void get_cv_new_val(){ Serial.println(inString); String cv_w=""; int x =inString.indexOf("baru,") + 4; cv_w =inString.substring(x,x+3); Serial.println(cv_w); cv_write_val =cv_w.toInt(); Serial.print("cv_write_val:");Serial.println(cv_write_val); String addr=""; int z =inString.indexOf("addr,") + 5; addr =inString.substring(z,z+1); Serial.println(addr); Alamat =addr.toInt(); Serial.print("Alamat:");Serial.println(Alamat); }void get_cv_num(){ cv_write_val =0; Serial.println(inString); String suhu =""; int x =inString.indexOf(",") + 1; temp =inString.substring(x,8); Serial.println(temp); Alamat =temp.toInt(); Serial.print("Alamat:");Serial.println(Alamat); } void get_cv_data(){ unsigned long z =inString.length(); int y =0; int jumlah =0; String inChar; String suhu =""; for (int i =0; i<=z; i++){ inChar =inString.substring(i,i+1); if (inChar ==",") {count++;} if (inChar !="," &&inChar !="A") {temp +=inChar;} if (inChar ==",") {Address =(temp .toInt());y =y +1;temp ="";} } amend_len3(msg[1]); assemble_3_byte(); Serial.println(inString); } void string(){ unsigned long z =inString.length(); int y =0; for (int i =0; i<=5; i++){ a[i] =0; }int jumlah =0; String inChar;String temp =""; for (int i =0; i<=z; i++){ inChar =inString.substring(i,i+1); if (inChar ==",") { hitung++; } if (inChar !="," &&inChar !="D") { temp +=inChar; } if (inChar ==",") { a[y] =(temp.toInt()); y =y +1; suhu =""; } } if (hitung ==3){ //Serial.println(inString); //cetak_data(); amand_len3(pesan[1]); assemble_3_byte(); } if (hitung ==4){ //Serial.println(inString); //cetak_data(); amand_len4(pesan[1]); assemble_4_byte(); } //Serial.println(inString); //Serial.println(a[1]); // Serial.println(a[2]); //Serial.println(a[3]); //Serial.println(a[4]); //cetak_data(); } void amend_len4 (Pesan struct &x) { x.len =4; //Serial.println(x.len);}void assemble_4_byte() { preamable_type =0; // 16 x '1's noInterrupts(); msg[0].data[0] =B111111111; msg[0].data[1] =B00000000; msg[0].data[2] =B11111111; pesan[1].data[0] =a[1]; pesan[1].data[1] =a[2]; pesan[1].data[2] =a[3]; msg[1].data[3] =((a[1] ^ a[2])^ a[3]); interupsi();}void amend_len3 (Pesan struct &x) { x.len =3; //Serial.println(x.len);}void assemble_3_byte() { preamable_type =0; // 16 x '1's noInterrupts(); msg[0].data[0] =B111111111; msg[0].data[1] =B00000000; msg[0].data[2] =B11111111; pesan[1].data[0] =a[1]; pesan[1].data[1] =a[2]; msg[1].data[2] =(a[1] ^ a[2]); pesan[1].data[3] =0; interupsi(); }void print_data(){ Serial.print(msg[1].data[0], DEC); Serial.print(","); Serial.print(msg[1].data[1], DEC); Serial.print(","); Serial.print(msg[1].data[2], DEC); Serial.print(","); Serial.print(msg[1].data[3], DEC); Serial.println(","); }//CV readvoid cv_current(){for (int i =1; i<=10; i++){ sensorValue =analogRead(A0); C =10.8 * nilai sensor; // mA jika (C>=Cs){ cv_logic =true; } delayMicroseconds(500); Serial.print("C =");Serial.println(C);}}tidak berlaku cv_read(){ cv_val =0; penundaan (200); saat ini(); if(bluetooth.available() ==true);{ bluetooth.print("membaca.."); } Cs =C + 50; CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val0 =cv_calc(0); penundaan (10); } } CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val1 =cv_calc(1); penundaan (10); } } CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val2 =cv_calc(2); penundaan (10); } } CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val3 =cv_calc(3); penundaan (10); } } CV_VAL =99; untuk (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val4 =cv_calc(4); penundaan (10); } } CV_VAL =99; untuk (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val5 =cv_calc(5); penundaan (10); } } CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val6 =cv_calc(6); penundaan (10); } } CV_VAL =99; for (int f =1; f<=10; f++){ if (CV_VAL ==99){ cv_val7 =cv_calc(7); penundaan (10); } } Serial.print("cv_val0 ");Serial.println(cv_val0); Serial.print("cv_val1");Serial.println(cv_val1); Serial.print("cv_val2 ");Serial.println(cv_val2); Serial.print("cv_val3 ");Serial.println(cv_val3); Serial.print("cv_val4");Serial.println(cv_val4); Serial.print("cv_val5");Serial.println(cv_val5); Serial.print("cv_val6 ");Serial.println(cv_val6); Serial.print("cv_val7 ");Serial.println(cv_val7); int cv_val_total =cv_val0+cv_val1+cv_val2+cv_val3+cv_val4+cv_val5+cv_val6+cv_val7; cv_val =0; if (cv_val0 ==1){ cv_val =cv_val + 1; } jika (cv_val1 ==1){ cv_val =cv_val + 2; } jika (cv_val2 ==1){ cv_val =cv_val + 4; } jika (cv_val3 ==1){ cv_val =cv_val + 8; } jika (cv_val4 ==1){ cv_val =cv_val + 16; } jika (cv_val5 ==1){ cv_val =cv_val + 32; } jika (cv_val6 ==1){ cv_val =cv_val + 64; } jika (cv_val7 ==1){ cv_val =cv_val + 128; } if(bluetooth.available() ==true);{ if (cv_val_total> 9){ bluetooth.print("read =error"); } if (cv_val_total <9){ bluetooth.print("read ="); bluetooth.println(int(cv_val + 0.5)); } }Serial.print("cv_val ");Serial.println(int(cv_val + 0.5));}void cv1_prog(){untuk (int i =0; i<=3; i++){ reset_packet(); penundaan (5); }untuk (int i =0; i<=5; i++){ page_preset_packet(); penundaan (5); }untuk (int i =0; i<=9; i++){ reset_packet(); penundaan (5); } untuk (int i =0; i<=5; i++){ cv1_write_packet(); penundaan (5); } saat ini();untuk (int i =0; i<=10; i++){ cv1_write_packet(); penundaan (5); } }kosongkan reset_packet() { noInterrupts(); tipe_preamable =0; msg[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B00000000; msg[1].data[1] =B00000000; msg[1].data[2] =B00000000; interupsi();}void page_preset_packet() { noInterrupts(); tipe_preamable =0; // 16 x '1's pesan[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B01111101; msg[1].data[1] =B00000001; pesan[1].data[2] =B01111100; interupsi();}void cv1_write_packet() { preamable_type =1; // 24 x '1 noInterrupts(); msg[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B01111000; // Mode alamat saja msg[1].data[1] =B00000000 | Alamat; msg[1].data[2] =(msg[1].data[0] ^ msg[1].data[1]); interupsi();}batalkan cv_verify1_packet() { noInterrupts(); preamable_type =1; // 24 x '1 pesan[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B01111000; // mode manipulasi bit msg[1].data[1] =B00000000 | (Alamat 1); msg[1].data[2] =B11101000 | jumlah; msg[1].data[3] =(msg[1].data[0] ^ msg[1].data[1]) ^ msg[1].data[2]; interupsi(); }void cv_verify0_packet() { noInterrupts(); preamable_type =1; // 24 x '1 pesan[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B01111000; // mode manipulasi bit msg[1].data[1] =B00000000 | (Alamat 1); msg[1].data[2] =B11100000 | jumlah; msg[1].data[3] =(msg[1].data[0] ^ msg[1].data[1]) ^ msg[1].data[2]; interupsi(); }void cv_write_packet() { preamable_type =1; // 24 x '1 noInterrupts(); msg[0].data[0] =B111111111; msg[0].data[1] =B11111111; msg[0].data[2] =B11111111; msg[1].data[0] =B01111100; // mode tulis pesan[1].data[1] =B00000000 | (Alamat 1); msg[1].data[2] =B00000000 | cv_write_val; msg[1].data[3] =(msg[1].data[0] ^ msg[1].data[1]) ^ msg[1].data[2]; interupsi(); }void valid_packet(){ noInterrupts(); msg[0].data[0] =B111111111; msg[0].data[1] =B00000000; msg[0].data[2] =B11111111; tipe_preamable =0; // 16 x '1's msg[1].data[0] =(Alamat - 1); pesan[1].data[1] =0x80; // locoMsg dengan instruksi grup satu 0x80 msg[1].data[2] =msg[1].data[0] ^ msg[1].data[1]; pesan[1].data[3] =0; interupsi();}//CV writevoid repeat_cv_write() { saat ini(); Cs =C + 50; Serial.print("C =");Serial.println(C); Serial.print("Cs =");Serial.println(Cs); if(bluetooth.available() ==true);{ bluetooth.print("menulis.."); } oke =salah; for (int f =1; f<=10; f++){ if (ok ==false){ cv_write(); penundaan (10); } } }batalkan cv_write(){ delay(100); amand_len3(pesan[1]); assemble_3_byte(); delay(5);untuk (int i =1; i<=20; i++){ valid_packet(); penundaan (5); } untuk (int i =1; i<=6; i++){ reset_packet(); penundaan (5); } cv_logic =salah; amand_len4(pesan[1]); assemble_4_byte();for (int i =1; i<=10; i++){ cv_write_packet(); cv_saat ini(); Serial.print("C=");Serial.println(C); if (cv_logic){ ok =benar; cv_logic =salah; saya =11; amand_len3(pesan[1]); assemble_3_byte(); untuk (int i =1; i<=10; i++){ reset_packet(); penundaan (5); } if(bluetooth.available() ==true);{ bluetooth.print("write ="); bluetooth.println(cv_write_val); Serial.print("cv_write_val ");Serial.println(cv_write_val); } } } if(bluetooth.available() ==true);{ if (ok ==false){ bluetooth.print("write =error"); } }}int cv_calc(int test_num) { amend_len3(msg[1]); assemble_3_byte(); delay(5);untuk (int i =1; i<=20; i++){ valid_packet(); penundaan (5); } num =test_num; amand_len3(pesan[1]); assemble_3_byte(); untuk (int k =1; k<=4; k++){ reset_packet(); penundaan (5); } amend_len4(pesan[1]); assemble_4_byte(); cv_logic =salah; penundaan (2); untuk (int m =1; m<=5; m++){ cv_verify1_packet(); cv_current();jika (cv_logic){ cv_logic =salah; CV_VAL =1; Serial.print("test_num =");Serial.println(test_num); Serial.println(CV_VAL); tipe_preamable =0; amand_len3(pesan[1]); assemble_3_byte(); penundaan (5); untuk (int j =1; j<=3; j++){ reset_packet(); penundaan (5); }}}Serial.println("tes untuk 0"); amand_len3(pesan[1]); assemble_3_byte(); untuk (int k =1; k<=4; k++){ reset_packet(); penundaan (5); } amend_len4(pesan[1]); assemble_4_byte(); cv_logic =salah; delay(2);untuk (int m =1; m<=5; m++){ cv_verify0_packet(); cv_current();jika (cv_logic){ cv_logic =salah; CV_VAL =0; Serial.print("test_num =");Serial.println(test_num); Serial.println(CV_VAL); tipe_preamable =0; amand_len3(pesan[1]); assemble_3_byte(); penundaan (5); untuk (int j =1; j<=3; j++){ reset_packet(); penundaan (5); }}}Serial.println(CV_VAL);kembalikan CV_VAL; }

Suku cadang dan penutup khusus

Sirkuit lengkap dalam enklosur

Skema

Penerima Bluetooth / sirkuit penguat H-Bridge bluetooth_android_dcc_lmd18200_S8NTVsI4LY.fzzPetunjuk aplikasi

Proses manufaktur

  1. MrRobot – Robotika yang diaktifkan dengan aplikasi Seluler Ubuntu (termasuk Raspberry Pi dan arduino)
  2. 6-Shooter:Stasiun Pencampur Minuman Arduino
  3. Arduino Digital Dice
  4. Pengontrol Game Arduino
  5. Animasi dan Permainan LCD
  6. Smart Shoes (Tali Otomatis dan Pembangkit Listrik)
  7. Sonar menggunakan arduino dan ditampilkan pada pemrosesan IDE
  8. Game Pixel Chaser
  9. Mengontrol Kecerahan LED Menggunakan Bolt dan Arduino
  10. $10 Portable Arduino Weather Station (AWS)