Shujima Blog

Apple製品,技術系の話をするブログ

MacのOffice(Excel)が重い.32ビット版を64ビット版へ更新する.

「Office 15.13が重い」という方へ,64ビット版にしましょう.



最近,「Excelはアップデートする必要があります」というウインドウが頻繁に表示されるようになりました.

アクティビティモニタで見ると,Excel等のアプリが32ビットと表示されます.

f:id:masa_flyu:20181025173707j:plain

Office for Mac 2016をお使いの場合は,32bit版であっても64bit版にアップデートできるはずです(Office 365等の月額プランは必要ありません).

なのになぜかアップデートが来ません...なぜ?

f:id:masa_flyu:20181025173704p:plain

Excelのバージョンを確認してみると,バージョンが最新からはるかに古いままです.

原因

Office系の更新を一手に担っている「Microsoft Auto Update」(MAU)が原因の可能性があります.

support.office.com

解決策

docs.microsoft.com

上記のリンクから,Microsoft AutoUpdate (MAU) の最新版をダウンロードしてインストールしましょう.

インストール後に自動的に起動し,たくさんのアップデートをダウンロードし始めるはずです.

無事最新版のWord,Excel,PowerPoint を手にできました.

Raspberry PiでPythonプログラムをsudo管理者権限で自動的に起動させる(cron編)

Keywords : Raspberry Pi Python sudo 管理者権限 スタートアップ 自動起動 cron.

背景(読まなくてもいい)

masa-flyu.hatenablog.com

上記の記事にあるプログラムについて,自動起動をしようと,下記の過去記事

masa-flyu.hatenablog.com

の方法試みましたが,うまくいきませんでした.エラーログとか見る方法もよくわからなかったので,今回はまったく別の方法でPythonプログラムの自動起動をやってみました.

この手のワードで検索して一番初めに出てくるこちらのページ

hendigi.karaage.xyz

の3番目の方法になります.

対象

最初のリンクを見ていただければわかりますが,今回のプログラムはPythonで動くkivyというGUIのアプリケーションです.

環境は

です.

cronの紹介

cronはコマンドを定期実行することができるLinuxの機能です.

make.bcde.jp

方法

編集するファイルを開く

端末で

crontab -e

と打ちます.

初回起動時は,どのエディタで起動するかを選択させられるかと思いますが,わからなければ「nano」を選びましょう(簡単なので).

すると,テキストエディタnanoでファイルが開きます. 私の場合ファイル名が「/tmp/crontab.i2t3P8/crontab」で内容は

# Edit this file to introduce tasks to be run by cron.
#

...(中略)...

# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

となっていました,この後に行を追加していきます.

cronの書式(若干脱線)

ここで一旦,cronの一般的な使い方に触れておきます.

定期的な実行

1つ目の使い方は

* * * * * コマンド

の形式で5つの値(分や時間を表す)を入れるものです.

この方法では,コンピュータの起動中に定期的に実行したい処理を記述できます.

1度きりの実行

2つ目の方法は数値を指定する代わりに,@から始まる特定の状態を入れるものです.

qiita.com

書式は

@状態 コマンド

となります.

この方法では,コンピュータがとある状態のときのみ実行したい処理を記述できます.

今回はこの@の書式で起動直後を表す@rebootを使用します.

ファイルへの追記(本題)

先ほどのファイルにコマンドを記述していきます.

Pythonプログラムを起動直後に実行するもっとも簡単な方法は

@reboot python /home/pi/...(ディレクトリ).../hoge.py

です.

これで起動できればなんの問題もありません(動かない場合は次の項へ).

編集結果を保存するには,nanoの場合

  • Ctrl + O (編集結果の名前をつけて保存)
  • Enter (名前を変えずにEnterすることで上書き)
  • Ctrl + X (nanoの終了)

の順で終了します.

実行

ファイルの追記が完了したら,再起動すれば,プログラムが実行されるはずです.

残念ながら後述の通り私はできませんでした.カレントディレクトリや管理者権限(sudo)の問題だったようです.

発展的な方法

複数のコマンドの実行

