ブレスマイルクリア(歯磨き粉)

 

■LED Cube 3x3x3 を作ってみた - Arduino スケッチ

LED Cube 3x3x3 を制御する Arduino のスケッチです。

 

// Pattern data
int ptn[][3] = {
//{LayerA,LayerB,LayerC},
    {0525,0252,0525},
    {0252,0525,0252},
    {0525,0252,0525},

    {0777,0000,0777},
    {0070,0777,0070},
    {0707,0707,0707},

    {0272,0272,0272},

    {0555,0555,0555}

 };

 

int colpin[9] = {2,3,4,5,6,7,8,12,13};    // Column output pin
int laypin[3] = {9,10,11};    // Layer output pin

 

void setup() {
    for (int i=0; i<9; i++){
        pinMode (colpin[i], OUTPUT);
    }
    for (int i=0; i<3; i++){
        pinMode (laypin[i], OUTPUT);
    }
}

 

void loop() {
    unsigned long pcycle = 600;    // Pattern cycle (ms)

 

    int nptn = sizeof(ptn) / sizeof(ptn[0]);

    for (int k=0; k < nptn; k++){
        unsigned long ctime = millis();
        while (millis() - ctime < pcycle){
            for (int j=0; j<3; j++){
                digitalWrite (laypin[j], HIGH);
                for(int i=0; i<10; i++){
                    digitalWrite (colpin[i], ptn[k][j]>>i&1);
                }
                for(int i=0; i<10; i++){
                    digitalWrite (colpin[i], LOW);
                }
                digitalWrite (laypin[j], LOW);
            }
        }
    }
}

 

点灯パターンを ptn[][3] に定義しています。

 

LED9 LED6 LED3
LED8 LED5 LED2
LED7 LED4 LED1

 

例えば「0525」では、最初の「0」が 8 進数であることを示し、次の 3 桁が点灯パターンを表しています。初めの「5」は LED9と LED7 を、次の「2」は LED5 を、最後の「5」は LED3 と LED1 を点灯させることを意味しています。これは 2 進数の「101010101」ですので、「0b101010101」と書いてもかまいません。ただし「B101010101」という書き方では 8 ビットしか扱えないようなのでコンパイルエラーになります。

同様に 10 進数でもよいので、「341」であれば LED9、7、5、3、1 が点灯します。ちなみに「0341」は 8 進数なので LED8、7、6、1 が点灯することになります。まぁ 10 進数では直感的にわからないですね (^_^;) 俺は 8 進数表記がわかりやすいです。

ひとつの { } 内の最初の数値が Layer A 、次が Layer B、最後が Layer C に対応するので、{ } が一つの点灯パターンになります。パターンは何行でも、変数メモリがある限り増やせます。

 

この ptn 配列変数をもとにして

 

    for(int i=0; i<10; i++){
        digitalWrite (colpin[i], ptn[k][j]>>i&1);
    }

 

でコラムの 9 列の LED の点灯を制御します。変数 j でレイヤを切り替えて、一つの点灯パターンを完成させています。

そして変数 k の数だけパターンを変化させていきます。ptn の行数は定義していないので、

 

     int nptn = sizeof(ptn) / sizeof(ptn[0]);

 

で行数を算出します。

一つのパターンの表示時間は pcycle で定義してあり、タイマーが  pcycle を超えると次のパターンへ移行します。

 

    unsigned long ctime = millis();
    while (millis() - ctime < pcycle){

        ︙

    }

 

って感じです。

 


■LED Cube 3x3x3 を作ってみた - 回路図

久しぶりに Arduino を引っ張り出して遊んでみようかと思います。今回はとりあえず簡単そうな (^_^;) 3x3x3 の LED Cube を作ってみましょう。

 

ざっとググってみると、LED でキューブを作ったという記事がたくさん出てきますから参考になります。でも、回路とかスケッチとかはやっぱり自分でやってみないとよくわからないなぁって印象でした。まぁ自分なりに考えてみましょう。LED のダイナミック点灯を試してみたいと考えていたので、ちょうど良いタイミングですし。

 

