Arduinoを使用した旧式の双方向ポケットベル
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
はじめに
90年代後半から2000年代前半の栄光を再現するために、ジェイ・Zが使用していたように、自分で双方向ポケットベルを作成しようと思いました。しかし、このアイデアは一見しただけでは役に立たないことがわかりました。実際の携帯電話の代わりに子供が使用できるように、または屋外で一人で作業する人の「SOS」ボタンとして使用できるように設計しました。または運動さえします(それが少し小さかった場合)。そして、この数週間、このデバイスは私のリビングルームで常にオンになっていて、妻と私はお互いにばかげたメッセージを残しています。
概要:このプロジェクトは、LCDディスプレイとシンプルなコントロールボタンを備えた小さなエンクロージャーに組み込まれたセルラーモデムを備えたarduinoを介してテキスト(SMS)メッセージを送受信します。
このプロジェクトのコードには、シリアルインターフェイスからシステムを実行する機能が含まれているため、LCDシールドがなくても、このプロジェクトのバージョンをビルドして使用できます。
ハードウェアの選択
このプロジェクトで使用したいArduinoGSMシールドとホログラムのSIMカードを持っていたので、ArduinoUNOと組み合わせるのは非常に理にかなっています。 Adafruitは、ボタンが組み込まれたLCDディスプレイシールドを作成します。I2Cバスを使用するため、Arduinoのディスプレイ用の2つのピンと5つのボタンのみを使用し、将来のカスタマイズのために多くの余地を残します。
<図>
LCDの背景色は青いので、半透明の青いエンクロージャーと組み合わせると見栄えが良くなると思いました。 3つのボードを積み重ねることで、非常にクリーンな接続が可能になり、2つのシールドが互いに異なるピンを使用するため、電気的に問題はありませんでした。
- LCDシールド:I2Cバス用のアナログ4および5ピン(+ 5V電源およびグランド[ただし、5Vピンの隣ではなくVinピンの隣のグランドのみ])
- GSMシールド:ソフトウェアシリアル用のピン2と3、および電源リセットとしてのピン7(さらに、ドキュメントでこれの詳細を見たことがないのに、明らかに電源とアース)
他のすべてはまだ自由に拡張できます!他のデバイスをI2Cバスに追加することもできます。
開発中、システムはSMSを送受信するためにラップトップからのUSB電源だけで正常に動作しましたが、GPRSセルラーデータを確実に使用するにはより多くの電源が必要になると思われます。
<図>
セルラー通信
ホログラムは、SIMカードを受け入れるすべてのデバイスで動作するセルラーデータサービスを提供します。 SIMカードをサービスに登録した後、クリックするだけで、選択した市外局番に電話番号を割り当てることができました。たとえば、このプロジェクトを子供向けのコミュニケーターとして優れたものにするもう1つの機能は、サービスをアクティブに保つのが非常に安価であり($ 0.40 / mo)、デバイスの使用をやめればいつでも一時停止できることです。ほとんどの携帯電話プランと同様に、テキストの受信は無料で、送信はそれぞれ$ 0.19です。将来的には、メッセージを無料のSMSサービスに自動的にルーティングできるホログラムのクラウドサービスへのデータ接続を使用することで、このコストをさらに下げることができます。 1メガバイトのデータに対して0.60ドルで、たくさんの小さなテキストメッセージを受け取ることができます。
<図>
何らかの理由で、GSMシールドは最終的には正常に機能していましたが、 GSMScanner
は正しく実行されませんでした。 および GSMModem getIMEI()
初期設定とトラブルシューティング用に設計された機能。かなり誤解を招く! SMSとGPRSのデータ機能は正常に機能したので、モデムがそれでも自分のIMEI番号を教えてくれない理由を誰かが知っているなら、私はあなたのアイデアを聞いてみたいです。
コードとインターフェース
Adafruitには、LCDシールドの動作を示す優れた手順があり、Arduinoには、重要な機能を紹介するGSMシールドの優れた入門ガイドがあるため、私のコードのほとんどは、これら2つの機能に基づいており、さらに独自の機能が追加されています。ユーザーインターフェイス。
キーボードを使用してコマンドラインに文字を入力する前にユーザーインターフェイスをプログラムしたことはなかったので、シンプルにしたいと思いました。送信する定型メッセージを選択して、上下のキーでスクロールできるようにすることにしました。実際、思ったよりも簡単です。
動作するSIMカードを使用して3つのボードを積み重ね(自分の携帯電話からでも!)、以下のコードをフラッシュするだけで、次のように機能するテキストメッセージングデバイスが得られます。
- 電源を入れると起動し、ネットワークが接続されると通知されます
- 左ボタン:「ホーム」画面に移動します
- 右ボタン:着信メッセージを確認し、次のメッセージがある場合はそれを受信できるようにします。また、現在のメッセージがない場合は画面を暗くします。
- 上/下ボタン:送信する事前にプログラムされたメッセージの選択をスクロールします。コードに好きなだけ入れることができると思います。私は4つから始めました。
- 選択ボタン:現在選択されているメッセージを送信します
それでおしまい!着信メッセージは、デバイスでアクティブなメニューに関係なく自動的に表示され、バックライトがオフになっている場合はオンになります。
次の論理的な手順は、送信メッセージの宛先番号のメニューを追加するか、最後に受信したメッセージに自動的に応答するようにすることです( remoteNumber()
を使用)。 関数)。
最終ビルド
プロジェクトボックスの開口部をカットするために、通常の穴にはドリルを使用し、次に大きなカットアウトにはガイド付きのDremel多目的カッティングビット(#561)(#565)を使用しました。いくつかの余分なボードとクランプを使用して、Dremelをガイドするためのジグを作成すると、よりクリーンなラインが作成されますが、フリーハンドで行ったことには十分満足しています。少しは間違いなく私が思っていた以上にさまようことを望みました!
プロジェクトの実際の配線は、9V電池とスイッチを追加するための電源のみです。電池がなくても、USBまたは壁のプラグから電力を供給できます。
9Vバッテリーとクリップは、Arduinoの隣とGSMシールド(Arduino Megaとほぼ同じサイズ)の下にぴったりと収まります。電源接続を簡単に接続できるように、いくつかのヘッダーピンにワイヤーをはんだ付けしました。
ありがたいことに、GSMシールドのピンには非常に長く曲がるリードがありました。私はそれらをわずかに曲げることができたので、Arduinoのソケットを見逃し、それらの接続を私の電源ヘッダー用に空けておきました。これがピンがそのような理由だと思います!上部のLCDシールドには短くて頑丈なピンがあり、前面にメスの接続がないため、このセットアップでシールド以外のものを接続する方法として、ピンを曲げるしかありませんでした。
USBポートのはんだリードとArduinoの下側にある他のいくつかのリードをクリップダウンすることで、ダブルスティックフォームテープのケースに平らに置くことができます。次に、ボードを積み重ねて、LCDとボタンをケースの上部からかろうじて突き出させます。完璧です!
<図>



結論
私はこのシステムをいじくり回し続け、4歳の甥に少しでも叩かせます。メッセンジャーとしてはかなりうまくいくと思いますが、家の小さな看板としてメッセージを表示するのがもっと好きなことに驚きました。私はそこに役立つ美学に満足しています。
<図>

これに関するさらなる作業には、メッセージの受信者を選択するための2番目のメニュー、電力を節約するためにディスプレイを自動的に暗くする、通知用のライト/ブザー/ポケットベルモーターを追加する、またはその他の必要なユーザーインターフェイスの動作があります!
>システムを根本的に変更して、IFTTTなどのサービスからの通知を表示することもできます。たとえば、パッケージが配信された場合や、誰かの最新のツイートがあった場合などです。何を作っているの?システムをどのように改善しますか?
お楽しみください!
-マイク
このプロジェクトの詳細を含め、私のブログで私と私のプロジェクトの詳細を読むことができます。
(このプロジェクトはの一部として可能になりました ホログラムの Hacker-In-Residenceプログラム。詳細については、ホログラムのコンテンツコーディネーターであるシーナに連絡してください。 [email protected] )
コード
- Arduinoのシステムコード
Arduino Arduino のシステムコード
/ ** * ArduinoとHologramセルラーサービスを備えた双方向ポケットベルシステム* Mike Schaus * 2016年12月28日* HologramHacker-In-Residenceプログラムの一部として作成**このプロジェクトはテキスト(SMS)を送受信します*小さなエンクロージャーに組み込まれたセルラーモデムを備えたarduinoを介したメッセージ* LCDディスプレイとシンプルなコントロールボタンを備えたメッセージ。 * * LCDシールドまたは*シリアルモニターを介して機能するコードが含まれているため、* LCDシールドがなくてもこのコードを使用できます。 * /#include#define PINNUMBER "" // LCDライブラリコードを含める:#include #include #include //シールドはI2CSCLおよびSDAピン。従来のArduinosでは//これはAnalog4および5であるため、analogRead()には使用できなくなります//ただし、他のI2CセンサーをI2Cバスに接続し、I2Cバスを共有することはできます。Adafruit_RGBLCDShieldlcd=Adafruit_RGBLCDShield( ); //これらの#defineを使用すると、バックライトの色を簡単に設定できます。 B01100、B01000、B00000}; // GSMライブラリインスタンスを初期化しますGSMgsmAccess(false); //デバッグ対応の「true」パラメータを含めるGSM_SMSsms; // SMSを送信する電話番号のchar配列//番号12125551212を番号に変更//アクセスできるcharremoteNumber [20] ="12125551212"; // SMSが取得される番号を保持する配列charsenderNumber [20]; // menucharから選択できる送信メッセージのchar配列* responses [] ={"Mike =Awesome!"、 "Yes"、 "No"、 "Howdy!"}; //#define NUMRESPONSES 4 //誰かが代わりにこれを計算する方法を知っているなら、私はすべての耳です#define NUMRESPONSES(sizeof(responses)/ sizeof(char *))// SteveKempのコメントに感謝します!int position =-1; //このように、最初にボタンを押すと、常にmenuint inByte =0の最初のオプションが表示されます。 //キーボードインターフェイスの着信シリアルバイトbooleanbacklight =true; //トグルのバックライトステータスを追跡しますunsignedlong previousMillis =0; //メッセージが最後にチェックされた時刻を保存します#defineCHECKINTERVAL 1500 //テキストメッセージをチェックする頻度voidsetup(){//セットアップコードをここに配置し、1回実行します://シリアル通信を初期化しますSerial.begin(9600); Serial.println(F( "SMSメッセージ送信者-起動中...")); // LCDの列と行の数を設定します:lcd.begin(16、2); //メッセージをLCDに出力しますlcd.print(F( "Hello、Hologram!")); lcd.setCursor(0、1); lcd.print(F( "起動中...")); lcd.setBacklight(ON); //表示用の矢印文字を設定しますlcd.createChar(0、arrow); //接続状態booleannotConnected =true; // GSMシールドを開始します// SIMにPINがある場合は、begin()のパラメーターとして引用符で囲みますwhile(notConnected){if(gsmAccess.begin(PINNUMBER)==GSM_READY){notConnected =false; Serial.println(F( "GSMはあなたがとても素晴らしいので接続されています")); Serial.println(F( "メッセージを待機中、または\" s \ ""で送信)); Serial.println(); lcd.clear(); lcd.setCursor(0,0);ホーム画面(); } else {Serial.println(F( "未接続")); lcd.clear(); lcd.setCursor(0,0); lcd.print(F( "未接続")); delay(1000); }}} //これはメニューシステムですfunctionvoidshowResponses(){// Serial.println(position); //メニューシステムのデバッグ専用lcd.clear(); lcd.setCursor(0,0); //(position <0)position =0の場合、カーソル位置が正しいことを確認します。 if(position> NUMRESPONSES-1)position =NUMRESPONSES-1; //別のオプションがある場合は、現在の選択と次のオプションを書き込みますlcd.write(0); //矢印文字lcd.print(position + 1); lcd.print( "-"); lcd.print(responses [position]); if(position 0){inByte =Serial.read(); //着信バイトを取得if(inByte =='s'){printResponseOptions(); while(Serial.available()> 0){// char junk =Serial.read();の場合に備えて、キーボードバッファをクリアします。 } while(Serial.available()==0); //入力バッファの文字がinByte =Serial.parseInt();になるまでここで待ちます//より堅牢にするために、ここで有効な選択を確認する必要がありますsendSMS(responses [inByte]); }} //新しいメッセージを数秒に1回だけチェックして、インターフェイスの応答性を高めますunsigned long currentMillis =millis(); if(currentMillis-previousMillis> =CHECKINTERVAL){previousMillis =currentMillis; receiveSMS(); //メッセージがない場合は約26ミリ秒かかります}}
回路図
組み立ては、実際には回路図が示すよりもはるかに簡単です。ほとんどの接続は、Arduinoの上に2つのシールドを積み重ねるだけで行われます。それを超えるものはすべて、バッテリー電源のオプションです。 
製造プロセス