ラベル 電子回路 の投稿を表示しています。 すべての投稿を表示
ラベル 電子回路 の投稿を表示しています。 すべての投稿を表示
2026/03/29

中国製PWM制御基板を使った格安パワーパック

概要

何番煎じかわかりませんが,SNSでよく見かける,中国製のPWM制御基板を使った格安パワーパックを作ってみました.

格安パワーパックの外観

レンタルレイアウトの天の川さんで実際に使ったことをきっかけに,作ってみることにしました.

最初に知ったのは,SHIGEMONさんのYouTube動画だった気がします.

PWM制御基板

中国製のPWM制御基板は,今回使用したもの以外にもバリエーションが存在します.ノーブランドで型番もないので,通販サイトの商品写真で判別して購入するしかないと思います. 今回使用するものは天の川さんやSHIGEMONさんが使用されているものと恐らく同一で,赤色のプリント基板にON/OFFスイッチと一体になった可変抵抗が実装されているものです. PWM波形はオーソドックスに555 タイマーICで生成しているようです. Amazon.co.jpやAliExpressで1個あたり200円程度で購入できます.

PWM制御基板の出力波形

オシロスコープでPWM制御基板の出力波形を測定しました.スイッチング周波数は19.5kHzで,可聴域の上限付近です.モータから耳障りな音が聞こえる心配もないでしょう.

PWM制御基板の出力波形

部品表

手持ち部品も使いましたし,実店舗で購入したものもあるため,リンク先の商品は参考とお考えください.

方向転換用のスイッチにはロータリースイッチを採用しています.2回路3接点かつノンショーティングのものを用意してください. しかし,SR2511-0203はAitendoの通販サイトでは取り扱いがないようです. 代替としては4回路3接点のSR2511-0403かCosland Co,. Ltd. RS-2688-0403-38Nが使用可能だと考えられます. なお,ロータリースイッチの定格電流は0.3Aや0.5Aで,パワーパックの出力に対してやや不足しています.今回は操作性重視で目をつむっています.

速度調整用ツマミはお好みでご購入ください.PWM制御基板に小型ツマミが付属しているため購入しなくても大丈夫ですが,大型ツマミに交換すると軽い力で操作できて便利です.

ポリスイッチのRXEF050は秋月電子通商での取り扱いが終了しているため,MF-R050などに置き換えてください.

ピンヘッダー 1x2 (2P)はパワーパックの出力をTOMIX D.C.フィーダーNに接続するために使用します. 純正の延長コードを切って使うこともできますが,今回は手元にある線材,ピンヘッダおよび熱収縮チューブで自作しました. 線材の先にピンヘッダをハンダ付けし,熱収縮チューブで絶縁をしました. この線はケースに空けた穴から外に出しています.ケースの穴にはケーブルブッシュをつけて配線を保護していますが,プラスチックケースなので省略しても大丈夫でしょう.

KATO 走行用フィーダーに接続したい場合は,以前の記事「blog 渓鉄: DSairLiteを購入しました」も参照してください.

番号 部品名 型番 数量 参考単価
- ロータリースイッチ, ノンショーティング, 2回路3接点 SR2511-0203 1 120円
- ロータリースイッチ用ツマミ KN-8 1 40円
- 速度調整用ツマミ KN4017A シルバー 1 90円
- ポリスイッチ 定格電流: 500mA, トリップ電流: 1A, 耐圧:72V Littelfuse, Inc./Tyco Electronics Corporation/Raychem RXEF050 1 30円
- 超小型スイッチングACアダプター XIAMEN UME ELECTRONICS CO.,LTD. 12V1A AD-K120P100 1 800円
- 2.1mm標準DCジャック パネル取付用 4UCON TECHNOLOGY INC. 22234 1 60円
- ピンヘッダー 1x2 (2P) Useconn Electronics Ltd. PH-1X2SG 1 20円
- ケーブルブッシュ Kang Yang Hardware Enterprises Co., Ltd. GM-71 1 20円
- ケース プチプラケース M 1 110円
- ゴム足 タカチ電機工業 SJ-P型 ゴム足 10個入り SJ-P1004 1 417円
- 線材 AWG22相当 - -
- 熱収縮チューブ 各種 - -
- 結束バンド - - -

組み立て

プラスチックケースに穴を空けてPWM制御基板,ロータリースイッチやDCジャックを取り付けます.配線は下図を参考にしてください.プラスチックケースを誤って融かさないように,ロータリースイッチは一度ケースから取り外してハンダ付けするのが良いでしょう.

格安パワーパックの内部配線
2022/07/13

Raspberry Piに接続したLEDをPython CGIスクリプトでブラウザから制御する

概要

Raspberry Pi 3 Model B+に接続したLEDをPython CGIスクリプトでブラウザから制御してみました.

右側の画面がブラウザのウィンドウキャプチャです.ブラウザ上のボタンやテキストボックスを操作すると,LEDの点滅が変化していることがわかります.

