古い時計「Electronics-7」の復元

こんにちは、ハラジテリ!



この話はこんな風に始まった。 以前の工場(金属構造物)の建物にある長い名前(そしてもちろん、次の偉大な党指導者の名前)にある施設で働いていたとき、私は排出の運命にあるゴミの山に1つのものを見ました。 SKBのロビー(前述の工場と同じように長くて多音節の名前があります)にぶら下がっていた、母が働いていた場所、そして幼少期から多くの時間が経った場所で、何がノスタルジアにひどいフィット感を与えましたか。 会う-時計「エレクトロニクス7-06」。







もちろん、私はそれを復元したい(または修正したいのではないか)という誘惑に抵抗できませんでした。 最終的な結果だけでなく、このプロセスに誰が興味を持っていますか-カットをお願いします(慎重に、いくつかのスキームと写真を!)。





1.ちょっとした理論



クロックスキームは、インターネットで自由に利用できます。 基本的な基盤は176シリーズの超小型回路です。 インジケータ-ガス放電タイプIV-26。 以下は元の図です。





図 1.元のスキーム、パート1





図 2.元のスキーム、パート2



2.始めましょう



時計はゴミの山から取り除かれ、家に持ち帰られ準備されました。 内部に蓄積した破片をきれいにした後、これは私の目に起こったことです。























電源を入れます。 原則として、すべてが機能します。 しかし:インジケータは燃え尽きました。 同じIV-26を入手する場所はありません。 Googleは、これらのIV-26をLEDに、さらに既製の7セグメントアセンブリに置き換える方法を示す多くのリンクを提供しています。 しかし、それはただの不運です-それはまったくそのようには見えません...それは現代的であり、それがポピーである理由です、私は言うでしょう。 したがって、私の一番の仕事は、可能な限り外観を維持しながら、LEDのインジケーターを復元することです。



3.スコアボード



ボードに通じるワイヤからのコームと、ダイオード上の加算器を備えたこれらのボードの図を見ると、少し不快に感じます。 設定するのは難しく、ワイヤーを簡単に混ぜることができます。 また、176番目のシリーズの出力は、LEDを直接制御するにはかなり弱いです。 さらに、できればシナリオに従って、ディスプレイの明るさを調整できるようにしたいと思います-夜は家で高輝度は完全に適切ではありません。 25年前のコンポーネントでの基準発生器の安定性は、誰も私を保証しません。 このように推定して、私はスキームを完全に修正することにしました。



各インジケーターは7 x 11のLEDマトリックスであるため、元のIV-26のポイント数によって表示されます。 よく知られているATtiny2313によって制御されます。 別の言い方をすれば、表示用のシンボルのイメージ、文字ジェネレーターのテーブルをそれ自体に保存します。 文字ごとに11バイトの最適化を行わなくても、100文字がそれに適合します。つまり、スコアボードに数字を書くだけではない可能性があります。 そして、このような行列が4つあり、表示するものはUARTで取得します。 さて、実際に時間をカウントし、このインターフェースでスコアボードのデータを送信するもの-これは後であります。 後で考えます(c)。 ただし、各マトリックスに適しているのは、GND、+ 5V、およびデータの3線のみです。 このタスクには単方向の伝送ラインで十分だと思いました。



指示は動的で、レジスタ74HC595上のノードを使用して行を選択し、デコーダ74HC238を使用して列を選択します。 AVR + 74HC595の設計は十分に説明されており、興味はありません。 残念ながら、tiny2313のSPIは何らかの形でカットされているため、レジスタへのデータのロードはプログラムで行われます。 さらに、SPIを使用しようとしたときに、ボードの配線に問題があったため、この考えを捨てました。 デコーダーはトランジスタアセンブリULN2003を介して接続され、電力を増加させます。



最初は、T0タイマーのハードウェアPWMで制御される追加のトランジスターを使用してLEDの輝度を調整する予定でしたが、問題がありました:PWMは動的表示と重なり(もちろん周波数が一致しませんでした)、LEDの不快なちらつきを生成しました。 したがって、PWMはソフトウェアですが、列選択デコーダーを使用して実装されます。 ご覧のとおり、インジケーターには7列があり、デコーダーの出力は8で、最後の出力は接続されていません。 それを選択すると、マトリックス全体が消滅します。



LED電流は抵抗によって制限されます。 適用されたLED-5213-PGC-6cdのドキュメンテーションに基づいて、20 mAの電流で3-3.5Vが低下すると、平均3.2Vがかかります。 さらに、ULN2003での1Vの低下。 合計(5-3.2-1)/ 0.02 = 40オーム。 私は39オームを取りました。



スイッチSA1は、ボードのアドレスを設定します。 このアプローチにより、4つのボードすべてを同じにすることができます。

残念ながら、私はまだ自宅で穴の金属化をマスターしていません。 したがって、ボードは単層であり、その上のジャンパーの数は恐ろしいことがありますが、すべての努力によって最小化されました。



以下に回路図を示します。





図 3.インジケーターの模式図





