pinewell's farmer blog 農業と電子工作、ソフトウェア、バイク、車

2024年4月25日

ポチトンFJDのAT2での動作を確認

Filed under: GNSS,ポチトン,未分類 — pinewell @ 9:52 PM

極近くに新規にてFJD AT2を購入した方がおりまして、動画を撮らせていただきました。

FJD AT2での動作確認

「ポチトンFJD」ではAT1/AT2ユーザーの要望によりスイッチの役割を「自動操舵ON/OFF」と「面積計量」に割り当てています。

さらにDIPスイッチの設定により自動操舵ON/OFF操作と面積計量ON/OFFを連動させることができます。

一回のスイッチ操作により「自動操舵ONで面積計量ON」、「自動操舵OFFで面積計量OFF」といったことが実現できます。

Youtube動画にて自動操舵ONしたあとに面積計量にカーソルが移動しているのが確認できます。

筐体・ハードウェアはこれまでのポチトンと同様ですが中身のソフトウェアが違うのでFJD AT1/AT2専用品となります。さらにUSB-C接続に対応するための延長ケーブルも作成しました。

現在のところAT1での動作が確認できていないため、発売はもうしばしお待ちください。

2020年12月3日

Windows10のタッチキーボードが勝手にでる

Filed under: 未分類 — pinewell @ 11:02 PM

ウチの環境がやや特殊なのであまり参考にならないかもしれませんが、気になっていたことが解決できたのでメモ。

ArduinoIDE や AndroidStudio でテキストエディタにフォーカスインするといちいちタッチキーボード(スクリーンキーボードではなく)が出現してしまう。

とりあえず、「 Touch Keyboard and Handwriting Panel Service 」のサービスをとめて事なきを得ていたのだが最近のWindows10Pro20H2になるとこのサービスを切ってしまうとIME自体が動かなくなる事態となった。

解決策を模索していたのだが検索をかけるも情報が少ない。どうやらウチの環境が特殊なようだと思い、ふと気づく。キーボードを繋いでいないのである。

Linuxサーバー側に接続しているキーボードを Synergyで運用しているので物理的なキーボードを繋いでいないことに思い至る。実際にキーボードを繋いでみると現象がでないことが確認できた。

さてと、使わないキーボードを無駄に接続するのはイヤ。Arduinoでキーボードのフリをするデバイスでも作ろうかとも思ったが改めて検索。

「キーボードが接続されていないときにタッチキーボードを表示する」という設定がどこかにあることが分かった。しかし、「スタート」「設定」「デバイス」「入力」と進んでもこの設定が無い。

キーボード詳細設定やその他を探し回ったが見つけることができず。試しに「設定の検索」に「タブレット」と入れてみると「タブレット設定」が現れた。ここから更に「タブレットの追加設定を変更する」に進むと漸く「キーボードが接続されて…」の設定が変更できた。

そもそも私のPCでは「タブレットモード」にすることができない。先述の設定画面には「このデバイスにはタッチ機能はありません。」と赤字で表示されていることからタッチデバイスがあるとタブレットとしても機能すると判断しているのか?タッチ機能があるとタブレットモードの設定も表示されることになるのだろう。

それにしても「タブレットモードを使用していないとき」の設定がデスクトップで使用しているPCでは、ずいぶん深~いところから発掘せにゃならないとは。

この設定を探すのに2時間は無駄にしたよ。トホホ。

2014年5月11日

甜菜、移植終了。イモ播き再開。秋小追肥。

Filed under: 未分類 — pinewell @ 7:00 PM

午前中に甜菜移植終了。
午後イモ播き再開。
チチには秋小麦の追肥をお願い。ダブリン2袋。色の悪いところに硫安。

2014年5月10日

降雨によりオフ。

Filed under: 未分類 — pinewell @ 7:00 PM

朝よりドンより。午後もそのままとなりオフとする。あとわずか、焦る必要はない。

