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/31

Synology NASのGitLabでGitLab Pagesを有効化する

概要

SynologyのNASには,GitLabを動作させることができるモデルがあります. 既定ではGitLab Pagesは無効になっていますが,環境変数を設定することで有効にすることができます. 本記事では,この環境変数の設定例を紹介します.

開発環境

製品型番 DS918+
DSM 6.2.4-25556 Update 2
GitLab Version: 13.12.2-0073

前提条件

GitLabは,下記のように http://hogehoge.internal:30000/ でログインできるようにGitLabの環境変数とDNSサーバを設定済みとします.

可変
GITLAB_HOST hogehoge.internal
GITLAB_PORT 30000

設定方法

Gitlab Pages Access Control用の情報を取得する

下記リンクの説明を参照して,GitLabの管理者エリア > アプリケーションで設定を行います.

DNSサーバの設定を変更する

GitLab Pages用にAリソースレコードおよびAAAAリソースレコードを追加します.

名前 情報
名前 *.pages.hogehoge.internal.
情報 Synology NASのIPアドレス

GitLabを停止させる

環境変数を変更するので,GitLabを一時停止します.DSM上でGitLabはDockerコンテナとして動作しています. GitLabのDockerコンテナはDockerのUIからも停止できますが,GitLabは3つのDockerコンテナで構成されているので,私は念のためパッケージセンターのGitLabのメニューから停止するようにしています.

DSMにログインしてパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは実行中になっているので,「停止」をクリックしてこれを停止します. 「このパッケージを停止しますか?」と聞かれるので「はい」をクリックします.

パッケージセンター

Dockerコンテナの編集画面を開く

次にDokcerを開きます.「synology_gitlab」で始まる3つのコンテナが停止していることを確認して,「コンテナ」タブで「synology_gitlab」を選択した状態で「編集」をクリックします.

Docker

環境変数を設定する

「編集 - synology_gitlab」ウィンドウが開くので,下表の新規追加します. なお,SynologyのGitLabはsameersbn/docker-gitlabをベースにしているようですので,このリポジトリの説明が参考になりました.

編集 - synology_gitlab
可変
GITLAB_PAGES_ENABLED true
GITLAB_PAGES_DOMAIN pages.hogehoge.internal
GITLAB_PAGES_PORT 30000
GITLAB_PAGES_ACCESS_CONTROL true
GITLAB_PAGES_ACCESS_CONTROL_SERVER http://hogehoge.internal:30000/
GITLAB_PAGES_ACCESS_CLIENT_ID アプリケーションID欄に表示されている文字列
GITLAB_PAGES_ACCESS_CLIENT_SECRET 秘密欄に表示されている文字列
GITLAB_PAGES_ACCESS_REDIRECT_URI http://projects.pages.hogehoge.internal:30000/auth

GitLabを再開させる

再びパッケージセンターを開き,「インストール済」タブからGitLabをクリックします.GitLabは停止になっているので,これを再開します. 再開してからGitLabにが起動してアクセス可能になるまではしばらくかかります.

これでGitLab Pagesが有効になりました.管理者エリアのダッシュボードでGitLab Pagesにチェックボックスが入っていることを確認します.

2021/12/29

ThinkPad USBトラックポイントキーボードの足を3Dプリンタで作成する

概要

学生の頃から愛用しているThinkPad USBトラックポイントキーボードの足が折れてしまいました.経年劣化なので仕方ないです. 既に販売終了になってだいぶ経つ製品で同じものが入手できません. 足が折れただけでその他は問題がないですし,気に入っているため,出来ればまだ使い続けたい.そこで,代わりの足を3Dプリンタで作ってみました.

3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足

3Dモデリング

最初に誰かが既に作った3Dモデルが公開されていないかを検索しましたが,私の所有する55Y9053に適合するものは見当たりませんでした. 他の製品のものはいくつか見つかりました.現行製品のトラックポイントキーボードも同じように足が折れたという話を聞いたことがありますので,考えることは皆さん同じのようです. 仕方がないので自分でモデリングすることにしました.

モデリング環境は下表のとおりです.ソフトウェアは全てフリーウェアです. FreeCADでモデリングしたものをSTLでエクスポートし,Ultimaker CuraでスライスしてGコードを生成しています.

OS Ubuntu 20.04.3 LTS
FreeCAD 0.18.4
Ultimaker Cura 4.11.0

モデリングにあたっては折れた足にノギスを当てて寸法を測りました. しかし,足のゴム部分はすり減っていたため元の正確な寸法はわかりませんし,角部分の複雑な曲線を完全に再現するのは私には難しいため妥協しています.

FreeCADによるモデリング

作成した3DモデルのSTLは,Thingiverseでダウンロード可能です.

3Dプリント

今回初めてABS樹脂を使ってみたのですが反りが大きかったため,最終的にはPLA樹脂を使いました.

3Dプリンタ KINGROON KP3S
フィラメント ANYCUBIC PLA 白

接地しない大きな突起部分にはサポート材を付加しています. プリント設定はUltimaker Curaのプリセットの標準品質からほとんど変えていませんが,内部は充填率を60%としキュービック構造にしています. プリント設定は3Dプリンタやフィラメントにもよると思いますし,私は素人であることに留意してください.

Ultimaker Curaによるスライス

完成写真

実用上問題ないものを作成できました.ただし,寸法や丸みの再現が忠実でないためか,足を立てたときの「カチッ」というラッチ感がやや弱い気がします.

3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足
3Dプリンタで作成したThinkPad USBトラックポイントキーボードの足