開発環境

Raspberry Pi Raspberry Pi 3 Model B+
OS Raspbian GNU/Linux 10 (buster)

回路

回路図

回路図のとおりに,Raspberry PiとLEDを接続してください.

Raspberry Piのピン配置については,公式Webページを参照してください.

LEDのアノード側を3.3V PWRピンに,カソード側をGPIO17ピンに接続しています.電流制限用の抵抗も忘れないようにしてください.

回路部品

参考単価をクリックすると,秋月電子通商のページに飛びます.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円 (互換品)
LED1 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHubにて公開します.ページ右上付近の「Code」ボタンからダウンロードするかgit cloneしてください.

下記のようにgit cloneします.

セットアップ

README.mdの「Setup - Software」を参照してください. 予めPython仮想環境を構築する準備をしておくと,既存Pythonスクリプトの実行環境を破壊することなくセットアップできて便利です.ここでは,pyenv-virtualenvを使用しています.

下記のように依存ライブラリをインストールします.

実行

README.mdの「Usage」を参照してください.

下記のように実行します.終了する際は,Ctrl + cキーを押下してください.

Raspberry Piと同じLANに接続しているPCやスマートフォンのブラウザから,サーバにアクセスします. Raspberry PiのIPアドレスが192.168.0.3の場合は,http://192.168.0.3:5000/にアクセスしてください.

ブラウザからLEDを制御することができるようになりました.

製品紹介

2022/05/17

Raspberry Pi + BME280で計測した温度,湿度,気圧をAmbientに送信してグラフ表示させる

概要

Raspberry Pi Zero WHと温湿度・気圧センサのBME280を使用して,自室の温度,湿度および気圧を測定結果をグラフ表示する仕組みを作成しました. 測定結果の保存とグラフ表示には,IoTデーター可視化サービスのAmbientを使用しました. Pythonスクリプトにより,一定周期でセンサからのデータ取得とAmbientへのデータ送信を自動実行させています.

Ambientでのグラフ表示例

Raspberry Piから送信されてきた自室の温度,湿度および気圧をAmbientでグラフ表示した例です. インターネットに接続されたPCやスマートフォンのブラウザで表示することができます.

Ambientでのグラフ表示例

開発環境

Raspberry Pi Raspberry Pi Zero WH
OS Raspbian GNU/Linux 9.11 (stretch)

回路

回路図

回路図のとおりに,Raspberry Piと温湿度・気圧センサモジュールを接続してください.

Raspberry Piのピン配置については,公式Webページを参照してください.

温湿度・気圧センサモジュールのピン配置については,取扱説明書を参照してください.今回はI2Cで接続しています. 温湿度・気圧センサモジュール上にはJ1からJ3までの計3つのジャンパがありますが,全てオープンで使用しています. ただし,J3をショートしない代わりに温湿度・気圧センサモジュールの外でCSBとVDDを接続しています. また,SDOをGNDに落としているのでBME280のI2Cアドレスはデフォルトの0x76です.

回路図

回路部品

参考単価をクリックすると,秋月電子通商のページに飛びます.

番号 部品名 型番 数量 参考単価
U1 温湿度・気圧センサモジュール 秋月電子通商 BME280使用 温湿度・気圧センサモジュールキット 1 1250円
その他 リード線など 適量

ソースコード

GitHubにて公開します.ページ右上付近の「Code」ボタンからダウンロードするかgit cloneしてください.

セットアップ

README.mdの「Example installation in pyenv environment」を参照してください. 予めPython仮想環境を構築する準備をしておくと,既存Pythonスクリプトの実行環境を破壊することなくセットアップできて便利です.ここでは,pyenv-virtualenvを使用しています. また,AmbientのチャネルIDとライトキーが必要になります.Ambientのチュートリアルなどを参照して,準備してください.

定期的にセンサデータをAmbientに送信する

セットアップと動作確認が終わったら,定期的にセンサデータをAmbientに送信するように設定します. README.mdの「Example installation in pyenv environment」の「4. (Optional) Edit cron for periodic execution」を参照してください. 単純にcronでPythonスクリプトを5分間隔で実行しているだけです.ただし,「2-57/5 * * * *」とすることで毎時0分からの5分間隔ではなく毎時2分からの5分間隔としています. これは,毎時0分などに定期的なタスクが集中することを避けるためです.この辺りはお好みで調整してください.

製品紹介

2022/05/14

シリコンハウス共立の自動販売機でジャンクボックスを買ってみました

シリコンハウス共立の自動販売機

大阪日本橋の電子部品専門店,シリコンハウス共立の1階入口の横には電子部品やガジェットグッズが24時間購入できる自動販売機が設置されています. 2022年のゴールデンウィーク中に訪問したとき,200円のジャンクボックスがあったので試しに購入してみました.

シリコンハウス共立のジャンクボックス

ジャンクボックス