まず回路図を書いてみます。

LED は 9 個をカソードコモンに接続して 1 レイヤとします。それを 3 段重ねてダイナミック点灯させる。つまり各レイヤは同時に同じパターンで HIGH にし、カソード側を順次 ON にするという方法ですね。

9 本のコラム (アノード) と 3 本のレイヤ (カソード) は Arduino のデジタルピン 2〜13 で制御します。1 レイヤ当たりの LED 駆動電流は 60mA 弱ですので Arduino で直接駆動できますが、毎度のように駆動用にバッファを入れることにします。次の段階でこの部分をシフトレジスタに変更してみたいなという考えもあります。

 


led-cube_3x3x3_回路図

 

 

パーツは手持ちのものを使っています。特別なものはまったくありません。

LED 駆動電流は 6.4mA 、レイヤ当たり 57.6mA です。レイヤ制御用トランジスタ (KSC1815Y) のコレクタ電流は 150mA なので十分ですね。ベース側のダイオードはレイヤが同時に ON しないようにするインターロックですが、プログラムで制御しますからやめてかまわないと思います。

バッファ (74VHCT244) は全体で 70mA ほどまで出力できますので、こちらも十分です。バッファの入力は Arduino の電源が落ちた時に不安定になるのでプルダウンしています。

レイヤ制御を 9~11 ピンにしているのはここを PWM にしたら明るさを変化させられるかなという狙いです。

 

これをブレッドボードで組み立てたのが下の写真です。

 


led-cube_3x3x3_ブレッドボード

 

 

次はこれを制御するスケッチを書いてみましょう。

 


■インターネットに繋がらない

営業さんから連絡受けて訪問したユーザーさん、「インターネットに繋がらない」とのことでした。

 

  1. タスクトレイのネットワークアイコンは「インターネットアクセスなし」表示です。
  2. まずはコマンドプロンプトから「 ipconfig /all 」してみます。パソコンのIPアドレスは DHCP からの自動取得で 192.168.1.18 / 24 、デフォルトゲートウェイと DNS は 192.168.1.1 でした。
  3. コマンドプロンプトから「 ping 192.168.1.1 」と入力すると応答がありました。
  4. ルーターは NTT の OG400X で、PPP ランプは点灯しています。ブラウザから「 http://192.168.1.1 」へアクセスしてルーターの状態を確認すると、プロバイダへは正常に接続できているようです。
  5. コマンドプロンプトから「 ping 8.8.8.8 」と入力すると Google Public DNS からの応答があります。が、「ping www.google.co.jp 」とするとホストが見つからないとのこと。どうやら名前解決ができていないようです。
  6. ルーターの接続状況からプロバイダの DNS サーバーのアドレスを確認し ping してみると応答があります。
  7. ネットワークアダプタの設定は DNS も自動取得になっていましたので、プロバイダの DNS サーバーアドレスを設定してみると見事に繋がりました。プロバイダの DNS サーバーは正常に稼働しているようです。
  8. ということで、どうやらルーターの DNS がうまく働いていないようです。処置はルーターの再起動。正常に接続できるようになり、めでたしめでたし (^_^;)

 

まぁ簡単なトラブルシューティングですが、ご参考までに。

なんちゅーかねぇ、窓際でのんびり過ごしたいのに、こんなんで呼び出されるわけですよ。ルーター再起動するぐらい営業さんでもできるでしょ、ってね。

 


■Ubuntu Server / sambaでファイル共有

ubuntu server に samba でファイルサーバーを設定して、Windows パソコンから共有フォルダとして利用できるようにします。

過去に設定したときの記事 Ubuntu Server / ファイルサーバーを構築する と特に違いはありません。

 

1. samba をインストール

$ sudo apt install samba

今回インストールされた samba のバージョンは 4.7.6 でした。

 

2. ユーザーディレクトリのパーミッション設定

自分だけが読み書きできるようにパーミッションを変更します。

$ sudo chmod 700 /home/username

 

