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

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Komponen dan Perlengkapan

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Kartu SIM IoT Global Hologram
×1
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Arduino UNO
×1
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Schild Arduino GSM V2
×1
Kit Schild LCD Adafruit dengan Tampilan Karakter 16x2 - Hanya 2 pin digunakan! - BIRU DAN PUTIH
×1
Kotak Proyek Hammond 4.7 x 2.6 x 1.4 Biru Translucent
×1

Aplikasi dan Layanan Online

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Router Data Hologram

Tentang Proyek Ini

Pendahuluan

Ingin merekonstruksi kemegahan akhir tahun 90-an dan awal 2000-an, saya berpikir saya akan mencoba membuat pager dua arah sendiri, seperti yang dulu digunakan Jay-Z! Namun, saya menemukan ide ini lebih berguna dari sekilas pandang—Saya merancangnya sehingga dapat digunakan oleh anak-anak sebagai ganti ponsel nyata, atau dapat digunakan sebagai tombol “SOS” untuk seseorang yang bekerja sendiri di luar ruangan atau bahkan berolahraga (jika ukurannya lebih kecil). Dan selama beberapa minggu terakhir, perangkat ini selalu menyala di ruang tamu saya di mana istri dan saya meninggalkan pesan konyol satu sama lain.

Ringkasan: Proyek ini mengirim dan menerima pesan teks (SMS) melalui Arduino dengan modem seluler yang diintegrasikan dalam kotak kecil dengan tampilan LCD dan tombol kontrol sederhana.

Perhatikan bahwa kode untuk proyek ini mencakup kemampuan untuk menjalankan sistem dari antarmuka serial sehingga Anda dapat membuat dan menggunakan versi proyek ini bahkan jika Anda tidak memiliki schild LCD!

Pemilihan Hardware

Saya memiliki Schild Arduino GSM yang ingin saya gunakan dengan proyek ini bersama dengan kartu SIM dari Hologram, jadi menggabungkannya dengan Arduino UNO yang saya miliki sangatlah masuk akal. Adafruit membuat schild tampilan LCD dengan tombol built-in, dan karena menggunakan bus I2C, hanya menggunakan dua pin Arduino untuk tampilan dan lima tombol, sehingga masih banyak ruang untuk kustomisasi di masa depan.

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Tampilan LCD memiliki warna latar belakang biru yang bagus, jadi saya berpikir menggabungkannya dengan kotak biru translucent akan terlihat bagus. Menumpuk tiga papan di atas satu sama lain membuat koneksi yang sangat rapi dan tidak menjadi masalah secara listrik karena kedua schild menggunakan pin yang berbeda satu sama lain.

Semua yang lain masih beas untuk dikembangkan! Perangkat lain bahkan masih dapat ditambahkan ke bus I2C.

Selama pengembangan, sistem berjalan dengan baik hanya dengan daya USB dari laptop saya untuk mengirim dan menerima SMS, meskipun saya curiga akan membutuhkan lebih banyak daya untuk menggunakan data seluler GPRS secara andal.

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Komunikasi Seluler

Hologram menyediakan layanan data seluler yang bekerja dengan setiap perangkat yang menerima kartu SIM. Setelah mendaftarkan kartu SIM saya untuk layanan, dengan hanya satu klik tambahan saya dapat memberikan nomor telepon dengan kode area pilihan saya. Fitur lain yang membuat proyek ini hebat sebagai komunikator anak-anak, misalnya, adalah biaya yang sangat murah untuk menjaga layanan tetap aktif ($0.40/bulan) dan saya dapat menjeda kapan saja jika saya berhenti menggunakan perangkat. Seperti sebagian besar paket ponsel, menerima teks gratis dan mengirimnya $0.19 masing-masing. Di masa depan, biaya ini dapat diturunkan lebih jauh dengan menggunakan koneksi data ke layanan cloud Hologram di mana pesan dapat diroutas secara otomatis ke layanan SMS gratis. $0.60 untuk satu megabyte data akan memberi Anda banyak pesan teks kecil.

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Untuk alasan apa pun, meskipun Schild GSM akhirnya berfungsi dengan baik, tidak akan berjalan dengan benar fungsi GSMScanner dan GSMModem getIMEI() yang dirancang untuk pengaturan awal dan pemecahan masalah. Sangat menyesatkan! Fungsi SMS dan data GPRS berjalan dengan baik, jadi jika ada yang tahu kenapa modem masih tidak dapat memberitahu nomor IMEI-nya sendiri, saya akan senang mendengar ide Anda.