自動販売機の商品のラインナップは入れ替わりがあるものと考えられますが,訪問したときは「ジャンクボックス 200円」としてサンプルが陳列されていました. 「お楽しみBOX!」「中身は秘密だよ!」ということで,中身はランダムです.

シリコンハウス共立の自動販売機

あくまでサンプルからの判断ですが,比較的単価が高そうな電子部品としては下記のようなものが入っている可能性もあるようです.

  • ドットマトリクスLED
  • 7セグメントLED
  • トランジスタ,FET
  • トグルスイッチ
  • 丸ピンIC用連結ソケット
  • コネクタ

買ってみました

結論から言えば,私にはミスマッチな商品でした. この中身であれば,私の場合は3階のデジットでバラ売りのジャンクを品定めした方が良いなと感じました.

自動販売機に200円投入してボタンを押すと,タバコ箱程度の大きさ (90mm x 56mm x 23mm)の紙箱が落ちてきました.本記事1枚目の写真が開封した状態です. 紙箱なので中身は開封しないとわかりませんが,すぐに開封することはおすすめできません. 紙箱に電子部品が直接詰められているため,下手に開封すると中身を散らかしてしまうかもしれません. 私は帰宅後に開封したので回避できました.

中身を表にまとめました.ほとんどがコンデンサで,半導体部品はプリント基板に実装済みの砲弾型LEDが1個のみです. 200円相当の部品が詰められているとは正直感じ難く,私にとってはなかなか使い切るのが難しい部品が多いという結果でした.

部品名 型番 数量
小型金属皮膜抵抗 24kΩ 20
電解コンデンサ ELNA 16V 470uF 1
電解コンデンサ Rubycon 160V 47uF 1
ポイント点火用コンデンサ 三菱 0.5uF 1
セラミックコンデンサ 472M (大) 1
セラミックコンデンサ 472M (小) 4
セラミックコンデンサ 471K 5
セラミックコンデンサ 470pF 6
セラミックコンデンサ 200pF 1
セラミックコンデンサ 56pF 1
セラミックコンデンサ 27pF 2
セラミックコンデンサ 18pF 1
セラミックコンデンサ 15pF 5
セラミックコンデンサ 12pF 1
セラミックコンデンサ 3pF 2
セラミックコンデンサ 2pF 1
セラミックコンデンサ 1.5pF?,劣化や印字カスレで判別困難な個体あり 13
セラミックコンデンサ? 印字「10F TDK」 1
フィルムコンデンサ 184K 1
フィルムコンデンサ 50V, 0.027uF 1
フィルムコンデンサ 153J 1
フィルムコンデンサ 223K 1
フィルムコンデンサ 272J 1
フィルムコンデンサ 562K 3
フィルムコンデンサ 683J 1
RCAプラグ 1
プリント基板 5mm 砲弾型LED x1,金属皮膜抵抗 x1 1
2022/04/06

Digisparkでマクロパッドを作った: オンライン会議向けのマイクミュートやカメラのON/OFF操作デバイス

概要

Digispark互換ボードを使用してマクロパッドを作成しました. このマクロパッドはPCにはUSBキーボードとして認識され,各タクトスイッチを押下すると,プログラムで予め設定したキーボード操作がPCに対して実行されます.タクトスイッチは2つしかありませんが,短押しと長押しの使い分けも可能です. 例えばZoomやMicrosoft Teamsなどのオンライン会議アプリケーションのショートカットキーを設定しておけば,ワンタッチでマイクのミュートをON/OFFすることができます.

Digisparkで作成したマクロパッド (電源ON時)

PCにUSBケーブルで接続するとDigispark上の電源確認用の赤色LEDとP1に接続された赤色LEDおよび,P1に外付けした青色LEDが点灯します. P1に接続されたLEDは,ゆっくりと輝度を変化させながら点滅します.

Digisparkで作成したマクロパッド (電源OFF時)

開発環境

DigisparkはAttiny85を搭載した小型マイコンボードです. USBによるプログラム転送および通信が可能です. Arduino IDEを使用して開発できます. 今回は数年前にAitendoで処分価格で販売されていたDigispark互換ボードを使用しました.

Digispark ATTiny85マイコンモジュール [M8520SU-MCUM]
Arduino IDE Arduino 1.8.19
Arduino Boards Manager Digistump AVR Boards: Digispark (Default - 16.5mhz)
Arduino Library: FastLED Version 3.5.0
Arduino Library: OneButton Version 2.0.4

Digisparkのセットアップは下記を参照してください.

UbuntuでDigisparkを認識しない場合は,下記を参照してください.

回路

回路図

部品点数は非常に少ないです. Digisparkのピン配置については,公式Webページを参照してください.

回路図

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
SW1, SW2 タクトスイッチ 各社 2 30円 (互換品)
LED1 LED 各社 青色 1 18円 (互換品)
R1 炭素皮膜抵抗 各社 1/4W 1kΩ 1 1円 (互換品)
その他 ユニバーサル基板, スズメッキ線など 適量

