チャタリング防止

PICやarduinoで,タクトスイッチ等の安物を使うと,話題に上るのがチャタリングです。チャタリングのこと
を考えないと思った動作をしなくなります。
通常は,シュミットトリガー回路に代表されるハードを使って取り除く方法や,ソフトで取り除くこと等が必
要のようです。ソフトでは,間をあけて何回か測定して判別する方法等があるようですが,あるHPで,ビット
シフトを使った方法がでていました。

#define MAXPIN 13

int checkbutton(int i){
   static byte val[MAXPIN];
   static byte state[MAXPIN];

   if(digitalRead(PIN[i]) == 1){
      val[i] = val[i]<<1;
      val[i] += digitalRead(PIN[i]);
   }else{
      val[i] = 0;
   }

   if(val[i] == B01111111){
      state[i] = 1 - state[i];
   }

   return state[i];
}

やはり,先達はすごい。い くつか変数を用意しておいて,古いデータと比べるということは考えつきますが,
ビットシフトを使うとは,すごいなと思いました。ただ,このプログラム,IDEでコンパイルすると

 B01111111→→0b01111111

と怒られます。ちょっとした勘違いなんでしょうね。「弘法も筆の誤り」ですね。

追記
 あと,シフトビットのいいところは,オーバーフローを気にしなくていいことでしょうか。シフトで
はみでた部分は,破棄されるようですので。ここを,int等の変数で足し算すると,オーバーフローの処置をいれないとPGが暴走しますので。

併せて,変数のスコープ等について,調べていたら,大きな勘違いをしていることに気がつきました。IDE
では,Loopの中にmainのプログラムを書きますが,一回だけ実施したい処理を次のように書きました。


loop(){
   int flag;
   if(flag==0){
      syori;//動作させたい処理
      flag=1;
   }
}

みたいな記述をしていましたが,思った動作はしませんでした。それもそのはず,loopの中で,
最後の「 }」の前で,変数が初期化されてしまうとのこと。これでは,思った動作をしませんね。
保持するには,

  int flag;→→static int flag;

のように,静的変数の宣言をしないとだめということが分かりました。これ,IDEの癖みたいなものでしょう
か。知らないとこまりますね。今まで,loopのなかの冒頭で,変数の宣言をしていましたが,これ,何回も
宣言することになって,なんだろうと,疑問にも思っていたところなので,この疑問も解決ですね。

インターネット接続不具合

新しいルーターに変更してから,インターネット回線が時々切れたりする症状がではじめました。原因が分か
らずしらみつぶしにしらべました。
最初,前に買い換えたルーターが原因かと思いましたが,取り替える前のルーターと変えても,症状がかわり
ませんでした。念のために,LANケーブルテスターで,ケーブル関係を調べてみましたが,異常なし。

ということで,NTTドコモの修理に連絡をして,あれこれ確認をさせられました。結果,ONUのLANコネク
ターのところに付くはずのLEDの点滅がしていなくて,どうやら,ケーブル関係とやっと原因が分かりまし
た。

我が家は,

  ONU(ルーター)→→光コンセット(納戸)→→LANケーブル→→LANコンセット(居間)→→ルーター

と接続してあります。LANケーブルは,屋根裏を通してあります。屋根裏のLANケーブルの断線が一番やっか
いだと思ったのですが,我が家にネズミはいないので,あとは,コンセットのLANケーブルの接続かなと思い
ましたが,今問題なく使えてたので,それは考えにくかったのです。まだ,原因は特定できてないのですが,
多分LANケーブルのコネクター,の結線か,ONUのLANコネクターの接触不良,あたりが原因と推測されます。

ONUを見てもらおうかとも思ったのですが,修理にだいしている間,ネットに接続できなくなるので,様子を
見ることに。いままで,ONUの一番上のポートに接続していましたが,接続場所を3番目にすると,無事,
LAN接続のLEDも点滅するようになりました。

無事,ネットにつながりました。不安はありますが。このまま様子を見たいと思います。

エクセル VBA 画像の貼り付け