2014年2月6日

HD7790x2

Filed under: 副業,未分類 — pinewell @ 2:24 PM

前回までで、HD7790+HD7750ではワシが満足する構成にはできないことが判明。
そして本日、発注していたHD7790が届く。 SAPPHIRE HD7790。とても新品では買えないが中古で安かった。
さっさと交換したかったが、冷え冷えのビデオカードではマズイ。
1時間ほど室温に慣らしていざHD7750と交換。またまたディスプレイ構成が変わったので
eyefinityのディスプレイグループが崩れたりで面倒だが、これで最後だろうと。
が、最初の起動ではBIOS画面こそ元々のT221画面に出力されたが、Windowsが立ち上がると後に挿した7790の
画面(CDU,E2210,L465)しかディスプレイが認識されていない。
電源不足か?とかケーブル抜いたっけ?とか考えたがとりあえず電源断。再度起動。
今度はT221側のみ認識。で、よく見るとcatalyst control centerからメッセージが。AMD CrossFireXを有効にするか?、と。
どうやらHD7790x2では敢えて無効にしないと有効にしたがるようだ。無効にすることで全ディスプレイが認識された。

HD7790 DVI-dual -T221
DVI-dual -T221
HD7790 DVI-Single -CDU2150A
DP-DVI -CDU2150A
HDMI-DVI -E2210HDS
DVI-Single -L465
の接続でCDU2150A をディスプレイグループで 3840x2400x33Hz
T221 をディスプレイグループで 3840x2400x48Hz
E2210HDS を 1920x1080x60Hz
L465 を 1280x1024x60Hz
の当初の目的が達成できた。大事なのはコネクタの数、出力できる帯域?だねぇ。
デュアルリンクDVIを2本使用して使用していない余っているHDMIとDisplayPortに画面が出力できると思っていたことが誤算。
これでようやく落ち着いた。後5年はこのままかぁ?
gamen

2013年2月2日

RaspberryPiにスーパーファミコンのコントローラを繋ぐ。

Filed under: 副業,未分類 — pinewell @ 5:52 PM

PS2のコントローラを繋ぎたかったのだが、Arduino用のサンプルのみで敷居が高かった。
アナログ部分は使わないので、”ピコーン!”と閃いた。スーパーファミコンのコントローラならもっと簡単じゃね?と。

で、検索してみるとサンプルっぽいもの。さらに、Arduinoに繋ぐlibraryがとても簡潔でわかりやすい。
ので、ハードオフにてドナーとなるコントローラをゲット。1つ105円。
ジャンク本体でもあれば尚良かったのだが、それは無かった。もう扱ってないのだろうか。(ジャンクじゃ無いモノはあった)

さっそくコネクタ部分をばらしてみると、7pinありそうなコネクタだったが、実際は5pin。
電源とGND、その他3pin。Arduinoに繋いで動作確認。問題無し。電源を3.3Vにしてみたが、これも問題無し。
搭載チップMC14021のデータシートでも問題なさそうだった。

電源はraspiの3.3Vから取得。ササササッとコードを書いて、raspiでの動作も確認。
以下ソース

#include <stdio.h>
#include <stdlib.h>
#include <bcm2835.h>
#include <signal.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
 
#define PIN_DATA  RPI_V2_GPIO_P1_13   //Red
#define PIN_CLOCK RPI_V2_GPIO_P1_11   //Yellow
#define PIN_LATCH RPI_V2_GPIO_P1_15   //Orange
                                      //Brown = Ground
				      //White = VCC
#define SFCPAD_B_BTN	0x0001
#define SFCPAD_Y_BTN	0x0002
#define SFCPAD_SELECT	0x0004
#define SFCPAD_START	0x0008
#define SFCPAD_UP 	0x0010
#define SFCPAD_DOWN	0x0020
#define SFCPAD_LEFT	0x0040
#define SFCPAD_RIGHT	0x0080
#define SFCPAD_A_BTN	0x0100
#define SFCPAD_X_BTN	0x0200
#define SFCPAD_L_BTN	0x0400
#define SFCPAD_R_BTN	0x0800
 