作成例

マクロパッドの基板

エンクロージャ

エンクロージャ(ケース)は,作成した基板に合わせて3Dプリンタで出力しました. モデリング環境は下表のとおりです.ソフトウェアは全てフリーウェアです. FreeCADでモデリングしたものをSTLでエクスポートし,Ultimaker CuraでスライスしてGコードを生成しています.

OS Ubuntu 20.04.4 LTS
FreeCAD 0.18.4
Ultimaker Cura 4.11.0
FreeCADによるマクロパッドのエンクロージャのモデリング

ソースコード

オリジナルソースコード

GitHub Gistにて公開されている下記のソースコードを改変して使用しました.Zoomのミュートボタンとして使用するためのキーボード操作が設定されています.

なお,Zoomのショートカットキー一覧は下記で確認できます.

タクトスイッチに割り当てるキーボード操作のカスタマイズ

私はMicrosoft Teamsで使用したかったため,下記を参照してキーボード操作の設定を変更しました.

ほとんどのキーはDigiKeyboardライブラリに定義されていますが,定義されていないキーもあります.定義がない場合は,下記資料のTable 12: Keyboard/Keypad Pageを参照して定義する必要があります.

Microsoft Teams向けに改変したソースコードは下記です.1つのタクトスイッチはマイクミュートのON/OFF操作,もう1つのタクトスイッチはカメラのON/OFF操作に割り当てました.

オンライン会議アプリケーションのほかにも,さまざまなアプリケーションのショートカットキーに割り当てることが可能です.例えば,下記のプラグインと組み合わせることでGoogle Chromeのタブのミュート操作もできました.

2022/02/02

ドットマトリクス液晶表示モジュール SII L167100J

概要

手元にセイコーインスツル株式会社 (Seiko Instruments, SII)のドットマトリクス液晶表示モジュール L167100Jがあります.いわゆるキャラクタ液晶表示モジュールの1種です. しかし,既にこれらのドットマトリクス液晶表示モジュールは終息しており,公式Webページからはデータシートをダウンロードできませんでした. 備忘録として,他のサイトから入手できた情報とデータシートについて記録しておきます.

データシート

下記の海外サイトで閲覧できました.ページタイトルにあるL1634は16文字x4行仕様で,私の手元にあるL1671は16文字x1行仕様です. またL1671などの5文字に続く3文字はLEDバックライトの有無を示し,00Jは反射型でLEDバックライトなし,B1Jは半透過型でイエローグリーンのLEDバックライト付です. これらは同じデータシートにまとめられています.

表示文字数 (文字数 x 行) 型名
16 x 1 L1671
16 x 2 L1672
16 x 2 L1682
16 x 2 L1692
16 x 4 L1634
20 x 2 L2032
20 x 4 L2034
24 x 2 L2462
40 x 2 L4052
40 x 4 L4044

SII ドットマトリクス液晶表示モジュールの終息経緯

SII ドットマトリクス液晶表示モジュールの終息経緯については,株式会社アスカ電子の資料が引っかかりました. SIIとしては2006年8月に最終製造だったようです.その後の事業移管などの流れについても記載されていますので,興味がある方はご覧ください. 2ページ目と3ページ目に仕様の一覧表もあります.

製品紹介

2022/01/31

Arduino: スイッチ押下4回目でLEDを点灯させて,押下5回目でLEDを消灯させる

概要

Arduinoに接続されたタクトスイッチ(ボタンスイッチ)が4回押下されたときにLEDを点灯させて,さらにもう1回,合計5回押下されたときにLEDを消灯させて初期状態に戻るという処理を繰り返すプログラムを紹介します. ボタンスイッチの押下判定方法などの参考になれば幸いです.

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン2番にボタンスイッチを接続してください.なお,ボタンスイッチはActive Lowとしています.つまり押しているときはLOW,離しているときはHIGHです. デジタルピン12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. LEDをHIGH出力で点灯,LOW出力で消灯にしたい場合は,ソースコードの19行目と20行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路図

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円 (互換品)
SW1 ボタンスイッチ 各社 1 10円 (互換品)
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円 (互換品)
LED1 LED 各社 赤色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

簡単にソースコードを説明します.

タクトスイッチについては20ミリ秒周期(INTERVAL_TIME)状態(sw_val[SW_VAL_CURR])を取得し,前回の状態(sw_val[SW_VAL_PREV])も使用して状態が変化したことを検出します

タクトスイッチの押下回数(sw_count)が4回になったとき,LEDを点灯します.

タクトスイッチの押下回数(sw_count)が5回以上になったとき,LEDを消灯します.

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

2022/01/27

Arduino: タクトスイッチ押下を外部割込みで検出し,LEDの点滅方向を切り替える

概要