3. samba の設定

オリジナルの smb.conf を smborg.conf としてコピーしておきます。

$ sudo cp /etc/samba/smb.conf /etc/samba/smborg.conf

 

smb.conf を編集します。

$ sudo vi /etc/samba/smb.conf

ワークグループの変更

workgroup = WORKGROUP

共有ディレクトリの設定

[username]
path = /home/username

browseable = yes

writeable = yes
read only = no

 

4. samba ユーザーを追加

$ sudo smbpasswd -a username

 

5. samba を再起動

$ sudo service smbd restart

 

Windows パソコンからファイルサーバーへアクセスできたら完了です。

 


■ubuntu 18.04 / 共有ディレクトリを自動マウント

ファイルサーバー (NAS) の共有ディレクトリを自動マウントしておくようにします。

 

基本的には過去記事 Ubuntu / ネットワークプレースを自動マウント でいけますが、このままでは NAS をマウントできませんでしたので一部修正しました。
 

ファイルサーバー (NAS) : 192.168.1.10
共有ディレクトリ : userdir
マウントポイント : /mnt/nas
ユーザー名 : nasuser
パスワード : naspasswd


まず cifs-utils をインストールします。
 

$ sudo apt install cifs-utils


つぎにマウントポイントを作成します。マウントポイントは、マウントする共有ディレクトリを格納する場所です。
 

$ sudo mkdir /mnt/nas

 

資格情報ファイル passwd.user を作成します。ファイル名は任意です。
 

$ sudo vi /etc/passwd.user


資格情報ファイルにユーザー名とパスワードを記述します。
 

username=nasuser
password=naspasswd


ファイルができたらオーナーとパーミッションを変更し、root 以外が読み書きできないようにします。
 

$ sudo chown root:root /etc/passwd.user
$ sudo chmod 600 /etc/passwd.user


/etc/fstab を編集します。
 

$ sudo vi /etc/fstab


次の一行を追加します。
 

//192.168.1.10/userdir /mnt/nas cifs vers=1.0,credentials=/etc/passwd.user,uid=1000,gid=1000,rw,defaults 0 0

 

我が家の NAS をマウントするためには vers=1.0 が必要でした。NAS の cifs バージョンが古いためだそうです。

rw は読み書きモード、defaults はマウントオプション、次の 0 は dump フラグ、最後の 0 は fsck チェックをしない、ということです。

サーバー起動時にマウントしますが、NAS が起動していないなどでマウントできなかった場合は

 

$ sudo mount -a

 

でマウントできます。

アンマウントしたいときは

 

$ sudo umount /mnt/nas

 

です。

 


■ubuntu 18.04 / Fritzingをインストール

回路図エディターの Fritzing をインストールします。

 

ubuntu 64bit なので、fritzing-0.9.3b.linux.AMD64.tar.bz2 を Fritzing Download からダウンロードします。展開してできたディレクトリ fritzing-0.9.3b.linux.AMD64 をホームに置いて、ホームディレクトリで次のコマンドを実行すると起動します。

 

$ ./Fritzing

 

毎回コマンドでは面倒なのでデスクトップにショートカットを作りましょう。テキストエディターで次のようなファイルを作り、Fritzing.desktop というファイル名で保存します。

 

[Desktop Entry]
Name=Fritzing
Comment=Fritzing
Exec=/home/username/fritzing-0.9.3b.linux.AMD64/Fritzing
Icon=/home/username/fritzing-0.9.3b.linux.AMD64/icons/fritzing_icon.png
Terminal=false
Type=Application

 

以前自分で作成したパーツデータは .fzpz 形式ファイルにエクスポートしてありましたので、~/Documents/Fritzing/parts/user に置いて Fritzing から開いてやるとインポートできます。

 

これで回路図の作成ができるようになりました。

Fritzing は 回路図とともに Arduino スケッチも保存できるので、とても便利ですね。

 


■ubuntu 18.04 / Arduino IDE をインストール

Arduino UNO を ubuntu 18.04 に接続しましょう。

 