私の場合,ライブラリの中にカレントディレクトリが重要なものがあったようで,上記の1行では完全に動作しませんでした.

そこで,普段起動しているときと同じように

の順で実行することにします.

コマンドを複数連ねるには ; セミコロンで区切ります.

先ほどの1行を以下のように書き換えました.

@reboot cd ~/fuga/fuga/fuga/ ; python2 ./hoge.py

~はホームディレクトリという意味の短縮表記です.なお,python2となっていますが,私がpython2を指定する必要があったというだけで,3ならpython3でいいですし,pythonだとデフォルトの方が起動します.

私はこれでも動きませんでした.I2Cなどの通信を利用しており,管理者権限が必要なようです.

管理者権限

管理者権限が必要な場合は,単純にsudo を追記すれば

@reboot cd ~/fuga/fuga/fuga/ ; sudo python2 ./hoge.py

文法上は成立します.しかしこれでも動きません.

実際,このコマンドを打つとわかりますが,sudoで実行する場合はパスワードの入力が必要になります.

これをあらかじめコマンドで入力しておく必要があります.

qiita.com

これを反映させると,先ほどまでのコマンドをさらに編集して

@reboot cd ~/fuga/fuga/fuga/ ; echo ******** ; sudo -S python2 ./hoge.py

となります.結局,私のcronのファイルは f:id:masa_flyu:20181011033447j:plain

のようになりました.

これで起動できました.

Omron環境センサとRaspberry Pi 3を車載して車室環境を見たりする(2/2)

masa-flyu.hatenablog.com の続きです.

センサ情報をkivyでディスプレイにGUIで表示する

今回カーナビ風の図体で,見た目をかっこよくできたと自負しています.

そこでディスプレイに表示するGUIもしっかり作っていきたいと思います.

OmronのセンサはPythonでサンプルコードが用意されているため,PythonからGUIを作成する手段を調べたところ,Kivyというものを見つけました.

Kivy: Cross-platform Python Framework for NUI Development

Kivyは

などの特徴が挙げられており,今回の用途には十分すぎる性能です.

myenigma.hatenablog.com

そしてさくっとGUIを組み立てて...と思ったのですが,結構苦労しました.

Kivyはまだ日本で流行っておらず,日本語の情報があまり多くありません.

非常に参考になるページもありますが,

qiita.com

https://myenigma.hatenablog.com/entry/2016/0

少し変わったことをすると,よくわからない原因で何度も詰まってしまい,想像の数倍の時間がかかりました.

つまづいたポイントや解決策などをブログにまとめようと思っていたのですが,どこで止まって,なぜ解決したのかわからないレベルの不具合が多すぎて,今だにまとめられていません.

とりあえず,今回の作例を少し整理して,また記事をあげてみようと思っています.

紆余曲折を経て,大まかな見た目を決定しました.

f:id:masa_flyu:20181010003436j:plain

アイコンにはiconmonstr.comさんの素材を使用させていただきました.

iconmonstr.com

この時点では環境センサの値をKivyに読み込めていないため,適当な値を表示させています.

その後,環境センサのサンプルコードを書き換えてクラス化するなどし,Kivyから呼び出せるようにしました.

そして,センサの値を読み込んで,特定の値の範囲ならば,色を変えるなどの処理ができるように改良を加えました.

f:id:masa_flyu:20181010004224j:plain

また,実際に車載することを考えると,電源投入とともに,Pythonプログラムを自動起動させなければなりません.以下の方法で登録し,自動起動させました.

masa-flyu.hatenablog.com

Raspberry Piによる音量制御が可能なオーディオアンプを製作する

さて,せっかくセンサで環境を計測したのに,表示するだけというのは寂しいものです.

そこで,現在のセンサの値をもとに,より安全・快適にドライブするためのシステムを構築することにしました.

そのうちの1つが,オーディオの音量制御です.

私の車は普通車とはいえ廉価帯のモデルであり,時速60km程度で走行していても,エンジン音やロードノイズは大きくなります.