Arduinoに4個のLEDを接続し,このうち1個のみを順番に点灯させます. LEDの点灯順序は左方向または右方向で,タクトスイッチを押下することで方向が切り替わります. タクトスイッチの押下は,立ち下がりエッジで外部割込みを発生させて検出します.

初期点灯順序 右方向
点滅周期 [ミリ秒] 1000

デモ

先に実行例をどうぞ. LEDは左から順に,ソースコード上のLED4,LED3,LED2,LED1です. 黒色のタクトスイッチがSW_PINに接続されています.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン9番, 10番, 11番および12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. 逆にしたい場合は,ソースコードの82行目の定義の0と1を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路図

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円 (互換品)
SW1 タクトスイッチ 各社 1 10円 (互換品)
R2, R3, R4, R5 炭素皮膜抵抗 各社 1/4W 330Ω 4 1円 (互換品)
LED1, LED2, LED3, LED4 LED 各社 赤色 4 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

簡単にソースコードを説明します.

  • 38行目の関数はタクトスイッチ押下による外部割込み発生時に実行され,LEDの点滅方向を切り替えます.チャタリング対策として外部割込み処理の前回実行時刻を変数sw_prev_timeに格納しておき,その時刻から変数sw_ineffective_time以上の時間が経過していた場合のみにLEDの点滅方向が切り替わります
  • 61行目はLEDの点滅状態を更新する関数です.変数ledsの下位4bitがLEDが接続されたデジタルピンの状態を示しており,この状態をdigitalWrite()関数で各デジタルピンに反映しています
  • 74行目が外部割込み処理の設定です.詳細は,公式Webページを参照してください.第1引数はINT.0,デジタルピン2番を示します.第2引数では割込み発生時に実行する関数を指定します.第3引数は割込み発生のトリガーを指定するもので,今回は立ち下がりエッジです

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

2021/12/02

Arduino: 複数のLEDを別々の周期やON/OFF比で点滅させる

概要

Arduinoに複数のLEDを接続したとき,LED毎に異なる周期で点滅させる方法です. また,この方法では点灯時間と消灯時間も個別に設定することが可能です.

実行例で使用しているソースコードでは,3つのLEDを下記のような設定で点滅させています.

番号 発光色 周期 [ミリ秒] 点灯時間 [ミリ秒] 消灯時間 [ミリ秒]
LED1 2000 1000 1000
LED2 1000 800 200
LED3 2000 500 1500

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン10番, 11番および12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. 逆にしたい場合は,ソースコードの14行目と15行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1, R2, R3 炭素皮膜抵抗 各社 1/4W 330Ω 3 1円 (互換品)
LED1 LED 各社 赤色 1 10円 (互換品)
LED2 LED 各社 橙色 1 20円 (互換品)
LED3 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

簡単にソースコードを説明します.

  • 17行目からLED点滅クラスを定義しています.このクラスで,各LEDの接続ピン,点灯時間,消灯時間,点灯状態および前回に点灯状態が変化した時刻を管理します
  • 58行目からはLED点滅クラスのコンストラクタです.各メンバ変数を設定し,LEDを消灯状態に初期化します.このときの時刻をmillis()で取得してm_prev_timeに保存します
  • 72行目からはLED点滅クラスの点灯状態を更新するメソッドです.millis()で取得した現在の時刻と前回に点灯状態が変化した時刻m_prev_timeの差分が点灯時間m_on_timeもしくは消灯時間m_off_timeを超過しているとき,点灯状態を更新します.
  • 108行目からのセットアップ関数で行う処理はありません
  • 115行目からのループ関数では,120行目付近で各LEDのインスタンスを作成しています.これらはstatic変数なのでプログラムの終了まで保持されます.126行目付近でupdate()メソッドを実行しており,毎ループでLEDの点灯状態を更新しています

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

2021/12/01

Arduino: タクトスイッチが押されたらLEDを5回点滅させる

概要

Arduinoに接続されたタクトスイッチ(ボタンスイッチ)が押下されたとき,LEDを5回点滅させてその後は再びボタンスイッチが押下されるまで消灯状態を維持するプログラムを紹介します. ボタンスイッチの押下判定方法や一定回数同じ処理を繰り返す方法の参考になれば幸いです.

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン2番にボタンスイッチを接続してください.なお,ボタンスイッチはActive Lowとしています.つまり押しているときはLOW,離しているときはHIGHです. デジタルピン12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. LEDをHIGH出力で点灯,LOW出力で消灯にしたい場合は,ソースコードの14行目と15行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円 (互換品)
SW1 ボタンスイッチ 各社 1 10円 (互換品)
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円 (互換品)
LED1 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

実行例で使用しているソースコードでは,LEDを下記のような設定で点滅させています.

番号 発光色 周期 [ミリ秒] 点灯時間 [ミリ秒] 消灯時間 [ミリ秒] 点滅回数 [回]
LED1 1000 500 500 5