そして、製造工程の1つでのボードの写真です(フォトレジストが塗布され、現像されました)。



交換プロトコルは非常に簡単です。

最初のバイトは常にFFです。これはパケットヘッダーです。

2番目のバイトは、ボードのアドレスです。

3番目のバイトは、表示するデータ、ASCIIによる文字コードです。

4番目は、00-FEの範囲の希望する明るさです。

最後に-パケットのすべてのバイトの合計の下位8ビット、整合性チェック。 合計がFFの場合、FEに置き換えます。 パッケージ例:



FF 01 32 80 B2-アドレス1、輝度-最大の半分のボードにシンボル「2」を表示します。



コードを書く過程で、最初のデータを受信する前に、表示ボードに開始時にそのアドレスを表示させるというアイデアも思いつきました。 デバッグ時に便利であることがわかりました。



4.電源



ネイティブユニットには、2つの巻線を備えたトランスが含まれています。1つは、インジケータのアノードに電力を供給するために使用される22Vと、グローに電力を供給するために使用される3.8Vです。 もちろん、コンデンサは容量を失い、さらに+ 5Vが必要です。 そのため、スキームを検討する必要があります。 さらに、各1.5 Vの6個のバッテリーからロジックに電力を供給することが可能であるため、電源を切ったときに時間が迷うことはありません。 バッテリーは何とか深刻ではないので、定期的な交換が必要なので、このユニットを標準の6V、4.5 Ahバッテリーで動作するように変更しました。

ただし、w、22 * 1.41 = 31V。 さて、ここで通常の7805を行うことはできません。ただし、ここで部屋のヒーターの機能を台無しにしたいのでなければ。 短いグーグルとLM2576-5.0が助けになります-最大3Aの出力電流を備えた統合スイッチングレギュレーターは、地元のラジオ部品店でも見つかりました。

作成された自転車の数を減らすために無料の充電回路を盗むことができる場所を探して、ここに来まし (一般に、サイトは自転車専用で、フレーズの文脈で多少笑っています)。 しかし、回路は線形安定器上にあります...しかし、調整可能な出力電圧を備えた前述のLM2576のバージョンがあります。 実際、「出力電圧は約6-14V(バッテリーを12Vに接続できるように調整)、出力電流は0.5A以下(調整も)」という形式の制限でソースを積み重ねる必要があります。 考えた後、何かが起こりました。





図 4.電源回路



充電/バッテリー動作モードの切り替えは、電源トランスの一次巻線と並列に接続された220V巻線を備えた従来の機械式リレーによって実行されます。 やや素朴ですが、逆説的に、それは動作します。



5.システムの中心



ですから、実際に何時に考慮されるかを考え、指標を管理することを約束したのと同じ「後」でした。 そして、それが世界と同期するならさらに良い。 たとえば、NTPによって。 または昼間。 幸いなことに、家にはWi-Fiがあります。 そして最も重要なことは、はい。 私はほとんど忘れていました。 この時計には、ディスプレイのネイティブ要素がまだ1つ残っていました。それは非常に感動的で、変更するのは冒bl的なことだと思いました。 私は同じものを再作成することができず、彼は非常に労働者です。 IV-4インジケーターの2番目のポイントが点滅! ここで彼女も点滅する必要があります。



長い間、私はAVRとWi-Fiをペアリングするためのフォーラムを選び、Arduinoでそれがどのように行われているかを見ました... そして、私の目は、棚に横たわっていた「ラズベリー」に目を落としました。それは、その後の急流ダウンロードサイトの作成で勉強する目的で購入しました...



いいえ、まあ、スズメの大砲すらありません。 これは、便器の縁の下にある邪悪なバクテリアを破壊するためのデススターの主な口径のちょうどヒットです。 そして他方で-この急流ロッキングチェアがどこに立つかは本当に重要ですか? 時計ケースにUSB-HDD用の十分なスペースがあります。 さらに、* nixシステムでの私の経験はまだそれほど重要ではありません-私の視野を広げる大きな理由です。 これらの考えについて私の頭の中を飛んで、ラズベリーの運命が決定されました。 さて、それではまだ通りの温度を表示してみましょう。おそらく...私はそのような力を持っているからです。 また、ボードのサインジェネレーターを使用すると、長所と短所を描くことができます。



リアルタイムクロックをrPiに固定する方法と、それを完全にオンにする方法、初期セットアップを実行する方法、そこにtorrentクライアントをインストールする方法-何度も言われています。 しかし、私にとって有用と思われるリンクの数は、私はまだ下に与えます。



ランブラーから通りの温度を取得します。 選択は私のソウルメイトの好みによって決まります。



だから、「ラズベリー」ですべてのアクションをステップバイステップで:



ここで 、TP-Link TL-WN725N Wi-Fiアダプターで友達を作る方法読みます。



そしてここで -VNCサーバーのインストール方法が役立ちます。

ここでは 、サンバを育てる方法を明快に描いています。

統合されたUARTを使用する方法は次のとおりです。



以下は、NTPを使用して世界と時刻を同期するスクリプトです。