Kode dan Antarmuka

Adafruit memiliki petunjuk yang baik untuk menunjukkan schild LCD dalam tindakan dan Arduino memiliki panduan memulai yang baik untuk Schild GSM yang memamerkan fungsi penting, jadi sebagian besar kode saya didasarkan pada dua kumpulan fungsi tersebut, ditambah penambahan antarmuka pengguna saya sendiri.

Saya sebelumnya tidak pernah memrogram antarmuka pengguna yang bukan memasukkan huruf ke dalam baris perintah dengan keyboard, jadi saya ingin menjadikannya sederhana. Saya memutuskan untuk membuat sekumpulan pesan siap pakai untuk dikirim yang dapat di-scroll dengan tombol naik dan turun—sebenarnya lebih mudah dari yang saya pikir!

Hanya dengan menumpuk tiga papan di atas satu sama lain dengan kartu SIM yang berfungsi (bahkan dari ponsel Anda sendiri!) dan memflash kode di bawah ini, Anda akan mendapatkan perangkat pengiriman pesan teks yang bekerja seperti ini:

Itu saja! Pesan masuk ditampilkan secara otomatis terlepas dari menu yang aktif pada perangkat, dan bahkan akan menyala kembali lampu latar jika sebelumnya mati.

Langkah logis berikutnya mungkin untuk menambahkan menu nomor tujuan untuk pesan keluar, atau hanya membalas secara otomatis pesan terakhir yang diterima (menggunakan fungsi remoteNumber()).

Pembuatan Akhir