簡単にソースコードを説明します.

ボタンスイッチについては20ミリ秒周期(INTERVAL_TIME)状態(btn_val)を確認し,2回連続(BTN_COUNT_THRESH)で同じ状態(btn->last_val)だった場合その状態をボタンスイッチの状態(btn->state)としています. これはボタンスイッチのチャタリングによる誤動作を低減するための処理です.

LEDの点滅状態を列挙型で表現しています(LED_BLINK_STATE_E)現在のLEDの点滅状態(led_blinking_state)によって処理を切り替えています初期のLEDの点滅状態はLED_STOP_OFFです. LEDが点滅停止中の場合,つまりled_blinking_stateがLED_STOP_OFFの場合は,led_blinking_startがtrueになるまで状態遷移しません. LEDが点滅中の場合,つまりled_blinking_stateがLED_BLINK_ONもしくはLED_BLINK_OFFの場合は,led_blinking_periodがインクリメントされます.これは何周期同じ点滅状態に留まっているかを示しています.1周期は20ミリ秒周期(INTERVAL_TIME)です. led_blinking_periodが25(LED_BRINK_PERIOD)を超過したとき,つまり20ミリ秒 x 25 = 500ミリ秒を超過したときに状態遷移が発生します. LED_BLINK_ONの場合はLED_BLINK_OFFに遷移します. LED_BLINK_OFFの場合は,LEDの点滅回数(led_blinking_count)がインクリメントされます. led_blinking_countが5(LED_BRINK_COUNT)を超過したとき,LEDの点滅は終了してLED_STOP_OFFに遷移します.それ以外の場合はED_BLINK_ONに遷移します.

セットアップ関数ではボタンスイッチとLEDの初期化を行い,周期実行用の変数に初期値を代入します.

ループ関数では,233行目で現在の時刻を取得しています.現在の時刻と前回に周期実行を行ったときの時刻との差分がinterval_timeを超過した場合は,周期実行を行います.ボタンスイッチの状態を確認し,ボタンスイッチが押下されている場合LEDの点滅を開始します

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

2021/10/14

Processing & Arduino: マウスのクリックでLEDの点滅を切り替える

概要

ProcessingとArduinoの組み合わせ例として,マウスのクリックでLEDを点灯したり消灯したりする方法を紹介します.

デモ

先に実行例をどうぞ. 動画内でArduino UNO R3互換ボードの一部を黒いビニルテープで隠していますが,この下にはシリアル通信時に点滅するLEDが搭載されています. プログラムで点滅させているLEDと紛らわしいためです.

開発環境

PC (Processing)側のOSはUbuntuなのですが,Windowsでも動作すると思います.未確認です.

OS Ubuntu 20.04 LTS
Processing Processing 3.5.4 Linux 64-bit
Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

今回はArduino UNOのBuilt-in LEDを使用しましたので,追加の回路は必要ありません. Arduino UNOの仕様については下記を参照してください.

ソースコード

GitHub Gistにて公開します.

製品紹介

2021/09/30

Arduino: ボタンスイッチでサーボモータの角度を切り替える

概要

Arduinoによるサーボモータの制御例を紹介します. ボタンスイッチを押下すると,サーボモータの角度が0度または180度に交互に切り替わります.

デモ

先に実行例をどうぞ. 動画内ではArduino IDEのシリアルモニタの代わりにTera Termを使用していますが,もちろんシリアルモニタでも大丈夫です.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン2番にボタンスイッチを接続し,デジタルピン11番にサーボモータの制御信号を接続してください. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円 (互換品)
SW1 ボタンスイッチ 各社 1 10円 (互換品)
M1 サーボモータ SANWA SRM-102Z 1 5500円
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

製品紹介

サーボモータは安価に入手できるものもありますので,用途に応じて選択してください.

2021/09/28

Arduinoに接続したLEDをWindows PCのC#アプリからシリアル通信で制御する

概要

Windows PC上のGUIアプリのボタン操作により,Arduinoに接続されたLEDの点灯を制御する例を紹介します. GUIアプリはVisual Studioを使用してC#で,ArduinoのプログラムはArduino IDEを使用して作成しました.

デモ

先に実行例をどうぞ.

開発環境

OS Windows 10 Pro 20H2
Visual Studio Microsoft Visual Studio Community 2017
Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン3本にそれぞれにLEDを接続するだけです. LEDはアノード側を電流制限抵抗を挟んで+5Vに,カソード側をデジタルピンに接続してください. したがって,LEDはHIGHを出力すると消灯,LOWを出力すると点灯します. これを逆にしたい場合は,Arduino側のソースコードを変更する必要があります. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R0, R1, R2 炭素皮膜抵抗 各社 1/4W 330Ω 3 1円 (互換品)
LED0 LED 各社 緑色 1 10円 (互換品)
LED1, LED2 LED 各社 赤色 2 5円 (互換品)
その他 リード線など 適量