uint16_t readsfcpad() {
	int i;
	uint16_t b;
	uint16_t d;
	uint8_t dataval;
 
		b = 1;
		d = 0;
        	dataval = 1;
		bcm2835_gpio_write(PIN_LATCH,LOW);
		usleep(250);
		for (i = 0;i < 16;i++ ){
			dataval = bcm2835_gpio_lev(PIN_DATA);
			//printf("dataval:%d \n",dataval);
			if ( dataval == 0 ) {
				d = d | b;
			}
			b = b<<1;
			bcm2835_gpio_write(PIN_CLOCK,HIGH);
			usleep(500);
			bcm2835_gpio_write(PIN_CLOCK,LOW);
		}	
		bcm2835_gpio_write(PIN_LATCH,HIGH);
	return d;
}
 
int main(int argc,char **argv)
{
	//GPIOを初期化
	if (!bcm2835_init()) { 
		printf("bcm2835 init error.\n");
		exit(1); 
	}
 
	//PINの設定
	bcm2835_gpio_fsel(PIN_DATA ,BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(PIN_CLOCK,BCM2835_GPIO_FSEL_OUTP);
	bcm2835_gpio_fsel(PIN_LATCH,BCM2835_GPIO_FSEL_OUTP);
 
	//VCCまでプルアップ
	bcm2835_gpio_set_pud(PIN_DATA,BCM2835_GPIO_PUD_UP);
 
	//SFC_PAD との通信初期化
	bcm2835_gpio_write(PIN_CLOCK,LOW);
	bcm2835_gpio_write(PIN_LATCH,HIGH);
 
	uint16_t rd;
	while(1) {
		//ボタンの状態を読み、
		rd = readsfcpad();	
		if (rd != 0) {
			//ビット演算により、ボタンが押されているか
			if ( (rd & SFCPAD_B_BTN	) == SFCPAD_B_BTN)  { printf("B\n");   }
	                if ( (rd & SFCPAD_Y_BTN	) == SFCPAD_Y_BTN)  { printf("Y\n");   }
			if ( (rd & SFCPAD_SELECT) == SFCPAD_SELECT) { printf("Sel\n"); }
			if ( (rd & SFCPAD_START	) == SFCPAD_START)  { printf("Sta\n"); }
			if ( (rd & SFCPAD_UP 	) == SFCPAD_UP )    { printf("UP\n");  }
			if ( (rd & SFCPAD_DOWN	) == SFCPAD_DOWN)   { printf("Do\n");  }
			if ( (rd & SFCPAD_LEFT	) == SFCPAD_LEFT)   { printf("Le\n");  }
			if ( (rd & SFCPAD_RIGHT	) == SFCPAD_RIGHT)  { printf("Ri\n");  }
			if ( (rd & SFCPAD_A_BTN	) == SFCPAD_A_BTN)  { printf("A\n");   }
			if ( (rd & SFCPAD_X_BTN	) == SFCPAD_X_BTN)  { printf("X\n");   }
			if ( (rd & SFCPAD_L_BTN	) == SFCPAD_L_BTN)  { printf("L\n");   }
			if ( (rd & SFCPAD_R_BTN	) == SFCPAD_R_BTN)  { printf("R\n");   }
		}
	}
}

2013年1月28日

RaspberryPiのリモコン化2

Filed under: 未分類 — pinewell @ 2:29 PM

前回はGPIOからのスイッチ入力でAQUOSをコントロールした。
今回はKURO-RSをRaspberryPiに接続。
思わぬところでハマったのがftdi_sio。これがなぜだかハングアップする。
ググってみるとどうやらそういうものらしい。とりあえず /boot/cmdline.txtにdwc_otg.speed=1を追記。
これはUSBをフルスピード固定にしてしまうものらしい。フルスピードと言えば12Mbps。シリアル通信には充分ではある。
さらに、電源つけっぱなしで放置しておくとネットワークがフリーズすることが度々・・・。
これは/boot/cmdline.txtにsmsc95xx.turbo_mode=Nを追記することで解決した。
これも半2重にする意味のようなので遅くはなるのだろう。リモコン用途では充分。

kuro-rsを接続してもftdi_sioは自動では読み込まれない。これは
/sbin/modprobe ftdi_sio vendor=0x0411 product=0x00b3 とする。これで/dev/ttyUSB0ができる。
通常www-dataでは/dev/ttyUSB0は読み書きできないのでこれへの対処。(ユーザーを追加とか、chmodしちゃうとか)。

kuro-rsで使用するソフトウェアはkuro-rsに付属していたものなのでソースはアップできない。
rs_rec.cをコンパイルして、TVPOWやその他リモコンのデータを取得。
rs_send.cをコンパイルしてsendIrとした。

lighttpdとphpをapt-getして、lighttpdでPHPを使えるようにする。
phpからraspiのシリアル(/dev/ttyAMA0)を経由してAQUOSをコントロールするためのsendrc.c

#include <stdio.h>
#include <stdlib.h>
#include <bcm2835.h>
#include <signal.h>
 
#include<string.h>
#include<strings.h>
#include<termios.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdarg.h>
#include<unistd.h>
#include <syslog.h>
#include <errno.h>
 
//スイッチコマンド
#define SW1_CMD "\rPOWR0000\r" //POWER OFF
#define SW2_CMD "\rIAVD1   \r" //入力切り替え1
#define SW3_CMD "\rIAVD2   \r" //            2
#define SW4_CMD "\rIAVD3   \r"
#define SW5_CMD "\rIAVD4   \r"
#define SW6_CMD "\rIAVD5   \r"
#define SW7_CMD "\rCHUP    \r" //チャンネルUP
#define SW8_CMD "\rCHDW    \r" //チャンネルDOWN
#define SW9_CMD "\rCTBD031 \r" //地デジ
#define SW10_CMD "\rCBSD103 \r" //BS
#define SW11_CMD "\rCCSD350 \r" //CS
#define SW12_CMD "\rVOLM0   \r" //消音
#define BAUDRATE B9600           /* 通信速度の設定 */
#define MODEMDEVICE "/dev/ttyAMA0" /* デバイスファイルの指定:COM1 */
 
#define FALSE 0
#define TRUE 1
#define MC 4 /* 読み込む文字数 */
volatile int STOP=FALSE;
 
//シリアルへのコマンド送信
void main(int argc,char *argv[]) 
{ 
  int cmdno=1;
  int fd, c, res, i;             /* fd:ファイルディスクリプタ res:受け取った文字数 */
  struct termios oldtio, newtio; /* 通信ポートを制御するためのインターフェイス */
  char buf[255];                 /* 受信文字を格納 */
 
 
  if (argc == 2) {
	cmdno=atoi(argv[1]);
	if (cmdno==0) cmdno=1;
	if (cmdno > 12) cmdno=1;
  }
 
  if((fd=open(MODEMDEVICE, O_RDWR | O_NOCTTY))== -1){
    /* O_RDWR:読み書き両用 O_NOCTTY:tty制御をしない */
 
    perror(MODEMDEVICE);
    exit(-1);
  }
 
  tcgetattr(fd, &oldtio);          /* 現在のシリアルポートの設定を退避させる */
  bzero(&newtio, sizeof(newtio));  /* 新しいポートの設定の構造体をクリア */
 
  newtio.c_cflag= (BAUDRATE | CS8 | CLOCAL | CREAD);
   /* CRTSCTS:フロー制御有り CS8:8ビット、ノンパリティ、ストップビット1
 *       CLOCAL:モデムの状態信号を無視 CREAD:受信可能にする */
 
  newtio.c_iflag=IGNPAR;          /* IGNPAR:パリティエラーの文字は無視 */
 
  newtio.c_oflag=0;               /* rawモード */
  newtio.c_lflag=0;               /* 非カノニカル入力 */
 
  newtio.c_cc[VTIME]=0;           /* キャラクタ間タイマは未使用 */
  newtio.c_cc[VMIN]=MC;            /* MC文字受け取るまでブロックする */
 
  tcflush(fd,TCIFLUSH);           /* ポートのクリア */
  tcsetattr(fd, TCSANOW, &newtio); /* ポートの設定を有効にする */
 
 
  char strbuf[20];
  switch (cmdno){
	case 1:
  		strcpy(strbuf,SW1_CMD);
		break;
	case 2:
  		strcpy(strbuf,SW2_CMD);
		break;
	case 3:
  		strcpy(strbuf,SW3_CMD);
		break;
	case 4:
  		strcpy(strbuf,SW4_CMD);
		break;
	case 5:
  		strcpy(strbuf,SW5_CMD);
		break;
	case 6:
  		strcpy(strbuf,SW6_CMD);
		break;
	case 7:
  		strcpy(strbuf,SW7_CMD);
		break;
	case 8:
  		strcpy(strbuf,SW8_CMD);
		break;
	case 9:
  		strcpy(strbuf,SW9_CMD);
		break;
	case 10:
  		strcpy(strbuf,SW10_CMD);
		break;
	case 11:
  		strcpy(strbuf,SW11_CMD);
		break;
	case 12:
  		strcpy(strbuf,SW12_CMD);
		break;
	default:
  		strcpy(strbuf,"\rPOWR0000\r");
  }
 
  //コマンド送信
  write(fd,strbuf,sizeof(strbuf));
  tcsetattr(fd, TCSANOW, &oldtio);  /* 退避させた設定に戻す */
  close(fd);                       /* COM1のシリアルポートを閉じる */
  printf("cmdno: %d",cmdno);
  exit(0);
 }

使い方は./sendrs 1 とか。1~12に送信するコマンドをハードコーディングしている。
本来ならusageやら設定ファイルやらで変えられるのが望ましいのだが、めんどい。

RaspberryPiのリモコン化

Filed under: 副業,未分類 — pinewell @ 11:15 AM

さて、1月ももう終わり。
USBカメラ+motionでは安定して動作できなかったRaspberryPi。
使い道を模索していたのだが、リビングに置いてあるLS-GLをPiに置き換えようかと。
さらにどうせなら外部スイッチでの動作もさせたい。
ウチはAQUOSなのだが、本体に電源ボタンが無い(リモコンの電源)。
出かける際(本体の電源をオフにしても良いのだが)にリモコンを探してオフする必要がある。
テレビ近くにタクトスイッチを用意しておけばこれで解決。
さらに入力切替が気に入らない。ボタンを何度も押さなくてはならない。
幸いAQUOSにはPCと繋げるためのRS-232Cがあるのでこれを利用しない手はない。
LS-GL+KURO-RSの学習リモコンでは解決できなかったこれら課題をクリアしよう、と。

GPIOピンまず、raspiのGPIOポートの内、3V3POWERとGround、TXDとRXDを用いて、AQUOSとの通信を可能とする。
3.3Vのレベルなので、RS-232Cとの接続のために手元にあったADM3202ANを使用。AQUOSとはクロス結線。
とりあえず、コマンドを送って電源オフなりが出きることを確認。1段階クリア。
次に、タクトスイッチの取り付け。これは当初プレステのコントローラでもGPIOに接続してやろうかと
思ったのだが、Arduinoでの実験は成功したものの、raspiでの接続例は探しきれず断念。
部材は揃えたのでいつかやってやろうと思う。
タクトスイッチは6個。左画像の下の方のピンを使用した。GPIO7,8,9,10,11,25。
これを3.3V、10kオームの抵抗でプルアップして使用した。
ソフトウェア部はC library for Broadcom BCM 2835 as used in Raspberry Pi を使用して作成。
以下ソース。

#include <stdio.h>
#include <stdlib.h>
#include <bcm2835.h>
#include <signal.h>
 
#include <string.h>
#include <strings.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdarg.h>
#include <unistd.h>
#include <syslog.h>
#include <errno.h>
 
//スイッチのピン定義
#define SW1 RPI_V2_GPIO_P1_26
#define SW2 RPI_V2_GPIO_P1_24
#define SW3 RPI_V2_GPIO_P1_21
#define SW4 RPI_V2_GPIO_P1_19
#define SW5 RPI_V2_GPIO_P1_22
#define SW6 RPI_V2_GPIO_P1_23
 
//スイッチコマンド
#define SW1_CMD "\rPOWR0000\r" //POWER OFF
#define SW2_CMD "\rIAVD1   \r" //入力切り替え1
#define SW3_CMD "\rIAVD2   \r" //                   2
#define SW4_CMD "\rIAVD3   \r"
#define SW5_CMD "\rIAVD4   \r"
#define SW6_CMD "\rIAVD5   \r"
 
#define BAUDRATE B9600           /* 通信速度の設定 */
#define MODEMDEVICE "/dev/ttyAMA0" /* デバイスファイルの指定:COM1 */
 
#define FALSE 0
#define TRUE 1
#define MC 4 /* 読み込む文字数 */
volatile int STOP=FALSE;
 
static void log_write(char *fmt, ...);
 
// 割り込みコールバック関数
void signal_callback_handler(int signum)
{
	//printf("\ndetect key interrupt\n",signum);
	log_write("detect interrupt",signum);
	bcm2835_close();
	printf("stop daemon",0);
	exit(0);
}
 
//シリアルへのコマンド送信
int sendcmd(int cmdno) 
{ 
  int fd, c, res, i;             /* fd:ファイルディスクリプタ res:受け取った文字数 */
  struct termios oldtio, newtio; /* 通信ポートを制御するためのインターフェイス */
  char buf[255];                 /* 受信文字を格納 */
 
  if((fd=open(MODEMDEVICE, O_RDWR | O_NOCTTY))== -1){
    /* O_RDWR:読み書き両用 O_NOCTTY:tty制御をしない */
    perror(MODEMDEVICE);
    return(-1);
  }
 
  tcgetattr(fd, &oldtio);          /* 現在のシリアルポートの設定を退避させる */
  bzero(&newtio, sizeof(newtio));  /* 新しいポートの設定の構造体をクリア */
 
  newtio.c_cflag= (BAUDRATE | CS8 | CLOCAL | CREAD);
   /* CRTSCTS:フロー制御有り CS8:8ビット、ノンパリティ、ストップビット1
 *       CLOCAL:モデムの状態信号を無視 CREAD:受信可能にする */
 
  newtio.c_iflag=IGNPAR;          /* IGNPAR:パリティエラーの文字は無視 */
 
  newtio.c_oflag=0;               /* rawモード */
  newtio.c_lflag=0;               /* 非カノニカル入力 */
 
  newtio.c_cc[VTIME]=0;           /* キャラクタ間タイマは未使用 */
  newtio.c_cc[VMIN]=MC;            /* MC文字受け取るまでブロックする */
 
  tcflush(fd,TCIFLUSH);           /* ポートのクリア */
  tcsetattr(fd, TCSANOW, &newtio); /* ポートの設定を有効にする */
 
 
  char strbuf[20];
  switch (cmdno){
	case 1:
  		strcpy(strbuf,SW1_CMD);
		break;
	case 2:
  		strcpy(strbuf,SW2_CMD);
		break;
	case 3:
  		strcpy(strbuf,SW3_CMD);
		break;
	case 4:
  		strcpy(strbuf,SW4_CMD);
		break;
	case 5:
  		strcpy(strbuf,SW5_CMD);
		break;
	case 6:
  		strcpy(strbuf,SW6_CMD);
		break;
	default:
  		strcpy(strbuf,"\rPOWR0000\r");
  }
 
  //コマンド送信
  write(fd,strbuf,sizeof(strbuf));
 
  tcsetattr(fd, TCSANOW, &oldtio);  /* 退避させた設定に戻す */
  close(fd);                       /* COM1のシリアルポートを閉じる */
  return(0);
 }
 
static void become_daemon(void)
{
	int n;
	if (chdir("/")<0) {
		log_write("chdir(2) failed: %s",strerror(errno));
		exit(0);
	}
	freopen("/dev/null","r",stdin);
	freopen("/dev/null","w",stdout);
	freopen("/dev/null","w",stderr);
	n = fork();
	if (n<0) log_write("fork(2) failed: %s",strerror(errno));
	if (n !=0) _exit(0);
	if (setsid() <0) {
		log_write("setsid(2) failed: %s",strerror(errno));
		_exit(0);
	}
	log_write("start daemon",0);
}
 
int main(int argc, char **argv)
{
	//デーモン化を試みる。
	openlog("remoteaquos",LOG_PID|LOG_NDELAY,LOG_DAEMON);
	become_daemon();
 
	if (!bcm2835_init()) return 1;
	bcm2835_gpio_fsel(SW1, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(SW2, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(SW3, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(SW4, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(SW5, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_fsel(SW6, BCM2835_GPIO_FSEL_INPT);
	// VCCまでプルアップする
	bcm2835_gpio_set_pud(SW1, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_set_pud(SW2, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_set_pud(SW3, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_set_pud(SW4, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_set_pud(SW5, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_set_pud(SW6, BCM2835_GPIO_PUD_UP);
	signal(SIGINT, signal_callback_handler);
	//printf("press ^C to exit program ...\n");
 
	while (1)
	{
		uint8_t sw_val1 = bcm2835_gpio_lev(SW1);
		uint8_t sw_val2 = bcm2835_gpio_lev(SW2);
		uint8_t sw_val3 = bcm2835_gpio_lev(SW3);
		uint8_t sw_val4 = bcm2835_gpio_lev(SW4);
		uint8_t sw_val5 = bcm2835_gpio_lev(SW5);
		uint8_t sw_val6 = bcm2835_gpio_lev(SW6);
		uint8_t value = sw_val1 +sw_val2 +sw_val3 +sw_val4 +sw_val5 +sw_val6;
 
		if (value != 6) {  //何らかのスイッチが押されている。
			log_write("read from pin: %d %d %d %d %d %d\n", sw_val1,sw_val2,sw_val3,sw_val4,sw_val5,sw_val6,0);
			if(sw_val1 == 0 ) { sendcmd(1); }
			if(sw_val2 == 0 ) { sendcmd(2); }
			if(sw_val3 == 0 ) { sendcmd(3); }
			if(sw_val4 == 0 ) { sendcmd(4); }
			if(sw_val5 == 0 ) { sendcmd(5); }
			if(sw_val6 == 0 ) { sendcmd(6); }
		}
		delay(50); // 0.005秒待つ
	}
}
static void
log_write(char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vsyslog(LOG_ERR,fmt,ap);
    va_end(ap);
}

gcc -o remoteaquos -l bcm2835 -lrt remoteaquos.c /usr/local/lib/libbcm2835.a
一応、デーモン化してログに出力するようにしている。
これでタクトスイッチで電源OFFと入力切替が可能になった。

2012年10月25日

種イモの選別終了、量はどうなった?イモ出し、イモ掘り。

Filed under: 未分類,澱原イモ — pinewell @ 7:00 PM

今朝はずいぶんと気温が下がった。畑が真っ白。初霜のようだ。

氷はまだ張っていない。旭川あたりでは初氷だったようだ。

イモを朝から掘ろうと思っていたのだが、圃場がベタベタ。

天気は良いので乾くまで待つ。で、ハハがせっせと行ってくれていた種イモ選別が終了していたので、これをハードコンテナへ移す。

選別後の種イモの量は、ミニコンで358個。およそ25kg x 358 = 8950kg。これに買種48俵(48×50=2,400kg)を合わせると 11,350kg=227俵と。

4.5俵/10aなので、500a=5町分の種は確保できたかと。5町5反くらいのイモとしたいので5反分の種が足りないが、来年は遅く蒔くとして

誰かの余った種を安く購入しましょう、と。

午前、昼までの時間で2往復のイモ掘り。

午後、イモ出し。

今日は30t。

2012年10月9日

ダックスの12V化、総LEDダックスの完成。

Filed under: その他,未分類 — pinewell @ 7:34 PM

さて、このブログは9月にはほとんど書き込みが無かった。

単純にサボってしまっていたわけだが、なにせキーボードを置いてある机が

砲弾型LEDやらユニバーサル基板やらでとっ散らかっていて、まともに使えなかったのである。

(まぁ、今も半田鏝やらブレッドボードやらグルーガンで埋め尽くされているわけだが。)

もういつの日か忘れてしまったが、夜の地域の集会でダックスに乗った時。

突然ウィンカーがどちらとも点かなくなった。みると自作ICリレーが焼損。それもタイマーICが派手に。

セレン整流器+6Vバッテリーの安定しない電圧により一時的ではあれ高圧な電圧によるものであろうと。

できれば、オリジナルのままで維持したかったダックスなのだが、これで12V化を決意。

足りないモノは12Vのレギュレートレクチファイア、ダックスに積める12Vバッテリーのみ。

せっかく作ったウィンカー4灯、メーターインジケータの3灯、テールランプは全て作り直し。

さらに以前に焼損させたヘッドライトもいくつもの試行錯誤を繰り返して再作成。

・・・と、これだけのことを防除や草取りの合間にしていたためにとてもキーボードに触れず。

全てのメモはカレンダーという江戸後期からのデバイスに書き貯めていたのです。

一部の方にはご心配をかけてごめんなさい。元来、三日坊主で日記を書きつづけることができない性分でして。

 

後々のために製作メモ。

12V化は先人たちのおかげでスムーズ。

配線図。

ジェネレータからの黄線と緑線をレクチファイアに。生成された12Vをバッテリーに。

元々黄線はヘッドライトとテールランプにつながっていたのでこれをバッテリーのプラスに。

ウィンカーリレーは元々赤線と灰線。

赤線はプラスでストップスイッチともつながっている。

(配線図ではストップスイッチの配線が黒と緑ニ黄だが、実際は赤と緑ニ黄)

ICウィンカーリレーとなり、赤線は赤線へ、黄線は灰線と接続。さらに黒線をバッテリーのマイナスと接続。

このままではメーター内のウィンカーインジケータが片側しか点かない(LED化したため)ので、

インジケータのLEDはプラスとマイナスとした。マイナス側はアース接続。

元の橙線と空線にダイオードを付加してそれぞれインジケータのプラスへ接続。

バッテリーは秋月で通販。12V5Aのものを使用。

インジケータも含めて全ての灯火類を作り直した。

特にヘッドライトは苦労した。当初SMDで実装しようとしたのだが、100mAまで電気を流すと、

半田すら融解してしまうくらいの熱を持つのやめ。

結局100個近くの砲弾型LEDを並べて製作。それなりに明るいような・・・・。まぁ暗くても仕方ない。

電圧が安定したのでもう壊れることはなさそう。これで完成かな。

Older Posts »

Powered by WordPress