[Arduino]温度センサー

mde
#include < OneWire.h >
int inPin=10;
OneWire ds(inPin);

void setup() {
  Serial.begin(9600);
}

void loop() {
  int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  if(!ds.search(addr)){
    ds.reset_search();
    return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);

  delay(1000);

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);

  for(i=0; i<9; i++){
    data[i] = ds.read();
  }
  Serial.print("Temprerature:");
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;
  if(SignBit){
    TReading = (TReading ^ 0xffff) + 1;
  }
  Tc_100 = (6 * TReading) + TReading / 4;
  Whole = Tc_100 / 100;
  Fract = Tc_100 % 100;
  if(SignBit){
    Serial.print("-");
  }
  Serial.print(Whole);
  Serial.print(".");
  if(Fract < 10){
    Serial.print("0");
  }
  Serial.print(Fract);
  Serial.print(" C\n");

}

頭で分かっていても、実際に手を動かしてみることが大事

マイコンモジュールArduino Uno

Arduino Unoを購入、入出力端子が少なく、Raspberry Piより安価

dav

マイコンチップ:ATmega328P
動作電圧:5V
入力電圧:7~12V (DCジャックもしくはVIN端子から入力)
デジタルI/Oピン:14本(うち6本はPWM出力可能)
アナログ入力ピン:6本(デジタルI/Oピンとしても利用可能)
DC出力電流:1つのI/Oピン当り20mA程度、I/Oピン全部の合計100mAまで
DC出力電流:3.3V出力ピン 50mA
Flashメモリ:32KB (うち0.5KBをブートローダーで使用)
SRAM:2KB
EEPROM:1KB
クロックスピード:16MHz

– Arduino Create(Arduinoのクラウド開発環境)を使うことができる
– センサー技術を組み合わせると色々できる

まずは初心者用のキットを動かすことから始めるのが王道か
手を広げすぎると、キャパオーバーになるから出来るところからやりた

laravel 6.x 確認画面を挟んだstorage画像の保存処理

Laravelでは画像はstorageフォルダに格納する
Webからのアクセスを許すには、public/storageからstorage/app/publicへシンボリックリンクを張る必要がある
https://readouble.com/laravel/6.x/ja/filesystem.html

### 駄目な例
moveコマンドで、public配下に格納

UsersController.php