ネットで,いろいろあさっていると,VBAで,エクセルに写真を貼り付けるものがめにはいりました。

のようにセルに画像を貼り付けるVBAです。
C列にある名前をもとに,ホルダーに「名前.jpg」のファイルを検索して,A列に貼り付けるものです。
世の中には,本当にすごい方がいるもんだとつくづく思います。

Sub temp()
Dim c As Range, i As Long, img As String

'画像フォルダーのパス
Const imgFolderPath = "C:\Users\mabo-2021\Desktop\ブログー移行\tesut\"

For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    Set c = Cells(i, 1)
    img = imgFolderPath & c.Offset(, 2).Text & ".jpg"
    
    MsgBox img
    MsgBox Dir(img)

    If Dir(img) <> "" Then
        With ActiveSheet.Shapes.AddPicture(img, msoFalse, msoTrue, c.Left, c.Top, -1, -1) '//-1→元のサイズ
        'expression. AddPicture(Filename ,LinkToFile,SaveWithDocument,Left,Top,Width,Height)
            .LockAspectRatio = True
            .Placement = xlMove
            .Height = c.Height
            If .Width > c.Width Then
                .Width = c.Width
                .Top = c.Top + (c.Height - .Height) / 2
            End If
        End With
    Else
        c.Value = "No Image"
    End If
Next i
End Sub

柿の接ぎ木

我が家には,家内のおじいさんが植えてくれた柿の木がありました。毎年,甘い実をつけて,おいしく食べて
いましたが,2018年に葉っぱの色が悪くり,かれてしまいました。

枯れた木をそのままにしておきましたが,台木から,ひこばえの芽がでて,葉っぱをつけるようになりまし
た。
台木は,多分渋柿なので,実が付いても食べられないので,接ぎ木をしててみることにしました。
実家の甘柿の枝ををとってきました。

ひこばえの枝を切りました。

切れ目をいれ,実家からとってきたえだを差し込みました。

周りをラップとガムテープで養生しました。

うまくいくのかどうか,わかりませんが,楽しみにまちます。

焼きそばmabo (mabo流柔らか野菜焼きそば)

このところ,お昼に焼きそばを私が作って,夫婦で食べています。近所にあるスーパーにある3食で100円
ちょっとの焼きそばを使って激安のお昼です。

材料(年寄り二人分)
 焼きそば・・・・・3食で(100円強)
 もやし・・・・・・250g(30円強)
 カットキャベツ・・・100g(100円弱)
 シャウエッセン・・・3本(?円)
 卵・・・・・・・・・1個(?円)
 昆布ツユ・・・・・・50cc(?円)

材料費は,二人分で,300円程度かと思います。量的には年寄りにはちょうどいいくらいですが,私には
ちょっと足りないので,チンのご飯を150g程度一緒に食べてます。

作り方

市販のカットキャベツですが,そのままでは,大きいので最初は包丁で小さくカットしてましたが,最近は,
フライパンに空けてしまって,手でちぎって適当な大きさにそろえています。

キャベツの上に,もやし200gいれます。

水100ccをいれ,ふたをして蒸します。炒めないで蒸すのは,柔らかい野菜が好みだからです。

蒸している間に,シャウエッセンを細かくきり,焼きそばは,絡みやすくするのに,袋のまま4つに切って
おきます。

水滴がフライパンのふたについてきますので,適宜揺すって,蒸します。麺の入れ時が難しいのですが,
フライパンから,水が蒸発する泡がなくなってきたころが頃合いです。早くいれると,麺が,水っぽくな
ります。

泡がほとんど出なく鳴る頃合いで,麺をいれます。

ふたをして,麺がだいたいほぐれるまで,揺すりながら,蒸します。麺がほぐれたら,中華どんぶりに移して
ふたをしておきます。次の作業をしている間に,麺は,余熱でちょうど良く蒸されます。

麺を移したフライパンに油をしき,シャウエッセンを痛めます。

途中で卵を入れ,炒めます。

炒り卵ぐらいになったら,中華どんぶりで余熱で蒸していた麺と野菜を戻します。

