2017年08月06日

ラズパイのタッチパネル液晶:tslib を使う

 「ラズパイの液晶タッチパネルを使う」の続き。自前でキャリブレーションのプログラムを書いていたのだが、tslib を使えばいいじゃない、と今さらながら気がついた。ということで、再トライしてみた。液晶は前と同じで、Waveshare 3.2inch RPi LCD (B), 320×240

 まず、tslib のインストール。

pi@raspberrypi:~ $ sudo apt-get install evtest tslib libts-bin

 evtest でデバイス番号を確認。/dev/input/event0 だった。

pi@raspberrypi:~ $ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:	ADS7846 Touchscreen
Select the device event number [0-0]: 0

 ts_calibrate でキャリブレート。+印が5箇所に順に表示されるので、スタイラスでタッチする。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate
20170805-1.jpg

 ts_test でテスト。やっぱりX方向はノイジーで、ときどきポインタが飛んでしまう。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_test
20170805-2.jpg

 C で使おうとすると、もう一手間かかる。tslib のライブラリは /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0 なのだが、これをフルパスで指定する必要があるみたい。また、tslib.h がどこにもインストールされていないので、必要な宣言をソースに埋め込む。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
struct tsdev;
struct ts_sample {
  int x, y;
  unsigned int pressure;
  struct timeval tv;
};
extern struct tsdev *ts_open(const char *dev_name, int nonblock);
extern int ts_config(struct tsdev *);
extern int ts_read(struct tsdev *, struct ts_sample *, int);
extern int ts_close(struct tsdev *);

int main(int argc, const char **argv)
{
  struct tsdev *ts;
  ts = ts_open("/dev/input/event0", 1);
  if (ts == NULL) {
    printf("Failed to open /dev/input/event0.\n");
    exit(1);
  }
  if (ts_config(ts) != 0) {
    printf("Failed to configure touchscreen.\n");
    exit(1);
  }
  while (1) {
    struct ts_sample samp;
    if (ts_read(ts, &samp, 1) == 1) {
      printf("%d %d %d\n", samp.x, samp.y, samp.pressure);
    }
  }
  return 0;
}

 コンパイルして実行してみた。

pi@raspberrypi:~ pi@raspberrypi:~$ gcc -o tstest tstest.c /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0
pi@raspberrypi:~$ ./tstest
133 180 65063
132 180 65104
131 180 65116
132 180 65114
135 186 0
^C
pi@raspberrypi:~$ 

 ここまで来れば簡単に使えるのだが、道のりが妙に長いな。Raspbian のパッケージで tslib をもう少しちゃんとサポートしてくれたら、楽に使えるんだけどな。

タグ:Raspberry Pi
posted by toshinagata at 11:01| 日記

2017年07月31日

MacBook (Late 2008) のバッテリーを交換

 MacBook (Late 2008) のバッテリーが少し膨らんできた。はて、これ交換するの初めてだっけ? 電源周りのトラブルはけっこう何度もあったので、もう忘れてしまったよ。純正品は(たぶん)手に入らないので、互換品を購入しました。

 バッテリーを取り出して比べてみた。奥が今までのもの、手前が新しいもの。今までのものは純正品だから、たぶん交換歴はありませんね。

20170731-1.jpg

 本体に装着した状態で見ると、わずかに膨れているのがわかる(写真ではわからないかも)。

20170731-2.jpg

 新しいのはこんな感じ。隙間が少し細いのがわかりますでしょうか。継ぎ目を指で触ると、はっきり違いがわかるんだけどね。

20170731-3.jpg

「システムレポート」はこんな風になった。

20170731-4.png

 互換バッテリーについては「2年ぐらいでへたる」という情報もある。さすがにその頃には、次のマシンに乗り換えることを考えないといけないだろうな。

タグ:Mac
posted by toshinagata at 17:54| 日記

2017年07月26日

ラズパイ+AVR:自動水やり器の回路

 自動水やり器の回路、一応設計できた。

20170726-1.png

 G6K-2F-3V というのは、オムロンの表面実装リレーで、以前リモコンプラレールの製作をしていたときに秋月の在庫処分で5個200円で買ったもの。2桁7セグメント LED の HDSP-K211 も同じ頃に買った。マイコン電子工作を始めた頃だな。

 "To motor" と書いたところを乾電池式ポンプに接続する。ATtiny からの制御で指定時間にリレーを ON にしてポンプを動かす。最初は MOSFET でスイッチングをしようと思って回路を組んでみたのだが、最初の1回だけ動くけど2回目から動かない、という挙動に悩まされた。モーター制御って難しいですね。ON/OFF するだけなんで、リレーの方が確実に動くだろうと判断した。部品点数はちょっと増えてしまったけど。

 まだブレッドボードで試しただけなので、これからユニバーサル基板に組んで、実験してみる。

 8/10 追記:RESET 端子をプルアップしておかないと、リレーからのノイズでリセットがかかってしまい、誤動作することがわかった。回路図を下のように修正しました。(点線で囲んだ 1K 抵抗を追加)

20170726-2.png
posted by toshinagata at 23:24| 日記