if($file = $request->file('file')){
            $name = $file->getClientOriginalName();
            $file->move('./images/tmp/', $name);
            $inputs['path'] = $name;

### 格納先・読み込み元をstorageに修正
$ php artisan storage:link
// ./public/storageが./storage/app/publicへのリンクとなる

UsersController.php

if($file = $request->file('file')){
            $name = $file->getClientOriginalName();
            // $file->move('./images/tmp/', $name);
            $file->storeAs('./public/images/tmp/', $name);
            $inputs['path'] = $name;

confirm.blade.php

<img src="{{ $inputs&#91;'path'&#93; ? asset('/storage/images/tmp/' . $inputs&#91;'path'&#93;) : 'https://placehold.jp/100x100.png' }}" class="img-icon">

確認画面で戻るボタンが押された場合は、Storage::deleteで削除する。確認画面で登録完了ボタンが押された場合は、画像の前部にCarbonでtimestampを付けて、prdフォルダに移動させる。画像のpathはDBに格納する。

UsersController.php

use Illuminate\Support\Facades\Storage;
use Carbon\Carbon;
public function store(Request $request)
    {
        $action = $request->get('action');
        $inputs = $request->except('action');

        if($action == '戻る'){
            Storage::delete('public/images/tmp/'.$inputs['profile_img']);
            return redirect()->action('UsersController@create')->withInput($inputs);
        }
        $timestamp = Carbon::now()->timestamp;
        $path = $timestamp.'_'.$inputs['profile_img'];
        Storage::move('public/images/tmp/'.$inputs['profile_img'], 'public/images/prd/'.$path);
        return 'done';
    }

ドキュメントを読む限り、storageに格納した方がファイルシステムの使う上で都合が良いように見えます。

Laravel6.x バリデーションのエラーメッセージを日本語化

### 初期(デフォルト)のメッセージ
./config/app.php

'locale' => 'ja',

$ php artisan make:request CreateUserRequest
CreateUserRequest.php

public function authorize()
    {
        return true;
    }
public function rules()
    {
        return [
            'name' => 'required',
        ];
    }

UsersController.php

public function confirm(CreateUserRequest $request)
    {
        return $request->all();
    }

view.blade.php

@if ($errors->has('name'))
  <br><span class="error">{{ $errors->first('name') }}</span>
@endif

エラーメッセージ
validation.required

### 英語のメッセージを複製
./resources/lang/ja/validation.php を作成
./resources/lang/en/validation.php の内容を ja/validation.php に複製

エラーメッセージ
The name field is required.

### 日本語メッセージにカスタマイズ
./resources/lang/ja/validation.php

'required' => ':attributeは必須です。',
'attributes' => [
        'last_name'=>'名前',
    ],

エラーメッセージ
名前は必須です。

バリデーションの仕様、メッセージに関しては、Wiki・Excelなどでステークホルダー全員で共有しながら管理することが多いでしょう。大規模なアプリケーションになるとバリデーションの数も増えてくるので、管理方法も工夫したい。

フーリエ変換

import numpy as np
from scipy.fftpack import fft
import matplotlib.pyplot as plt

N = 2**20
dt = 0.0001
f1, f2 = 5, 8
A1, A2 = 5, 0
p1, p2 = 0, 0

t = np.arange(0, N*dt, dt)
freq = np.linspace(0, 1.0/dt, N)

y = A1*np.sin(2*np.pi*f1*t + p1) + A2*np.sin(2*np.pi*f2*t + p2)

yf = fft(y)/(N/2)

plt.figure(2)
plt.subplot(211)
plt.plot(t, y)
plt.xlim(0, 1)
plt.xlabel("time")
plt.ylabel("amplitude")

plt.subplot(212)
plt.plot(freq, np.abs(yf))
plt.xlim(0, 10)
#plt.ylim(0, 5)
plt.xlabel("frequency")
plt.ylabel("amplitude")
plt.tight_layout()
plt.savefig("01")

ちょっと待て、
scipyって何?
matplotlibの基本的な使い方は?

ベクトルの内積

対応する成分同士を掛け算してそれらの和を取る
ベクトルとベクトルの内積はスカラーになる
内積の記号はが多い

直行条件とは、なす数が90°(cos90°=0)

法線ベクトル:全ての接線と直交するベクトル

Your PostgreSQL is too old

[vagrant@localhost ipa]$ yum list installed | grep postgres
postgresql.x86_64 8.4.20-8.el6_9 @base
postgresql-devel.x86_64 8.4.20-8.el6_9 @base
postgresql-libs.x86_64 8.4.20-8.el6_9 @base
postgresql96.x86_64 9.6.15-1PGDG.rhel6 @pgdg96
postgresql96-devel.x86_64 9.6.15-1PGDG.rhel6 @pgdg96
postgresql96-libs.x86_64 9.6.15-1PGDG.rhel6 @pgdg96
postgresql96-server.x86_64 9.6.15-1PGDG.rhel6 @pgdg96

psqlが8.4を読み込んでいるため、「Your PostgreSQL is too old」のエラーが出る

まず、psqlにログインして、実行ファイルを探します
[vagrant@localhost ipa]$ su – postgres
パスワード:
-bash-4.1$ which -a psql
/usr/bin/psql

node.js, npmバージョンアップ

[vagrant@localhost ~]$ nvm install v10.12.0
Downloading and installing node v10.12.0…
Downloading https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.xz…
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v10.12.0 (npm v6.4.1)
[vagrant@localhost ~]$ nvm use v10.12.0
Now using node v10.12.0 (npm v6.4.1)

[vagrant@localhost ~]$ node -v
v10.12.0
[vagrant@localhost ~]$ npm -v
6.4.1