Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

電動アクチュエータで電流検知式の物理リミットをつける際、遅すぎると有効に動かないかも

電動アクチュエータ(上掲のようなもの)にて、物理リミットをソフトウェア的に制御しようとした時のこと。

電動アクチュエータには電流値を取得する機構がついています。
これを活かして動作限界を設定する手法があります。
レールの途中に物理的に干渉するところを作ります。
物理干渉の部分では無理に動こうとして電流が増えます。
そうなると、「電流が増大=>負荷がかかっている=>停止」という理屈で停止ポイントとして活かせるわけです。

会社にもよりますが、変化量をみているようです。
というわけで、のっそり物理リミットに近づけると変化が緩慢で

Google Drive系で期間限定で特定のユーザーに権限を付与する

実際のところ

(1)ドライブでファイルを開きます。
(2)共有 をクリックします。
(3)まだファイルが共有されていない場合は共有します。
(4)[詳細設定] をクリックします。名前にカーソルを合わせて、有効期限を設定するアイコン timer をクリックします。
(5)アクセスの有効期限を変更します。
(6)変更を保存 > 完了 をクリックします。

注: 当日を有効期限として設定することはできません。今すぐアクセスを制限する必要がある場合は、ファイルの共有を解除してください。

参考もと

gsuite.google.com

プリプロセッサifで入り組んだ内容を記述

実際のところ

ifdefと違い、if-else構文に落とし込む事ができます。
やれる事の幅が広がりますね。

#if defined(CREDIT)
    credit();
#elif defined(DEBIT)
    debit();
#else
    printerror();
#endif

ifdefの使い方

//#define DEBUG_MODE

//...

#ifdef DEBUG_MODE
  Serial.print("Set Patlite: 0x");
  Serial.println(state, HEX);
#endif

defineをコメントアウトしたままだと、ifdef~endifの部分は読み飛ばされます。

webIoPiでRasPiのIOにブラウザから簡易的にアクセスする その3:ArduinoとSerial経由で接続する

多少凝ったセンサーやインターフェイスを用意したい場合
Arduinoの力を借りるケースありますよね。
ボタンたくさんつけたりとか。

付属のwebiopi.jsとシリアルをつかうと、シリアル経由でArduinoと通信できます。

実際のところ

Arduinoは公式サンプルについてくるスクリプトを流用

#include <Wire.h>

char input;

void setup() {
  // open the serial port at 9600 bps:
  Serial.begin(9600);
  pinMode(2, INPUT);
}

void loop() {
  if (Serial.available() > 0) {
    input = Serial.read();
    switch (input) {

      // "t" command: returns time in millis since reset/powerup
      case 't':
        Serial.println(millis());
        break;

      // "a" command: read and returns analog channel 0
      case 'a':
        Serial.println(analogRead(0));
        break;

      // "d" command: read and returns digital channel 2
      case 'd':
        Serial.println(digitalRead(2));
        break;

      default:
        break;
    }
  }
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>WebIOPi | Arduino UI</title>
    <script type="text/javascript" src="/webiopi.js"></script>
    <script type="text/javascript">
    // Javascript code will go here

    </script>

    <style type="text/css">
    #time, #analog, #digital {
                margin: 5px 5px 5px 5px;
                width: 160px;
                height: 45px;
                font-size: 24pt;
                font-weight: bold;
                color: white;
        text-align: center;
        background-color: Blue;
    }

    </style>
</head>
<body>
<div align="center">
    <div id="time"></div>
    <div id="analog"></div>
    <div id="digital"></div>
</div>
</body>
</html>
    // declare variable for Serial object
    var serial;

    webiopi().ready(init);

    // defines function passed to webiopi().ready()
    function init() {
        // define Serial object, must be configured in /etc/webiopi/config
        serial = new Serial("uno");

        // automatically refresh UI each 5 seconds
        setInterval(updateUI, 1000);

        // update UI now
        updateUI();
    }

    // function called through setInterval
    function updateUI() {
        // retrieve Time
        getTime();
    }

    // function to use "t" command
    function getTime() {
        serial.write("t");
        serial.read(timeCallback);
    }

    // function that will process received data from getTime function
    function timeCallback(data) {
        // rounds milliseconds to seconds
        millis = parseInt(data);
        seconds = parseInt(millis/1000);

        // use jQuery to display seconds elapsed since Arduino reset
        $("#time").text(seconds+"s");
        getAnalog();
    }

    // function to use "a" command
    function getAnalog() {
        serial.write("a");
        serial.read(analogCallback);
    }

    // function that will process received data from getAnalog function
    function analogCallback(data) {
        // scales analog value to percent and to 0-255 range
        value = parseInt(data);
        percent = parseInt(value/1024 * 100);
        red = parseInt(value/1024 * 255);

        // use jQuery to display percent value
        $("#analog").text(percent+"%");

        // use jQuery to change color from black to red
        $("#analog").css("background-color", "rgb(" + red + ", 0, 0)");
        getDigital();
    }

    // function to use "d" command
    function getDigital() {
        serial.write("d");
        serial.read(digitalCallback);
    }

    // function that will process received data from getDigital function
    function digitalCallback(data) {
        value = parseInt(data);

        // set appropriate color and text depending on value
        if (value == 1) {
            $("#digital").css("background-color", "Red");
            $("#digital").text("ON");
        }
        else if (value == 0) {
            $("#digital").css("background-color", "Black");
            $("#digital").text("OFF");
        }
    }

参考もと

webiopi.trouch.com

【読書メモ】ある日突然40億円の借金を背負う――それでも人生はなんとかなる。

ある日突然40億円の借金を背負う――それでも人生はなんとかなる。

ある日突然40億円の借金を背負う――それでも人生はなんとかなる。

なかなか強烈なタイトルが印象的な、社長復活物語な本です。
それまで大手ビールメーカーの海外営業だった著者が、
なくなった父親の会社を流れで引き受けるも……なんと40億円の負債、
それも税金や年金の未払いまであるという凄まじい経営状態だった……という話。

私が今やってる会社も、つい最近まで似たような状態だったので……諸々のエピソードは中々胃にクるものがありました。