Arduino IDE を Arduino - Software からダウンロードします。

ファイルマネージャーでダウンロードした arduino-1.8.9-linu64 を右クリックし展開します。展開されてできたディレクトリ arduino-1.8.9 をホームに置いて、ディレクトリに入ります。

何もないところを右クリックして「端末で開く」、次のコマンドを実行します。

 

$ ./install.sh

 

えーっと、途中なにやらエラーとか出てたような気がしますが、まぁ適当に処理してください。問題なく動けばとりあえずそれで良いかな、と (^_^;)

デスクトップに arduino-arduinoide.desktop ができるのでダブルクリック。「信頼して起動」すると Arduino IDE のアイコンに変わり、Arduino IDE が起動。シリアルポートを /dev/ttyACM0 に設定しておきます。

 

シリアルポートはグループが  dialout なので、

 

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月 13 18:27 /dev/ttyACM0

 

ユーザー username を dialout グループに追加します。

 

$ sudo usermod -a -G dialout username

 

これで IDE から Arduino へ書き込みできるようになりました。

 


■PSO2 / ゲーム用パソコンを更新

あいも変わらず続けている PHANTASY STAR ONLINE 2 (PSO2) ですが、通常使っている ubuntu のパソコンでデュアルブートする Windows10 で遊ぶことにしました。CPU は Core i5-4590 3.3GHz 、メモリーは 8GB です。GPU はオンボードの Intel HD Graphics 4600 ですがメモリーが 1GB あります。

 

こいつで PSO2 を起動すると、簡易設定のグラフィック設定が最大の「6」でもちょっとギクシャクする場面はありますが、現在使っているパソコンと変わりない動きをします。もちろんグラフィックは、いままで見たことのない世界が広がりますが (^_^;)

標準的な設定は「3」とのことなので、ちょっと欲張って「4」にして遊んでみようと思います。

 

で、ちょっとやってみた感想。楽しいわ (^_^;) こうしてだんだんハードウェアにものめりこんでいくんだろうなぁ。

 

ちなみに現在ハンター Lv.75 、ファイター Lv.75 、レンジャー Lv.75 。フォースが Lv.56 でレベルアップ中です。フォースが Lv.75 になればヒーローになれるのかな? 頑張りましょ。

 


■Windows10 / ubuntu18.04 / UEFIモードでデュアルブート

CPU: Core i5-4590 3.3GHz / Memory: 8GB / HDD: 500GB のパソコンに Windows10 と ubuntu18.04 をインストールし、デュアルブートさせることにします。俺が普段使っている ubuntu 機の後継とする予定です。

 

まずは Windows10 64bit をインストールします。毎度のようにインストール DVD から実行していけば、問題なくインストールできますね。難しいことはありません。

インストールが完了したら「ディスクの管理」を起動し、C ドライブにあたるパーティションを縮小します。約 260GB に縮小できたので、ubuntu 用に約 100GB 、共有パーティションとして約 130GB が確保できました。共有パーティションは Windows10 と ubuntu とで共有して使う場所で、作っておくとなにかと便利です。

 

次は ubuntu18.04 LTS をインストールします。こちらは 64bit のみですね。

Windows とのデュアルブートも何度もやっていることなので、いつものようにインストール DVD から起動して進めていきます。が、あれ?インストールボタンをクリックするとブート領域がなんとかかんとか文句言ってきます。何か間違えているのかと悩むこと一晩 (^_^;)

原因は、わかってしまえば簡単なことなのですが、ubuntu のインストール DVD をレガシードライブから起動していた、とゆーことです。

Windows10 64bit をインストールすると UEFI になります。俺の古い頭は、この UEFI というものをよく理解していない。UEFI のパソコンで DVD から起動するためには BIOS でレガシーモードにしなければならない、という程度の知識。今回起動モードをしっかり見てみたら UEFI の DVD ドライブというものが存在していました。このドライブを選択して起動すると UEFI でインストールされ、ブートは EFI が管理する、と。まぁ今回はその程度で (^_^;) 機会をみつけて勉強しましょ。