水分を飛ばすようによくかき回しながら,炒めます。途中,昆布つゆを入れます。

よく混ぜながら,焼きそば備え付けの粉ソースをいれて,さらに炒めます。

しばらくいためたら,器に盛りつけます。

以上でできあがりですが,蒸すことで,野菜が柔らかくなりますが,食感がのこった方が好みの場合は,蒸さないでいためてもいいかもですね。

エクセル(関数 文字列の分割 空白区切り)

手伝いでやっている仕事関連で,エクセルをいじっています。疑問点があったので,「教えてGoo」の記事を
みていました。
すると,空白区切りの文字列を分割するには,どうすればいいのか,という,投稿
がありました。

写真のように,一つのセルに入っているデータを空白を区切りに,セルごとに分割したいとのことでした。
VBAを使って,

  〇空白の数を数える。
  〇空白が先頭から何番目にあるか調べる。
  〇先頭から,最初の空白の前までの文字を切り出す。
  〇2番目と3番目の空白の間にある文字を切り出す。
  〇3番目を4番目の空白の間にある文字を切り出す。
  〇4番目と5番目の空白の間にある文字を切り出す。
  〇5番目の空白以降の文字をきりだす。

というようなことをやればできそうに思えましたが,なんと,この作業を1行の関数でおこなってる諸兄がい
ました。

  =TRIM(MID(SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2))),(COLUMN(A1)-1)*LEN($B2)+1, LEN($B2)))

この1行の関数をC2のセルにいれて,Hのセルまでドラグしてコピーすると分割ができてしまうのです。

何をやっているのか,関数をしげしげと並べて,自分なりに解釈してみました。

 REPT(“ ”,LEN($B2))

で,元々文字列分の空白を作ります。
その後,一文字の空白と,文字列長分の空白を入れ替えます。

SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2)))

この入れ替えた,文字列の先頭から,文字をきりだします。

MID(SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2))),(COLUMN(A1)-1)*LEN($B2)+1, LEN($B2))

切り出す際に,

(COLUMN(A1)-1)*LEN($B2)+1

で,どこから切り出すかを決めています。うまい具合に,COLUMN(A1)のA1の部分は,コピーするたびに,

A1→B2→C2→D3→E5

のように,エクセルの方で,相対的に移動してくれます。結果,切り出し開始位置が,文字長分だけずれてくれます。
結果

COLUMN(A1)→1
COLUMN(B1)→2
COLUMN(C1)→3
COLUMN(D1)→4

のようにCOLUMNの値が増えていきますので,切り出し開始位置が文字長だけずれていきますので,一番目,2番目
と切り出すことができるようです。

最後に

TRIM( )

で,余分な空白を削除すれば,完成です。

写真は,空白を「*」に置き換えて表示しています。

しかし,頭の良い方は,考え方がちがうのですね。余分な空白をいれて,一気に切り出して,余分なものを取
り除くことで目的をはたしているのですごいと思いました。

チェーンソー::真っ直ぐ切れない (2) 部品交換

注文していた部品がとどきました。

左から,クラッチダラム(スプロケット),ニードルベアリング,ナットです。ナットは,カバーを締め付
けるためのものですが,以前のものは,なめて角が取れているので,思い切って,交換です。
チェーンソーから外した,今まで使っていた部品です。インパクトを使うと,ピストンを固定しなくてもた
やすくはずせます。おまけに,クラッチには,6角のナットがついていますので,ソケットがあれがそのま
外せるのが,機種のいいところですね。ちなみに,G3401EZというゼノアのチェーンソーです。

新品のクラッチドラムと,今までのもの比べてみると,スプロケットの部分が結構摩耗していますが,まだ
使えそうですので,予備の部品ということで,保管しておきます。

外した時の,逆の順番で組み立てて行きます。部品をとった本体ですが,周りは後で掃除できそうなので
このまま組み付けていきます。