ソースコード

GitHubにて公開します.ページ右上付近の「Code」ボタンからダウンロードしてください.Arduinoのスケッチはarduinoフォルダ配下に,Visual Studioプロジェクトはwindowsフォルダ配下にあります.

製品紹介

2021/05/10

PetaLinux 2020.2のDockerイメージを作成する

概要

私はPetaLinuxをDocker上で使用しています.ググると同じように環境構築されている方も多いようですね. GitHubで必要なファイル一式を公開していますので,ここにDockerイメージの作成方法をメモしておきます. 私はチュートリアルに毛が生えた程度しかPetaLinuxを触りませんので,もし不具合がありましたらissueでお知らせいただけると助かります. 私は,Dockerホスト環境としてUbuntu 16.04とUbuntu 20.04を使用しています.

準備

SSDまたはHDDの空き容量を15GB程度は準備しておいてください.作成するDockerイメージは10GB程度のサイズになります. 予め,XilinxのWebサイトからPetaLinuxのインストーラをダウンロードしておきます. ここではダウンロードディレクトリを/data1/Software/Xilinxとし,PetaLinux 2020.2をインストールすることにします.

ダウンロードしたファイルは下記のパスとします.

  • /data1/Software/Xilinx/petalinux-v2020.2-final-installer.run

GitHubからファイル一式を取得します. ここではgit clone先のディレクトリ名をpetalinux-baseとしていますが,未指定で既定のままでも問題ありません.

git cloneしたディレクトリに移動します.

docker build

PetaLinuxをインストールするベースとなるDockerイメージ,keitetsu/petalinux:ubuntu16.04-baseをビルドします.

PetaLinuxのインストール

ビルドしたDockerイメージを起動し,手動でPetaLinuxをインストールします. テキストエディタでrun_base.shを開き,--volumeオプションの/data1/Software/Xilinxの部分をpetalinux-v2020.2-final-installer.runを格納したディレクトリに書き換えます. このディレクトリは,Dockerコンテナ上では/dataとしてマウントされます.

PetaLinuxはrootではなく一般ユーザでインストールする必要があります. このため,Dockerホスト上のユーザのUIDとGIDを使ってDockerコンテナ起動時にユーザが作成されます. 任意のUIDとGIDを使用したい場合は,run_base.shで指定してください. これらの処理は,entrypoint.shに記載しています.

run_base.shを実行します.

通常通りPetaLinuxのインストールを進めてください.ただし,インストールディレクトリは/opt/Xilinx/PetaLinuxとしてください. このディレクトリはDockerイメージ上に予め用意されています.

インストーラを実行すると,ライセンスに同意するかどうかの入力が求められます. ライセンス文書が表示されたら'q'キーで閉じ,'y'を入力して同意します.3項目に同意が必要です.

インストールが完了してプロンプトが返ってきたら,Dockerホスト側で,今までDockerコンテナを操作していたものとは別の端末を開きます. docker psコマンドで,keitetsu/petalinux:ubuntu16.04-baseのコンテナIDを確認します.

DockerコンテナをDockerイメージとして保存します.${CONTAINER_ID}には,先ほど確認したコンテナIDを入れてください.

これでDockerイメージを作成できました. PetaLinuxをインストールするために起動したDockerコンテナはexitで終了してください.

使用方法

作成したDockerイメージを起動するためのシェルスクリプトは,run_base.shを改変して作成します.ここではrun.shとして保存します. /workspaceには,Dockerホスト上のPetaLinuxプロジェクトを格納するディレクトリを指定してください.

run.shを起動すると,下記のようにDockerコンテナが起動してPetaLinuxでの開発準備が整います.

Vitis, VivadoのDockerイメージ

VitisとVivadoの開発環境も同様にDocker上に作成することができます.私のファイル一式は上記です. こちらはまだ手順を書くことができていないのですが,PetaLinuxと同様に,下記の要領で作成します.また手順を書きたいと思います.

  1. ベースのDockerイメージをbuild/build.shでビルド
  2. run_base/run_base.shでDockerコンテナを起動
  3. install/installを参考にVitisをバッチモードでインストール
  4. install_xrt_bdf/build.shでXRTとサードパーティのbdfをインストール
  5. docker commit
  6. run/run.shでDockerコンテナを起動
2021/04/27

How to dump device tree from NAND flash to get dts (Zynq-7000)

In this article, I will dump the original device tree of the Zynq EBAZ4205 Board.

Since the Zynq EBAZ4205 Board is not a development board, the design information is not provided by the manufacturer. You need to get the necessary information yourself.

From the device tree source text (dts) file converted from the dumped device tree blob (dtb) file, you can get reference information when developing a custom Linux image using Vivado and PetaLinux.

Prepare

Insert the microSD card into the Zynq EBAZ4205 Board. This microSD card is used to transfer the dumped dtb file to the PC.

If you can use Ethernet, you can transfer the file by other methods.

