チャットのプロット、またはwth.byで1位になった方法

おそらく誰かがすでにミンスクで行われているwth.by ハッカソンについて聞いたことがあるでしょう。 以下に、それが私にとってどのように進んだのか、そして私たちのチームを1位に導いた理由を説明します。 興味があれば、猫へようこそ。







準備する



2週間でハッカソンを開催することを学びました。 すぐに登録し、「チーム」を集めて、私たちは何をすべきか考え始めました。 arduinoに基づいたものになると判断しました。



数日間熟考した後、私は最近かなり人気のあるプロット時計に偶然偶然出くわし、この形で「出力」とチャットをするというアイデアに思いつきました。



私たちはこのアイデアをチームと話し合い、総体的な努力がどのように見えるかを決定しました:それぞれが情報を表示するための独自の「デバイス」を備えた2人のユーザーのチャットと、モーターが巻き付けるチェックテープが出力フィールドとして選択されました。



ハッカソンの数時間前に、彼らは(コードを書くことに重点を置くために)デバイスの「アルファ版」を組み立てました。



ソース資料:
Arduino UNO、2 x MicroServo SG90、1 x Servo MG946R、1 xステッピングモーター、木製ブロック、レシートペーパー、文字付きファン(はい、幼稚園/小学校でやったように)、スーパーグルー、そしてもちろん青い電気テープ。





イベント形式:非営利ハッカソン、アイデアを実装しない44時間、夜間:オプション、件名:無料、ただしウェブに接続。



ハッカソンの日



金曜日、午後6時 すべてのものを収集し、会場に向かいました。 彼らはリーダーに耳を傾け、裁判官をjudgesで、私たちがやろうとしていることについて話し、席に着いて仕事に取り掛かりました。



私たちは座って、2つのサーボとマーカーを使って何かを書く方法について誰も考えていないことに気付きました。 ネットワーク上で手がかりを探すことにしました。「これらのモデルをここに印刷し、このようにすべてを接続し、このコードをarduinoで埋めれば幸せになる」など、プロットクロックの「ガイド」を見つけました。 プロットクロックのソースをざっと調べてみると、コードについてのコメントがあっても、何も明確ではないことに気付きました。 その結果、2、3時間経ってもまだ何もありませんでした。



さらに数時間後、問題を定式化することができました。図面を作成した直後は非常に簡単でした。



手元に描くのに適したツールが見つかりませんでした




任意のポイント(x、y)にヒットするサーボの回転角度を取得するための派生式:



解決策


(2つのサーボに類似)



決定の時点までに、サーバーとクライアントのコードは準備ができていましたが、クライアントアプリケーションとarduinoおよび通信プロトコルとの通信を検討する必要がありました。 一方、時計は午前4時で、私たちは寝ました。



クライアントとサーバーの両方がnode.jsで記述され、Webソケットを介した通信クライアント->サーバー。 client->シリアルポートを介した「デバイス」、 node-serialportライブラリを使用したクライアント、標準のarduinoを使用した「デバイス」



2日目



9-00:寒さ、または周囲の騒音から目覚めると、私たちは手紙の書き方について考え始めました。 最初のアイデア:アルファベットの各文字をグリッドに配置し、極端なポイントを見つけて、ポイントごとに直線を描きます。 メカニズムの性質上、ポイント(x1、y1)から(x2、y2)へのパスは直線ではなく、円弧であることに気付きました。 一連のポイントで線を打つことにしたので、これらのポイント間の小さな弧はそれほど目立たなくなります。



ここから、arduinoを使用してクライアントアプリケーションの通信プロトコルを大まかに定式化できます。クライアントはメッセージを受信し、それを文字に分割し、各文字についてポイントのセットを事前に認識し、クライアントは次の形式のコマンドのセットを作成します:マーカーを上げる、マーカーを下げる、テープをスクロールし、2つのサーボの角度を設定する



一見、すべては問題ありませんが、シリアルポートが許可する通信速度が十分でなく、文字が受け入れられないほどゆっくり(1文字につき約1分)書き込まれることが判明しました。



実際に
たぶん料理の仕方が分からないだけかも



21-00:シリアルポートを数時間使用した後、私たちは必死でした。 すべてを修正する方法についてのアイデアがありましたが、これはハッカソンコードに関する一般的なジョークを完全に擬人化したものです。



典型的なハッカトンコード




私たちがやったことは次のとおりです。「コードジェネレーター」を作成し、各文字に対してsiで一連の関数呼び出しを作成し、このコードをArduinoに直接詰め込みました。 つまり ハードスキンの文字で「ファームウェア」を取得しました。 通信プロトコルは少し変更されました:クライアントはメッセージを受信し、それを文字に分割し、各文字をarduinoに送信し、arduinoはその文字を受け入れ、書き込み、テープを巻き戻します(arduinoのすべてのコードは利用可能な32個のうち約30kbを使用しました)。



(その間、多くの参加者がバーでリラックスに行きましたが、私たちはそれに応じていませんでした。コードを書いた人のために休んでください)。



2日目の朝の4時に「彼らは私を完全に解雇しただろう」という言葉で、私たちは言葉を書くことを学び、眠りについた。



3日目



数時間の睡眠の後、2番目のデバイスの文字をカスタマイズし、バグを修正し、プレゼンテーションを準備し始めました。 プロジェクトのプレゼンテーションは16:00に予定されていました。



15〜50で、2番目のデバイスの文字のフィッティングを完了しました。



最後の瞬間に何も壊れないように、私たちはすべてを事前にテーブルに置き、それが私たちの番になったときにそれを持ち込むことにしました。 しかし、これでも私たちを救うことはできませんでした。パフォーマンス中に、2番目のデバイスで巻き戻しが中断されましたが、幸いなことに、目立ちませんでした。



プレゼンテーションビデオ:







やりがいのある



すべての参加者がプロジェクトを示した後、審査員は長い40分間決定を下しました。

各賞の場所(いくつかのノミネートとトップ3)の発表の後、私は精神的に「ここで、今、私たちは来ます!」と言った。 それから2位になり、私は絶望し始めました:「まあ、勝てなかった」。 しかし、突然「プロットチャット」が遠ざかったと聞きました



賞品:GitHubの1年間のシルバーレポジトリ、tut.byと壮大なレゴマインドストームをホストするための100万ベラルーシルーブル(〜70ドル)。



しかし、主なことは、たくさんの前向きな感情とかけがえのない経験を得たことです。 また、風邪、引き裂かれた声、睡眠不足。 しかし、それは価値がありました。



UPD:ハッカソン形式に関する技術的な詳細と情報を追加しました。



All Articles