Untuk membuat lubang di kotak proyek, saya menggunakan bor untuk lubang biasa dan kemudian potong multipurpose Dremel (#561) dengan panduan (#565) untuk potongan yang lebih besar. Menggunakan papan tambahan dan klem untuk membuat pelindung yang memandu Dremel akan menghasilkan garis yang lebih rapi, tetapi saya cukup senang dengan apa yang saya lakukan secara bebas tangan. Bit tersebut pasti ingin melenceng lebih dari yang saya pikirkan!

Kawat tunggal yang sebenarnya ada dalam proyek adalah untuk daya untuk menambahkan baterai 9V dan saklar—tanpa baterai, dapat diaktifkan dari USB atau colokan dinding dan Anda selesai!

Baterai 9V dan klip muat dengan baik di samping Arduino dan di bawah Schild GSM (yang berukuran hampir sama dengan Arduino Mega). Saya solder kawat ke beberapa pin header untuk membuat koneksi daya mudah dipasang.

Untungnya Schild GSM memiliki leads pin yang sangat panjang dan dapat dibengkokkan. Saya dapat membengkokkan sedikit sehingga mereka meleset dari soket pada Arduino, sehingga meninggalkan koneksi tersebut bebas untuk header daya saya. Saya curiga ini sebabnya pin seperti itu! Schild LCD di atas memiliki pin pendek dan tebal tanpa koneksi weib di sisi depan, jadi membengkokkan pin adalah satu-satunya metode yang saya temukan untuk menghubungkan hal-hal selain schild dalam pengaturan ini.

Memotong leads solder port USB dan beberapa lainnya di sisi bawah Arduino memungkinkan untuk duduk datar dalam kotak pada beberapa lem double-stick foam tape. Kemudian papan tumpuk untuk meninggalkan LCD dan tombol sedikit menggenang di atas kotak—sempurna!

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Kesimpulan

Saya akan terus mencoba-coba sistem ini dan bahkan membiarkan keponakan saya berusia 4 tahun mengacaukannya sedikit. Saya pikir bekerja cukup baik sebagai messenger, tetapi saya terkejut bahwa saya lebih menyukainya sebagai papan iklan kecil di rumah saya untuk menampilkan pesan. Saya senang dengan estetika, yang membantu di sana.

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY
Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Lanjutan pekerjaan pada ini bisa memiliki menu kedua untuk memilih penerima pesan, memudarkan tampilan secara otomatis untuk hemat daya, menambahkan lampu/bunzzer/motor pager untuk notifikasi, atau perilaku antarmuka pengguna lain yang Anda inginkan!

Sistem ini juga dapat diubah secara fundamental untuk menampilkan notifikasi dari layanan seperti IFTTT, seperti jika Anda memiliki paket yang diterima atau tweet terbaru seseorang. Apa yang Anda bangun? Bagaimana Anda akan meningkatkan sistem ini?

Selamat menikmati!

-Mike

Anda dapat membaca lebih banyak tentang saya dan proyek-proyek saya di blog saya, termasuk lebih banyak tentang proyek ini.

(Proyek ini made possible sebagai bagian dari Program Hacker-In-Residence Hologram. Untuk informasi lebih lanjut, hubungi Sheena, koordinator konten Hologram, di sheena@hologram.io)

Kode

Kode sistem untuk ArduinoArduino
/** * Sistem pager dua arah dengan Arduino dan layanan seluler Hologram * Mike Schaus * 28 Des 2016 * Dibuat sebagai bagian dari program Hologram Hacker-In-Residence * * Proyek ini mengirim dan menerima pesan teks (SMS) melalui * Arduino dengan modem seluler yang diintegrasikan dalam kotak kecil * dengan tampilan LCD dan tombol kontrol sederhana. * * Perhatikan bahwa kode disertakan untuk berfungsi melalui schild ATAU * monitor serial, jadi Anda dapat menggunakan kode ini bahkan tanpa * schild LCD. */ #include <GSM.h> #define PINNUMBER "" // include kode library LCD: #include <Wire.h> #include <Adafruit_RGBLCDShield.h> #include <utility/Adafruit_MCP23017.h> // Schild menggunakan pin I2C SCL dan SDA. Pada Arduino klasik // ini adalah Analog 4 dan 5 jadi Anda tidak dapat menggunakan lagi untuk analogRead() // Namun, Anda dapat menghubungkan sensor I2C lain ke bus I2C dan berbagi // bus I2C. Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield(); // #define ini memudahkan untuk mengatur warna lampu latar #define OFF 0x0 #define ON 0x1 // buat karakter panah khusus pada LCD const byte arrow[8] = { B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000 }; // inisialisasi instance library GSM GSM gsmAccess(false); // sertakan parameter 'true' untuk debug enabled GSM_SMS sms; // array char nomor telepon untuk mengirim SMS // ubah nomor 12125551212 menjadi nomor // yang Anda miliki akses ke char remoteNumber[20]= "12125551212"; // Array untuk menyimpan nomor SMS diambil dari char senderNumber[20]; // array char pesan keluar yang mungkin untuk dipilih dari menu char* responses[]={"Mike=Awesome!", "Yes", "No", "Howdy!"}; //#define NUMRESPONSES 4 // jika ada yang tahu cara menghitung ini, saya semua telinga #define NUMRESPONSES (sizeof(responses)/sizeof(char *)) // terima kasih atas komentar Steve Kemp! int position=-1; // dengan cara ini tekan tombol pertama akan selalu menunjukkan opsi pertama menu int inByte = 0; // byte serial masuk untuk antarmuka keyboard boolean backlight = true; // lacak status lampu latar untuk toggle unsigned long previousMillis = 0; // akan menyimpan waktu terakhir pesan diperiksa #define CHECKINTERVAL 1500 // seberapa sering memeriksa pesan teks void setup() { // letakkan kode pengaturan Anda di sini, untuk berjalan sekali: // inisialisasi komunikasi serial Serial.begin(9600); Serial.println(F("Pengirim Pesan SMS -- sedang memulai...")); // atur jumlah kolom dan baris LCD: lcd.begin(16, 2); // Cetak pesan ke LCD lcd.print(F("Halo, Hologram!")); lcd.setCursor(0, 1); lcd.print(F("Sedang memulai...")); lcd.setBacklight(ON); // atur karakter panah untuk ditampilkan lcd.createChar(0, arrow); // status koneksi boolean notConnected = true; // Mulai Schild GSM // Jika SIM Anda memiliki PIN, berikan sebagai parameter begin() dalam kutipan while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) { notConnected = false; Serial.println(F("GSM terhubung karena Anda sangat hebat")); Serial.println(F("Menunggu pesan, atau kirim dengan \"s\"")); Serial.println(); lcd.clear(); lcd.setCursor(0,0); homeScreen(); } else { Serial.println(F("Tidak terhubung")); lcd.clear(); lcd.setCursor(0,0); lcd.print(F("Tidak terhubung")); delay(1000); } } } // ini adalah fungsi sistem menu void showResponses() { // Serial.println(position); // hanya untuk debugging sistem menu lcd.clear(); lcd.setCursor(0,0); // pastikan posisi kursor legal if (position<0) position=0; if (position>NUMRESPONSES-1) position = NUMRESPONSES-1; // tulis pilihan saat ini dan opsi berikutnya jika ada opsi lain lcd.write(0); // karakter panah lcd.print(position+1); lcd.print("-"); lcd.print(responses[position]); if (position < NUMRESPONSES-1) { lcd.setCursor(0,1); lcd.print(" "); lcd.print(position+2); lcd.print("-"); lcd.print(responses[position+1]); } } void homeScreen() { lcd.clear(); lcd.setCursor(0,0); lcd.print("SMS Messenger!"); lcd.setCursor(0,1); lcd.print("Siap; naik/turun kirim"); position=-1; //reset pilihan respons } void receiveSMS(){ char c; // Jika ada SMS yang tersedia() if (sms.available()) { Serial.println("Pesan diterima dari:"); // Dapatkan nomor jarak jauh sms.remoteNumber(senderNumber, 20); Serial.println(senderNumber); lcd.clear(); lcd.setCursor(0,0); backlight = true; lcd.setBacklight(ON); // Contoh pembuangan pesan // Setiap pesan yang dimulai dengan # harus dibuang if (sms.peek() == '#') { Serial.println("SMS dibuang"); sms.flush(); } // Baca byte pesan dan cetak mereka // karena sms.read hanya mengembalikan satu karakter pada satu waktu int i=0; while (c = sms.read()) { i++; Serial.print(c); if (i==17) lcd.setCursor(0, 1); // pindah ke baris berikutnya jika diperlukan if (i<33) lcd.print(c); // jangan mencoba mencetak lebih dari 32 karakter untuk jaga-jaga } Serial.println("\nAKHIR PESAN"); // Hapus pesan dari memori modem sms.flush(); Serial.println("PESAN DIHAPUS"); Serial.println(); // tunggu tombol kanan untuk mengakui sebelum melanjutkan program boolean acknowledged = false; while(!acknowledged) { uint8_t buttons = lcd.readButtons(); if (buttons & BUTTON_RIGHT) acknowledged = true; delay(50); //penundaan singkat untuk pemecahan masalah -- tanpa ini berperilaku aneh } homeScreen(); delay(400); // mencegah tekanan berulang berturut-turut } } // fungsi untuk menampilkan opsi pesan di monitor serial void printResponseOptions(){ for(int i=0; i<NUMRESPONSES; i++){ Serial.print(i); Serial.print("-"); Serial.println(responses[i]); } Serial.println(); } void sendSMS(const char* txtMsg){ Serial.print("Pesan ke nomor seluler: "); Serial.println(remoteNumber); // cetak info teks SMS Serial.println("SENDING"); Serial.println("Pesan:"); Serial.println(txtMsg); // kirim pesan sms.beginSMS(remoteNumber); sms.print(txtMsg); // selanjutnya, tambahkan tanda tangan ke pesan yang dipilih sms.print(" --Pastikan untuk terhubung dengan saya di blog saya https://mschausprojects.blogspot.com"); // panggil fungsi endSMS untuk selesai mengirim; akan mengembalikan 1 jika berhasil if (sms.endSMS()==1) { Serial.println("\nSELESAI!\n"); homeScreen(); } else { Serial.println("\nERROR\n"); lcd.clear(); lcd.setCursor(0,0); lcd.print("error"); } Serial.println(); } void loop() { // letakkan kode utama Anda di sini, untuk berjalan berulang kali: uint8_t buttons = lcd.readButtons(); if (buttons) { if (buttons & BUTTON_UP) { position--; showResponses(); backlight = true; lcd.setBacklight(ON); } if (buttons & BUTTON_DOWN) { position++; showResponses(); backlight = true; lcd.setBacklight(ON); } if (buttons & BUTTON_LEFT) { homeScreen(); backlight = true; lcd.setBacklight(ON); } if (buttons & BUTTON_RIGHT) { backlight = !backlight; // toggle status lampu latar if (backlight) lcd.setBacklight(ON); else lcd.setBacklight(OFF); homeScreen(); // harus menulis ke layar setelah mematikan lampu, sebaliknya layar menjadi kosong } if (buttons & BUTTON_SELECT) { // pastikan posisi kursor yang dipilih legal if (position<0) position=0; lcd.clear(); lcd.setCursor(0,0); lcd.print("Mengirim..."); lcd.setCursor(0,1); lcd.print(responses[position]); backlight = true; lcd.setBacklight(ON); sendSMS(responses[position]); } delay(200); // mencegah tekanan berulang berturut-turut } // ini hanya untuk antarmuka serial, tidak terkait dengan LCD dan tombol // kirim pesan ketika saya mengetik "s" di monitor serial // lalu tunggu pilihan saya untuk nomor respons if (Serial.available() > 0) { inByte = Serial.read(); // dapatkan byte masuk if (inByte == 's') { printResponseOptions(); while (Serial.available() > 0) { // hapus buffer keyboard untuk jaga-jaga char junk = Serial.read(); } while (Serial.available() == 0) ; // Tunggu di sini sampai buffer input memiliki karakter inByte = Serial.parseInt(); // akan ingin memeriksa pilihan valid di sini untuk lebih kuat sendSMS(responses[inByte]); } } // periksa pesan baru hanya sekali dalam beberapa detik untuk menjaga antarmuka lebih responsif unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= CHECKINTERVAL) { previousMillis = currentMillis; receiveSMS(); // memakan waktu sekitar 26ms ketika tidak ada pesan } } 

Skematik

Penggabungan sebenarnya jauh lebih sederhana daripada yang diimplikasikan skematik—kebanyakan koneksi dilakukan hanya dengan menumpuk kedua schild di atas Arduino! Apapun di luar itu bersifat opsional untuk daya baterai.

Buat Pager Dua Arah Klasik dengan Arduino – Perangkat Retro DIY

Proses manufaktur

  1. Sensor CO2 K30: Pemantauan Kualitas Udara Indoor dalam Waktu Nyata
  2. Memfasilitasi Komunikasi Tuna Netra Tuna Rungu Menggunakan 1Sheeld dan Arduino
  3. Bangun Tabung Pintar: Kendalikan Penerima Koin dengan Arduino Nano
  4. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  5. Mengintegrasikan Sensor Sidik Jari Kapasitif DFRobot dengan Arduino atau ESP8266
  6. Proyek HMI Nextion Interaktif Menggunakan Arduino Mega dan Sensor
  7. Kit Lengan Robot 6-DoF Berbasis Arduino dengan Pengendali Nunchuk
  8. Pengukuran Radiasi Matahari Akurat dengan Arduino UNO dan Ethernet Shield
  9. Sistem Radar Arduino Kompak dengan Sensor Ultrasonik HC-SR04 & Layar 1.8 inci
  10. Buat Nada Musik dengan Arduino: Panduan Langkah demi Langkah