環境センサの計測値では通常時60[dB]程度ですが,時速60km程度だと70〜75[dB]程度まで上昇しました. f:id:masa_flyu:20181010005207j:plain 私は運転中によく音楽を聞きますが,走行中は音楽のボリュームを上げたくなります.

かといって走行中に最適にすると,信号待ちのときにうるさいと感じてしまいます.

この変化を環境センサで計測した値をもとに自動で音量調整することは,より快適なドライブにつながるでしょう.

ということで,電子ボリュームを使用したオーディオアンプを作ることにしました.

音楽はiPhoneで聞いているため,iPhoneから車載スピーカーへの配線の間に今回のアンプを仕込みます.

さらに,各種センサで計測した値に異常があるならば,表示以外に音によって知らせたくなります.

というわけでRaspberry PiのオーディオとiPhoneのオーディオを足し合わせる機能も持たせることにしました.

大まかな構成図は以下のとおりです.

f:id:masa_flyu:20181010005501p:plain

iPhoneの音量のみ電子ボリュームで変化させます.

3番目の入力は予備です(ハイウェイ専用ラジオかなんか作ろうかと思ってます).

製作記を以下の記事にまとめています.

masa-flyu.hatenablog.com

計測したノイズが一定音量を超えたら,その大きさに応じて,Raspberry PiからのI2C信号で,ボリュームが変化します.

まだ60kmまでしか試していませんが,遅延があるものの,適度な音量調整がなされ,非常に快適になりました.

f:id:masa_flyu:20181010010003j:plain

Raspberry Piから車のライトの点灯状況を監視できるようにする

音量調整はとても便利ですが,センサ1つしか利用しないというのもまだ寂しいと思います.

そこで,環境光センサを用いて昼夜など明るさを判別することにしました.

運転していて怖い瞬間の一つにライトを点灯していない車があげられます.

私自身も夜ライトをつけ忘れそうになりひやひやした経験があるほか,夕方や曇天のライト点灯を忘れる時がしばしばあります.

そこで,ライトの点灯を忘れていた時に,警告表示,警告音を鳴らすことにしました.

そのためにはライトの点灯を検出しなければなりません.

便利なことに,今回Raspberry Piの電源に使用しているトヨタ10Pコネクタにはイルミ電源という端子があります.

f:id:masa_flyu:20181010010827p:plain

これは,ライトの点灯に連動する電源で,この電源を監視することによりライトの点灯を判断する回路を製作しました.

以下の記事にまとめています.

masa-flyu.hatenablog.com

動作の様子を動画に撮りました.

IMG_5779 from shujima on Vimeo.

ライトが消灯した瞬間に環境光センサの計測値(現在は0lx)を確認ししきい値を下回っていたら警告音・表示を発します.

効果音には魔王魂さんのものを使用させていただきました.

maoudamashii.jokersounds.com

なお,逆に(先ほどとは別の)しきい値以上に明るいときに,ライトが点灯している場合は異なる警告音・表示を発します.

これによりトンネルの入り口・出口でのライト操作し忘れも防止できます.

全体のまとめ・感想

今回,いくつかの要素技術を組み合わせて,車載のシステムを構築してみました.できることは数少ないけれど,綺麗にまとまったのが,嬉しく思っています.

安定して稼働するかはわかりませんが,問題が出たら少しずつ修正していこうと思います.

Raspberry Piを使ったのは初めてではありませんが,装置として組み上げるのは初めての経験でした.

また,電子回路も初心者で,オーディオアンプを1から作って音楽が聞けた瞬間の感動は素晴らしいものでした.

f:id:masa_flyu:20181010024037j:plain

今回の製作で肝になったオムロンの環境センサは最初にご紹介しました通り, 「みんなのラズパイコンテスト」内でオムロン社より無償提供いただいたものです.

今回このセンサを使って,様々な値を計測する面白さを知りました.乗車中車内の気温・湿度の変化はもとより,台風の接近による気圧変化や,車両の加速度の数値化など,おもしろい数値を可視化でき,これらをまた何かに活かせないかと画策中です.

また,このセンサのパッケージングの良さが大変素晴らしいと思いました.10種類ほどの値が取れるにも関わらず非常に小型で,バッテリーも内蔵しており,完全に無線です.