timesync.sh
#!/bin/bash sudo service ntp stop sleep 5 sudo ntpdate time.nist.gov time.windows.com sleep 5 sudo service ntp start
      
      









このスクリプトはRamblerから天気を読み取り、受信したデータをファイルに追加します

getweather.sh
 ##!/bin/bash URL="http://api.rambler.ru/weather/informer?content_type=xml" FILENAME=/home/pi/clock/weather.dat WEATHER=$(curl ${URL} | grep -o -E "(<now><temp>)[\+\-]?[0-9]{1,2}(<\/temp>)" | grep -o -E "[\+\-]?[0-9]{1,2}") if [ -z ${WEATHER} ] then echo "Get weather failed!" else echo -ne " " > ${FILENAME} echo -ne $(printf "%+03d" ${WEATHER}) >> ${FILENAME} fi
      
      









メインスクリプトは、UARTを介してデータを送信して表示します。

send.sh
 #!/bin/bash DATAPATH=/home/pi/clock/weather.dat declare -i LOW_BRIGHT=5 declare -i HIGH_BRIGHT=100 send_data () { DATA=$1 LEN=${#DATA} stty -F /dev/ttyAMA0 cs8 -cstopb raw speed 19200 > /dev/null for((i=0; i<$LEN; i++)); do ADDRESS=$(printf "%d" $(($i+1))) CHAR=$(printf "%d" ${DATA:$i:1}) if [ "$CHAR" = "0" ] then CHAR=32 fi HOUR=$(date | cut -c 12-13) if (("$HOUR" > "20")) || (("$HOUR" < "7")) then BRIGHTNESS=$(printf "%d" $LOW_BRIGHT) else BRIGHTNESS=$(printf "%d" $HIGH_BRIGHT) fi CHECKSUM=$((($ADDRESS+$CHAR+$BRIGHTNESS-1)%256)) if [ "$CHECKSUM" = "255" ] then CHECKSUM=254 fi ADDRESS=$(printf "%o" $ADDRESS) CHAR=$(printf "%o" $CHAR) BRIGHTNESS=$(printf "%o" $BRIGHTNESS) CHECKSUM=$(printf "%o" $CHECKSUM) MESSAGE="\0377\0$ADDRESS\0$CHAR\0$BRIGHTNESS\0$CHECKSUM" echo -ne "$MESSAGE$MESSAGE" > /dev/ttyAMA0 done } if [ "$1" = "time" ] then HOUR=$(date | cut -c 12-13) MINUTE=$(date | cut -c 15-16) TIME="${HOUR}${MINUTE}" send_data $TIME exit 0 fi if [ "$1" = "weather" ] then WEATHER=$(cat ${DATAPATH}) if [ -z ${WEATHER} ] then echo "No weather info found" exit 0 fi send_data "$WEATHER" exit 0 fi if [ "$1" = "startup" ] then send_data "HELO" sleep 5 send_data "HABR" sleep 5 send_data " " exit 0 fi echo "Usage: send.sh time | weather | startup" exit 0
      
      









はい。 2番目のポイントを点滅させます。

blink.sh
 #!/bin/bash sudo echo "25" > /sys/class/gpio/export sudo echo "out" > /sys/class/gpio/gpio25/direction while true do echo "1" > /sys/class/gpio/gpio25/value sleep 0.5 echo "0" > /sys/class/gpio/gpio25/value sleep 0.5 done
      
      









このすべての経済をcronに追加します:

 # mh dom mon dow command 0/15 * * * * /home/pi/clock/timesync.sh 0/15 * * * * /home/pi/clock/getweather.sh * * * * * sleep 00; /home/pi/clock/send.sh time * * * * * sleep 10; /home/pi/clock/send.sh weather * * * * * sleep 15; /home/pi/clock/send.sh time * * * * * sleep 25; /home/pi/clock/send.sh weather * * * * * sleep 30; /home/pi/clock/send.sh time * * * * * sleep 40; /home/pi/clock/send.sh weather * * * * * sleep 45; /home/pi/clock/send.sh time * * * * * sleep 55; /home/pi/clock/send.sh weather
      
      





そして...それだけです。 私たちは壁にぶら下がって、楽しんで、懐かしい。 プロセスの写真(クリック可能)と、Habrの住民への伝統的な挨拶を以下に示します。



注意! 生まれたとき、この記事の著者は、将来のエンジニアが必要としない芸術的な感覚を取り除いた。 満たされていない地平線、構図、その他のホワイトバランスを熟知している人は、深刻な精神的外傷を避けるために、この場所で読むのをやめてコメントにすぐに進んでください。





シャーシへのディスプレイボードの取り付け。 近くに電源ボードがあります。





錆びた裏表紙を塗ります。





組み立てられた形の最初の包含。 ボードにはアドレスが表示されます。





すべての要素はシャーシに取り付けられています。





より大きく、同じステージ。





ケースに詰めます。



そして-論理的な結論!





時間。





船外の温度。









すべての回路、プリント回路基板、およびファームウェアはここで見つけることができます



All Articles