ちなみに UEFI で起動するとブートローダが起動、レガシーだと「Ubuntuを試す」の選択画面が表示されます。

 

さて、ブートローダが起動したら Install Ubuntu を選択しインストールを進めます。基本的にはこれまでと変わりありませんね。難しいことはないです。

インストールは「日本語」、キーボードレイアウトも「日本語 - 日本語」を選択します。

アップデートと他のソフトウェアでは「最小インストール」、その他のオプションのチェックはすべて外します。必要なものは後からインストールするほうが勉強になりますよ (^_^;)

インストールの種類は「その他」です。ubuntu 用のパーティションは /dev/sda5 、すべて「 / 」とします。swap 用のパーティションは作りません。共有パーティションは /dev/sda6 で、「 /Share 」などとしておくとディレクトリが作られます。

 

/dev/sda5 ext4 初期化 マウントポイント /

/dev/sda6 fat32 初期化 マウントポイント /Share

 

ウインドウが画面外へはみ出しているので「インストール」ボタンが見えません。super キー ( Windows キー) を押しながらドラッグするとウィンドウが移動できますので、上のほうへ移動して「インストール」を押します。

あとはタイムゾーン、ユーザー名、パスワードなどを設定。インストールが完了したら「今すぐ再起動」。

 

ubuntu のブートローダが起動したら、ubuntu、Windows10 がそれぞれ起動できることを確認して、完成です。

 


■Ubuntu Server / SSH でリモート操作

サーバーは普段パソコンを使っている場所にはありませんので、そこで作業するのはけっこう面倒です。寒いし (^_^;)

なので、SSH でリモート操作することにします。

 

その前に、Wake on LAN でサーバーが起動できることを確認しましょう。起動するためにサーバーのところへ行くなんて意味不明ですからねぇ。

MAC アドレスを ifconfig で確認して、gWakeOnLan などのアプリケーションからマジックパケットを送出すると… 起動できました。起動できないときは BIOS を確認するなどしてみましょう。

 

さて、SSH サーバーをインストールします。

 

$ sudo apt-get update

$ sudo apt-get install openssh-server

 

SSH が起動しているかどうかは

 

$ service --status-all | grep ssh

 

で確認できます。

暗号鍵を置くディレクトリを作っておきます。

 

$ mkdir ~/.ssh

 

クライアント (ubuntu 18.04.2 Desktop) 側で暗号鍵を生成して、公開鍵をサーバーへ送ります。

 

$ ssh-keygen -t rsa

$ scp -P 22 ~/.ssh/id_rsa.pub username@IP-address:~/.ssh/id_rsa.pub

 

サーバー側で公開鍵を authorized_keys に登録 (追加) します。初めから authorized_keys という名前でコピーしちゃうと、すでにファイルがあった場合に困っちゃいますから、追加するという方法で実行しています。

 

$ cat id_rsa.pub >> authorizes_keys

 

パーミッションを変更しておきます。

 

$ chmod 600 ~/.ssh/authorized_keys

 

クライアントから SSH で接続できることを確認します。

うまく接続できたら、最後に設定ファイルを書き換えましょう。

 

$ sudo vi /etc/ssh/sshd_config

 

変更するのは以下の 3ヶ所です。コメントアウトされているので、行頭の # も外します。

 

PasswordAuthentication no
Permit Root Login no
PermitEmptyPassword no

 

SSH サーバーを再起動します。

 

$ sudo /etc/init.d/ssh restart

 

これで普段使っているクライアントパソコンからサーバーのメンテナンスができるようになりました。

 


<< | 2/59PAGES | >>

■calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 
<< May 2019 >>

■search this site.

■recommend

毎日貯まるポイントサイト ECナビ

■recommend

* 楽天ROOM *

■Twitter

■recommend

■recommend

■selected entries

■categories

■archives

■recent comment

■recent trackback

■links

■profile

■others

■mobile

qrcode

■powered

無料ブログ作成サービス JUGEM