当初電源の取れる車内で,バッテリー内蔵は意味ないのではと考えていましたが,環境光センサやノイズを安定して拾える場所を探すために,センサの設置場所をいくつも試行錯誤しました.

普通のセンサなら,まずRaspberry Piから離せないですし,移動や設置も大変です.

このセンサであれば,車内であればどこにでもすぐに移動できますし,両面テープなどで手軽に設置できます.

f:id:masa_flyu:20181010021542j:plain

今はこのように車両後部荷室の側面にあったフックにかけています(サイズがちょうどで,キュッとはまり完全固定されました)

このセンサとラズパイがあるだけで,本当にいろんなことができそうな気がしてきます.

今回は最初に車載をテーマにしてしまったこともあり,このセンサの性能(特にクラウド連動など)を存分に活かせませんでした.

これからも,いろんな用途で試してみたいです.

この便利で面白いセンサが欲しくなった人は以下から今すぐ購入できますよ!!(宣伝)

www.mouser.jp

オムロン様,楽しいセンサを作ってくださり,提供してくださってありがとうございました.

またラズパイコンテスト主催の皆様,このようなものづくりのきっかけを与えてくださりありがとうございました.

車載Raspberry Piでライト点灯を識別する方法(イルミ電源使用)

masa-flyu.hatenablog.com

この辺のことをするために作りました.

Raspberry Piでライトの点灯を識別したい機会がどれだけあるかわかりませんが,カーナビでも画面の暗転などに使用されている汎用的な方法があります.

車の電源の種類

車にはたくさんの電装品がついていますが,純正じゃないナビなど,部外品の多くは車と通信しているわけではありません.

そんな電装品が車から供給されている唯一のものがバッテリー電源です.

このバッテリー電源ですが,常時供給されるものとそうでないものがあり,常時供給されるものの方が少ないです.

略称 タイミング 用途・備考
+B , バッテリー 常時供給 一部の保安機器など,バッテリ上がりに注意.
ACC , イグニッション キー連動 多くの電装品,キーをACC位置にするとON
イルミ ライト連動 車のヘッドライトを点灯させるとON,イルミネーション系向け

これらの電源はヒューズボックスから取ってくるのが一般的かと思います.

私の場合,設置場所がナビだったので,ナビなどに使用されているトヨタ10P+6Pコネクタから取り出しました.

ライトを検出する回路

前項を見ていただければわかるかと思いますが,ライトを検出する最も簡単な方法はイルミ電源の電圧が0か12Vかを検出することです.そこで,Raspberry PiのGPIOでこれを検出する回路を作ってみます.

2値を検出だけですので非常に簡単ですが,12Vを直接Raspberry Piに印加するわけにはいかないので,なんらか回路を挟む必要があります.

分圧方式

f:id:masa_flyu:20181010013633p:plain 12Vを抵抗の分圧を用いて3.3V付近まで下げそれをRaspberry PiのGPIOの入力で検出します.

1点大きな問題が,電源のノイズです.

多くの車はエンジン始動中,交流モーターを回して,簡単な整流をした後に,バッテリーを充電しています.イルミ電源も同じ回路に接続されているわけで,大きなリプルが乗ります.

また,12Vと言いつつ,エンジン始動中は16[V]程度まで電圧が上昇するなど,極めて不安定です.

コンデンサを取り付けるなど,多少は対策も可能ですが,今回は見送りました.

フォトカプラ方式

f:id:masa_flyu:20181010011051p:plain 絶縁といえばフォトカプラです,12V側に電流制限抵抗が必要なほか,ピンをプルアップする必要があります.

※回路を作った時には忘れていたのですが,Raspberry Piにはあらかじめプルアップ抵抗が内蔵されています.きちんと設定すれば回路図右上の10kΩ抵抗は不要になり,右のコネクタも2ピンで良くなります.

hnw.hatenablog.com

なによりフォトカプラの安心感は大きいです.

GNDも分離できるため,ノイズの影響は限りなく低くなります.

今回はこの回路で製作しました.