まずは,ニードルベアリングです。ニードルベアリングもまだまだ,前のが使えそうですが,交換します。
ニードルベアリングは,通常のベアリングのように,外したりするのにプーラーはいらないんですね。

グリスを塗った後に,ハウシングをはめ込みます。

クラッチハウシングをクラッチの間に,ワッシャがあるようですが,これは,前のを使います。

クラッチをっくみこみます。逆ネジなので,時計と反対方向に回して,締め込んで行きます。
手で締めた後,インパクトで増ししめをします。

最後に,これも新しくしたソーガイド(スプロケットノーズ)を取り付けます。

この後,チェーン(これも新品)を取り付け,カバーをつけて,できあがりです。

この写真は,組み立て完成後,一回作業に使い終わった時のもので,1回の使用で,12のロゴが,消えかけ
ています。

部品交換後,玉切りをしましたが,以前のように,編芯して切れることは,うそのようになくなりました。や
はり,チェーンがスプロケットに真っ直ぐにかかっていなかったことが,大きかったようです。
チェーンを新品に変えたこともありますが,ストレスなく玉切りができました。

チェーンソー整備

毎日,玉切りにいってますが,チェーンソーにいろいろ不備がでてます。
使ってると,プライマリーポンプが,本体から,飛び出てきました。よく見ると,固定に使っている足の片方
が根本からおれてます。下部写真の左側の純正品のものです。そこで,以前5個で500円程度で買っておい
たものに取り替えようとしたら,なんと,固定の段階で,2個留め具?が根本からおれてしまいました。やっ
と3個目でうまくいきました。さすが〇華製ですね。

以前純正品をおいてあった,近くのHCに行ってみると,リニューアルしてあり,純正品の扱いがなくなってい
ました。だんだん,エンジンの器具は少なくなるんでしょうかね。

チェーンソー::真っ直ぐ切れない (1)

家内従姉妹の依頼で玉切りを始めましたが,ゼノアのチェーンソー G3401EZ の具合があまりよろしくあり
ません。
ネットでググると,先達のHPにあるようにいろいろな原因があるようです。残念ながら,私の場合にはあまり
当てはまらないように思えます。

写真のように,斜めに切れます。これでも,苦肉の策で,チェーンの片側だけを研いで,調整したものです。

そこで,チェーンソーのスプロケット周りをよく観察してみると,

チェーンソーを上から(通常使う方から)みると絵のようになってます。
通常の使い方で上から見ると,チェーンがソーガイドより,右側に引っ張られる形で,
スプロケットい巻き付いているようです。これでは,チェーンが傾いた形で,樹木に切り込み,左がわに編芯
してしまいます。
スプロケットの歯車部分をみると,段差がついているいるようで,スプロケットとソーガイド内のチェーンが
真っ直ぐにならない原因になっているようです。
こうなったのは,パワーシャープを使ったときからで,パワーシャープの研ぎ方が偏ってるのかなと思ってい
ました。今使ってるチェーンは,通常のものなので,原因は,パワーシャープではなかったようです。
ソーガイドは,パワーシャープのもので,オリジナルのものは,ちょっと紛失したようです。
そこで,痛い出費ですが,スプロケット,ソーガイド,を新品にすることにしました。交換後どうなることか
楽しみでもあります。結果は,交換後に掲載します。

玉切りの依頼

家内の従姉妹より,切り倒した樹木の玉切りの依頼を受けました。

1日目

 


1日目の成果です。

2日目


まだ先は長そうです。

玉切りをするにあたって,一定の長さにきった枝と,通称「バカ棒」ですね,


材木チョーク

を使いました。材木チョークは,白を使いましたが,案外めだちません。
何色がいいのでしょうかね,安いので白にしましたが,黄色あたりにしてみましょうか。

3日目です。

4日目です。
 
今日は,それほど時間をとれませんでした。それに,作業前の写真忘れました。中間の写真です。

5日目です。

大分進みましたが,まだまだ,あります。

6日目です。
今日も作業ですが,チェーンソーの調整に時間がかかり,あまり進みませんでした。

7日目です。
最初の依頼の場所がやっと終わりました。