ツイッター用の最初のアナログクライアントを作成する方法

かつて、私の友人と私は、古いディスク電話でメッセージを入力して送信できるように、アイデアを思いついたのです。 プラットフォームは手頃な価格で学習しやすいので、真実は、Arduinoに基づいて何かをしたいと思うようになったからです。 そして、ビンテージ電話に新しい命を吹き込むというアイデアは魅力的であるように思えました。 結果はTweephoneです。



小さなビデオデモ、および以下で作成プロセスについて説明します。







文字を入力できるようにするために、12ボタンキーボードを備えた携帯電話で入力するという原則を選びました。 たとえば、文字「a」を入力するには、デュースを1回回転する必要があり、文字「f」については3回3回回転する必要があります。



考え直すことなく、友人同士でデバイス自体の検索(友人の祖母が見つけた)を整理し、ArduinoとLCD 16 * 2行の画面、はんだ付けアクセサリー、自由時間、そして自分の手で何かをしたいという切望を持ち出しました。



Arduinoを入手したら、すぐにLCDを接続し、LED、ボタン、LCDスクリーンのテストケースをひねりました。 ArduinoのWebサイトで見つけることができます。



電話ケースのカバーを取り外して内部を調べたところ、ダイヤラー自体は非常にシンプルであることがわかりました。3つの接点があり、そのうちの1つは他の2つと閉じています。 最初の場合-ディスクがスクロールしている場合、および2番目の場合-デフォルトで閉じられますが、ディスクが元の状態に戻る過程で、ディスクが移動を開始した数に応じて特定の回数開きます。 これはすべて肉眼で見ることができましたが、接点が短絡したときにビープ音を発するマルチメーターを使用して、正しい動作をさらに確認できます。 また、「デバイス上の受話器」/「受話器がオフ」の状態もプログラムで使用できることが明らかになりました。これは、このアクションが電話ボード上のボタンの接点を単に開閉するためです。



この知識を考えると、おおまかに言えば、3つのボタンを処理していることが明らかになりました。3つのボタンからデータをプログラムで読み取る必要があり、その他はすべてアルゴリズムの問​​題です。 そのため、 サイトからArduinoデジタルポートまでのスキームに従ってそれぞれを接続し、このすべてをブレッドボードにまとめました。







開発環境を開き、デジタルポートからパルスを読み取り、それらを文字に変換してtwitterに送信するコードを記述することは残っています。 Arduino用の通信ボードが手元になかったため、Arduinoシリアルポートから行を読み取り、それらを送信するスクリプトを実行するコンピューターにUSB経由で電話を接続することにしました。







プロセス全体のアルゴリズムは非常に簡単なので、ここではすべてのコードを説明するのではなく、ディスクから収集されたデータがどのように読み取られるかについてのみ説明します。



まず、デジタルポートを使用するには、初期化中にこのポートのモードを指定する必要があります。



const unsigned int diskState = 7;

const unsigned int diskCounter = 8;



void setup() {

pinMode(diskState, INPUT);

pinMode(diskCounter, INPUT);

}








リストからわかるように、ダイヤラーを直接接続するためにポート7と8を使用しました。



次に、スクリプトが実行される無限ループ内で、最初のポートの状態を確認する必要があります。論理的な「yes」がある場合は、ユーザーがディスクのスピンを開始したことを意味します。 ディスクが戻るまで、2番目のポートが開くたびにカウンターを増やす必要があります。



unsigned int prevDiskCountState = HIGH;



void loop() {

unsigned int currDiskState = digitalRead(diskState);

unsigned int currDiskCountState = digitalRead(diskCounter);



if (currDiskState == HIGH) {

if (prevDiskCountState == HIGH && currDiskCountState == LOW) {

currDiskCount++;

delay(100);

}



prevDiskCountState = currDiskCountState;

} else {

if (currDiskCount > 0) {

//

}

}

}








ハンドセットのステータスについても同じチェックが実行され、テキストがあり、ハンドセットがハングアップしている場合、回線はシリアルポートに書き込まれます。



Serial.println(msg);







そして、小さなRubyスクリプトがコンピューター上で起動され、その行が読み取られてTwitterに送信されます。



<br/> require "serialport" <br/> require "twitter" <br/> <br/> # params for serial port <br/>port_str = "/dev/tty.usbserial-A900cdNp" <br/>baud_rate = 9600 <br/>data_bits = 8 <br/>stop_bits = 1 <br/>parity = SerialPort::NONE<br/> <br/>sp = SerialPort. new (port_str, baud_rate, data_bits, stop_bits, parity)<br/> <br/> # twitter auth <br/> require './Config.rb' <br/>Twitter.configure do |config|<br/> config.consumer_key = YOUR_CONSUMER_KEY<br/> config.consumer_secret = YOUR_CONSUMER_SECRET<br/> config.oauth_token = YOUR_OAUTH_TOKEN<br/> config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET<br/> end <br/> <br/>client = Twitter::Client.new<br/> <br/> while true do <br/> line = sp. gets <br/> if line<br/> puts line<br/> client. update (line)<br/> end <br/> end <br/> <br/>sp.close <br/>





すべてが正常に機能することを確認した後、回路全体をブレッドボードから回路基板に移し、ディスプレイ用の穴を事前に切り取って、すべてをケース内に配置しました。















すべてのプロジェクトコードはGitHubで利用できるため、だれでも詳細を把握して、同様のものを実装できます。

Habrのツイート

プロジェクトtwitter

プロジェクトページ



質問があれば書いてください。



All Articles