フォトカプラはTLP785を用いました.

www.marutsu.co.jp

実際に製作した回路がこちらです.

ビニールで包んでいますが真ん中の黒いのがフォトカプラです.

f:id:masa_flyu:20181012015219j:plain

以下のプログラムで動作チェックします.

import RPi.GPIO as GPIO                                          
import time

GPIO.setmode(GPIO.BCM)                        
GPIO.setup(26,GPIO.IN , pull_up_down = GPIO.PUD_UP)  # 引数pull_up_downをGPIO.PUD_UPでプルアップ,GPIO.PUD_DOWNでプルダウン                                              

while True:
    print(GPIO.input(26))
    time.sleep(0.2)

このプログラムではフォトカプラのコレクタ側をGPIOピンヘッダの37番ピン(BCMの26番ピン),エミッタ側をGND(GPIOピンヘッダの39番ピンなど)に接続します. f:id:masa_flyu:20181012015550p:plain

結果以下の通り,12Vを印加するかどうかで値が変化しました.

なお,プルアップですので,12V印加時が0,停電時が1となります.

f:id:masa_flyu:20181012015338p:plain

この回路を使って自動車のライトが消灯すると警告する機能を作りました.

IMG_5753 from shujima on Vimeo.

中央下に製作した回路(15mm*60mmくらい)が写っています.

手前のコネクタを抜く(ライトが消灯したのに相当)と,Raspberry Piが反応して警告音・表示を出します.

実験は成功です.

Omron環境センサとRaspberry Pi 3を車載して車室環境を見たりする(1/2)

ラズパイコンテストに応募するため(正確に言えば,ラズパイコンテストで無償提供いただいたOmronのセンサを活用するため)にRaspberry Piを車載してみました.といっても大した作品じゃありません.

この作品で以下のことができます.

  • 車室環境をセンサでモニタリングし,表示する
  • 走行時の騒音に応じてオーディオの音量を変える
  • 夜間やトンネルのライトつけ忘れ,つけっ放しを防止する

構成要素

以上のことを実現するために以下を行いました

  • Omronの環境センサをRaspberry Piで読めるようにする
  • Raspberry Piとディスプレイをナビ風の図体に押し込む
  • センサ情報をkivyでディスプレイにGUIで表示する
  • Raspberry Piによる音量制御が可能なオーディオアンプを製作する
  • Raspberry Piから車のライトの点灯状況を監視できるようにする

このうち上2つをこの記事で,残り3つを続きの記事で扱います.

masa-flyu.hatenablog.com

Omronの環境センサをRaspberry Piで読めるようにする

Omronの環境センサ「2JCIE-BL01」は

  • 温度センサ
  • 湿度センサ
  • 気圧センサ
  • 環境光センサ
  • UVセンサ
  • 騒音センサ
  • 加速度センサ※

を搭載し,さらに

  • 不快指数
  • 熱中症危険度
  • バッテリ電圧
  • 電波強度

を含めてBluetooth LowEnergy(BLE)を経由して送信できます.

※加速度センサは付いていない機種もあるようです.

なのに非常に小型でチロルチョコ大の大きさです.

ボタンなどはついておらず.すべてBLE経由でやりとりします.

電源はCR2032電池を内蔵しており,手で外せる裏蓋から交換可能です.

f:id:masa_flyu:20181010000804j:plain

センサ単体で買ってスマートフォンなどで計測値を閲覧することもできますが,GithubにあげられているPythonコードを用いることでRaspberry Pi 3から使用できます.

GitHub - OmronMicroDevices/envsensor-observer-py: Python Bluetooth low energy observer example for OMRON Environment Sensor (2JCIE-BL01)

使用体験は過去記事にあげてあります.

masa-flyu.hatenablog.com

masa-flyu.hatenablog.com

サンプルコードは,センサ単体の使用を想定したものであったため,他のコードから参照できるよう,クラス化などの変更を加えた上で,GUIコードなどとマルチスレッドで動作するようにしました.

公開したいのですが,ライセンスが明示されていないため,厳しいかと.できそうなら,GitHubかなんかにあげようと思います.