Dump

Boot original Linux from the NAND flash on the Zynq EBAZ4205 Board.

Make sure the microSD card is mounted.

Execute the following command to dump the device tree from the NAND flash and save it as dtb file on the microSD card.

Convert

Copy the dtb file from the microSD card to your PC.

Convert dtb file to dts file. Use the device tree compiler (dtc) command for this conversion.

For Ubuntu, you can install it with the following command.

Execute the dtc command.

Now you have a dts file.

Tips

One of the information that can be obtained from the dts file is the NAND flash timing parameters and existing partition information.

For example, in the dts file, it was described as follows.

For the timing parameters nand-cycle-t0 to nand-cycle-t6, refer to the Xilinx Wiki.

If you are developing a custom Linux image using Vivado and PetaLinux, set these parameters in Vivado. At this time, you should also check the NAND flash data sheet.

Note: The parameters in the screenshot are examples and have not been tested.

Partition information can be set in PetaLinux.

This information is reflected in the device tree automatically generated by PetaLinux. The device tree is generated in the following directory when you run the petalinux-build command.

  • /components/plnx_workspace/device-tree/device-tree

My Vivado design and PetaLinux project are available on GitHub.

If there are any mistakes in the description, please let me know.

2021/04/23

Solves the warning when loading the U-Boot environment (Zynq-7000, PetaLinux 2020.2)

I have built a boot image for the Zynq EBAZ4205 Board with Xilinx PetaLinux 2020.2. Linux was able to boot normally, but the following warning was displayed when U-Boot was booted.

The Zynq EBAZ4205 Board does not have SPI Flash. In order to solve this warning, it was necessary to change the U-Boot configurations.

Open the U-Boot configuration with the following command.

Enable "Environment is not stored".

Environment-> Environment is not stored

Disable "Environment is in SPI flash".

Environment-> Environment is in SPI flash

Exit from the U-Boot configuration and rebuild the U-Boot.

The following 2 lines are added to the U-Boot settings.

An example of the PetaLinux project can be found below.

2021/02/06

CISCO互換ケーブルのピンアサイン

Cisco互換ケーブル (コンソールケーブル)

不要なLANケーブルを流用して,Cisco互換ケーブルを自作した.ピンアサインの参考にしたページをメモしておく. Cisco互換ケーブルと言っているのは,Cisco機器の設定などの際にCisco機器とPCを接続するために使用するケーブルのこと.コンソールケーブルとも呼ぶ. Cisco機器側が一般的なLANケーブルと同じRJ45,PC側がD-sub 9ピンコネクタである.PC側がUSB (USBシリアル変換IC内蔵)になっているものもある. Cisco以外のメーカーのネットワーク機器などにも広く採用されている.

既成品例とピンアサインの参考資料

下記の富士通のWebページに,既成品例とピンアサインが掲載されている.

既成品例の1つがパナソニックLSネットワークスのPN72001で,製品ページに商品図面が掲載されている.ピンアサインはこの図面がわかりやすく,一番参考になった.

2016/10/23

Raspberry PiでLチカ(GPIO Sysfs Interface, Bashスクリプト)

概要

Raspberry PiでLチカさせるBashスクリプトを公開します. 2つのLEDを交互に点滅させてみました. GPIO制御処理はシェル関数にして別ファイルに記述してみましたので,流用開発も比較的容易だと思います.


実行例
回路
ブレッドボードビュー

下図を参考にして,3.3VとGPIO 21との間および,3.3VとGPIO 26との間にLEDと330Ω抵抗を接続してください. LEDの極性に注意してください. アノードを3.3Vに,カソードを330Ω抵抗を介してGPIOポートに接続します. したがって,LEDの点灯論理はGPIOがHigh出力(3.3V)のとき消灯し,Low出力(0V)のとき点灯する負論理(Active Low)となります.


ブレッドボードビュー
回路部品

下表は参考部品表です. 参考単価をクリックすると,部品の販売サイトに飛びます. ただし,ここで紹介した参考部品について,私が互換性および動作を確認したわけではありません. ご注意ください.

番号 部品名 型番 数量 参考単価
ブレッドボード CIXI WANJIE ELECTRONICS
BB-801
1 200円
LED1 LED 三洋半導体 SLP-9118C-51H 1 5円
LED2 LED 三洋半導体 SLP3118C-51H-T1 1 5円
R1, R2 炭素皮膜抵抗 各社 1/4W 330Ω 2 1円
ジャンパーコード ジャンパーコード(オス-メス) 3 22円
ジャンパーコード ジャンパーコード(オス-オス) 1 9円
プログラム
動作確認環境

追加インストールが必要なライブラリはありません.

Raspberry Pi Raspberry Pi3 Model B (Element14)
Raspbian Raspbian Jessie 2016-05-27
ソースコード

GitHubにて公開します.セットアップ方法や実行方法もGitHubに記載しています.

製品紹介