Raspberry Piとディスプレイをナビ風の図体に押し込む

私は2003年製造のトヨタイストという車に乗っています.

2013年に中古で購入しました.

最近の車種にありがちなおしゃれな機能がほぼ無い,とてもシンプルな車です.

中古車の購入当時,CD-ROMの地図を読み込むタイプの古くさいナビが付いていたのですが...

f:id:masa_flyu:20181009221316j:plain

1年後,(原因不明ながら)ディスプレイが点灯しなくなってしまいました.

そもそも1年間まったく使った事がなかったため,そのまま取り外していました.

f:id:masa_flyu:20181009225320j:plain

今回は,このナビのあったスペースにRaspberry Pi 3とディスプレイを突っ込むことにします.

ナビの取り付け部分を採寸し,モデル化しました. f:id:masa_flyu:20181009233022p:plain

これを元に構成要素を決めていきます.

ディスプレイは当初小さめな(5インチくらいの)ものを用いようと思っていましたが,タイミングよく人から7inchのディスプレイをもらうことができました.

これをCADモデル化し,当てはめてみると,,

f:id:masa_flyu:20181009233926p:plain

ぴったりじゃないですか!!

というわけで採用決定です.

ただ困ったことに,もらったディスプレイは,物理的にタッチパネル関係の配線(フラットケーブル)が損傷しており,タッチパネルが動作しません.とりあえず操作の必要ない構成とし,今後必要が生じた場合にはディスプレイを買い直すことになりそうです.

またぴったりすぎるため配線を取り回す隙間が確保できません.

ディスプレイのHDMIとUSB(電源)は横の側面から接続する形であり,普通に接続すれば,横にはみ出して引っかかってしまいます.

HDMIについては,同時にもらった3.5インチのディスプレイ

(これに類するやつ)

についてきたこのHDMIオスオスアダプタ(?)を使います.

f:id:masa_flyu:20181009235044j:plainf:id:masa_flyu:20181009235051j:plain

これと短い延長ケーブル

を合わせ,180度折り返す形で後方に持っていきます.

USBについては,L字のケーブルを用いて曲げようとしましたが,

これでもはみ出しが大きすぎたため,ハンダで直付けすることにしました.

f:id:masa_flyu:20181009235603j:plain

これで,とりあえずディスプレイは入りそうです.

次にケースです.

本当はケースはアルミ板から作ろうかな?と思ったのですが,ナビを限界まで分解すれば,それがケースになることに気づき,ナビを分解することにします.

限界まで分解しきったものがこちらです.

f:id:masa_flyu:20181009233528p:plain

固定穴がいっぱいあっていい枠です.

Raspberry Piとディスプレイを仮配置してみましょう.

f:id:masa_flyu:20181010000307j:plainf:id:masa_flyu:20181010000319j:plain

なんかそれっぽい!!

なお,裏から見てRaspberry Piの左に写っているものは12→5Vに落とすUSB電源です.

続けて車に取り付けてみました.

f:id:masa_flyu:20181010000312j:plainf:id:masa_flyu:20181010001221j:plain

なんかナビっぽい!!事前のモデル通り,非常に良い収まりでした.あと高さが1mm大きかったら入ってないでしょう.

車からの電源の供給ですが,普通はシガーソケットを用います.

ただ,残念なことに,この車はひと昔前では珍しい完全禁煙車です.

そして,今の完全禁煙車とは違い,電装品用のシガーソケットすらありません.

そこで,元カーナビがあった場所ということで,カーナビの配線から電源を取ることにします.

トヨタのカーナビ製品は10Pコネクタというもので電源とスピーカーに接続されているようで,これ一つで3種類の電源(常時,ACC,イルミ)とLRのスピーカーにアクセスできる便利なコネクタです.

そしてAliExpressにこれに適合した配線がありました.

ja.aliexpress.com

ここから引っ張り出した12V電源のうち,ACCをラズパイ,ディスプレイの電源としています.

続きは以下のページで

masa-flyu.hatenablog.com

当ブログをご利用いただく際には免責事項をお読みください。