Make Local Happiness

自分の幸せは自分で作る!!!

Arduinoでステッピングモータの制御

Arduino Advent Calendar 2017の3日目の記事です。

よくArduinoや電子工作の記事でみるのはサーボモーターですが、 今回はステッピングモーターを使っていきます。

ステッピングモーターとは?

Wikipediaを参照すると、以下のような記述がでてきます。

パルス電力に同期して動作する同期電動機である。したがってパルスモーター(Pulse motor)とも言われる。簡単な回路構成で、正確な位置決め制御を実現できるので、装置の位置決めを行なう場合などによく使われる。略称ステッパ。

低回転でトルク(回転の力)をしっかりかけたい時にステッピングモーターサーボモータよりも向いています。サーボモーターは中回転から高速の回転の際にトルクがが一定になるようです。

必要機材・準備

※ モータドライバは不良品の場合や、はんだ付け等で壊れやすいため、2台ほど購入して置くことをオススメします。私は電源周りの問題が多く5台ほど検証で破壊しました。

配線

接続例がモータドライバの取扱説明書に記載があるので、それに合わせて配線していきます。 ※ 今回使用する秋月さんのモータドライバとストロベリー・リナックスさんの商品で配線は若干ことなるため、気をつけてください。

配線例

f:id:iwate_takayu:20171203195253p:plain

Arduinoとの配線例

f:id:iwate_takayu:20171203195526p:plain

プログラム

基本的な流れとしては以下の3つのステップになります。 今回作成したコードはgithubにアップしました。

  • ① ピンの定義をする
  • ② setupでモータードライバの初期設定を行う ※この設定を省くとモータの挙動がおかしくなります。この設定パラメータはモータドライバに準ずるところがあるため、最初は何を送っているかわからないかもしれないでのすが、取扱説明書をよく見てみましょう。
  • ③ モータを制御するためのコマンドを送信する

① ピンの定義をする

以下の設定ですが、 実はArduino側で元々決められているため、定義しなくても利用することができます。 ただ、わかりにくくなるため、設定しましょう。 UNOとMEGAでこのピンアサインは異なります。

UNO

#define PIN_SPI_MOSI 11
#define PIN_SPI_MISO 12
#define PIN_SPI_SCK 13
#define PIN_SPI_SS 10
#define PIN_BUSY 9

MEGA

#define PIN_SPI_MOSI 51
#define PIN_SPI_MISO 50
#define PIN_SPI_SCK 52
#define PIN_SPI_SS 53
#define PIN_BUSY 49

setupでモータドライバの初期設定を行う

SPIでモータドライバに信号を送信するため、SPIのモジュールを読み込みます。 その後、加速係数やら何やら設定していきます。

#include <SPI.h>  // SPI通信をするための読み込み

void setup()
{
  delay(1000);
  Serial.begin(9600);

  // ステッピングモーター用のピンの準備
  pinMode(PIN_SPI_MOSI, OUTPUT);
  pinMode(PIN_SPI_MISO, INPUT);
  pinMode(PIN_SPI_SCK, OUTPUT);
  pinMode(PIN_SPI_SS, OUTPUT);
  digitalWrite(PIN_SPI_SS, HIGH);
  pinMode(PIN_BUSY, INPUT);

  // SPI通信の開始宣言
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);//SCKの立上りでテータを送受信、アイドル時はpinをHIGHに設定
  SPI.setBitOrder(MSBFIRST);//MSBから送信

  // L6470の利用設定
  L6470_setup();
}

//**********************************************
// SPI通信するための関数
//**********************************************
void L6470_send(unsigned char value){
  while(!digitalRead(PIN_BUSY)){} //BESYが解除されるまで待機

  digitalWrite(PIN_SPI_SS, LOW);
  SPI.transfer(value);  //制御信号をSPI通信で送る
  SPI.transfer(0);  //制御信号をSPI通信で送る
  digitalWrite(PIN_SPI_SS, HIGH);
}

//**********************************************
// L6470のセットアップ
//**********************************************
void L6470_setup(){
  //デバイス設定
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0xc0);

  //加速係数設定
  L6470_send(0x05);
  L6470_send(0x00);
  L6470_send(0x41);
  //減速係数設定
  L6470_send(0x06); //レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x41); //値(10bit),デフォルト0x41
  //最大回転スピード設定
  L6470_send(0x07); //レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x41);//値(10bit),デフォルト0x41
  //最低回転スピード設定
  L6470_send(0x08);//レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x01);//値(10bit),デフォルト0x41
  //モータ停止中の電圧設定
  L6470_send(0x09);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //フルステップ駆動
  L6470_send(0x15);
  L6470_send(0x00);
  L6470_send(0x3ff);//値(10bit),デフォルト0x41

  //モータ定速回転時の電圧設定
  L6470_send(0x0A);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //加速中の電圧設定
  L6470_send(0x0B);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //減速中の電圧設定
  L6470_send(0x0C);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //フルステップ,ハーフステップ,1/4,1/8,…,1/128ステップの設定
  L6470_send(0x16);//レジスタアドレス
  L6470_send(0x03);//値(8bit)
}

③ モータを制御するためのコマンドを送信する

今回は1回転づつ回り続けるプログラムを書いてみます。

//**********************************************
// メイン処理 - loop()
//**********************************************
void loop(){
  //360度 - 1回転させる処理
  L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転
  L6470_send(0x00);
  L6470_send(0x20);//回転スピードの設定
  L6470_send(0x00);

  delay(1604);//1604msで約1回転
  L6470_send(0xB8);
}

まとめ

サーボモーターだと専用の関数があるので、 わかりやすいのですが、ステッピングモーターはまずはどうやって動かすんだ? ところからスタートしたので先人の知恵にかなり助けられました。

今回は秒で制御していますが、本来であればステップ数で動かすこともできます。 最初のステッピングモーターを動かすサンプルとお考えください。

一番わかりづらいところは、配線かと思います。 私もですが、ソフトウェアの方はあまり回路や配線なんかは苦手な方が多いかと思います。 そのため、他のブログを見て、間違った配線で動かないなんてことがありました。 取扱説明書をよく見ればわかることだったので、 あらためてちゃんと読もうと思いました。

あと、モータドライバーは本当に壊れやすいです。 電圧を間違えなければ大丈夫と思いますが、DCコンバータなどがうまく動かず壊れるなんてこともあるので、 お気をつけください。

参考

L6470をArduinoで簡単に動かすスケッチ - 北の国から電子工作(仮)

ステッピングモーターの基本(前編)〜Arduinoでパーツやセンサーを使ってみよう | Device Plus - デバプラ

「ステッピングモーター」と「ACサーボモーター」の使い分けについて教えてください。|おしえて!照代さん |オリエンタルモーター株式会社

機械設計者用サーボモーターとステッピングモーターの違いと使い分け

RaspberryPiでElectronアプリを自動起動する

f:id:iwate_takayu:20171108140943j:plain

Raspberry Pi Advent Calendar 2017の2日目の記事です。

はじめに

私は現在医療機器のベンチャーに所属しており、 血液検査のデバイスのタッチパネル部分をElectoronで開発しました。 デスクトップアプリを作る方法として、以下のようにいくつか選択肢はあるのですが、 一番使い慣れたReactで書ければ早いなと思い、Electornを採用しました。

幾つかの記事でElectronをRaspberryPiで自動起動させるための設定は散らばっているのですが、 まとめていきたいと思います。

環境

  • OS: Raspbian
  • node: v7.10.1
  • Electron: v1.6.2

ElectronでReactを使用する場合は、こちらのプロジェクトが便利でした。

https://github.com/chentsulin/electron-react-boilerplate

自動起動する手順

自動起動する手順としては3つあります。

  1. Electronをproduction用にビルドする
  2. RasbianのOS画面を立ち上げない設定
  3. PM2でElectronのアプリを自動起動

1. Electronをproduction用にビルドする

$ git clone https://github.com/chentsulin/electron-react-boilerplate.git
$ cd electron-react-boilerplate
$ npm install
$ npm run build // raspberrypiだと5分ほどかかる場合があります。なるべくクラス10のSDカードを使用しましょう。
$ npm start // 起動を確認します。sshでraspberrypiにログインしている場合は先頭にDISPLAY=:0を付けます。

2. RasbianのOS画面を立ち上げない設定

autostartの設定を変更することで、起動後にDesktopを表示させないようにできます。

$ vim ~/.config/lxsession/LXDE-pi/autostart
# @lxpanel --profile LXDE-pi
# @pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@xset s noblank
@xset s off
@xset -dpms

3. PM2でElectronアプリを自動起動する

(PM2)https://github.com/Unitech/pm2とはnodeアプリケーションのプロセス管理です。 使い勝手がよいのでこちらを使います。

pm2をインストール

$ npm install pm2 -g

プロジェクト直下にPM2設定ファイルとアプリ起動ファイルを作成

$ vim pm2.yml
apps:
  - script: /home/pi/electron-react-boilerplate/start.sh
    name: 'sample-app'
    env:
      NODE_ENV: development
    env_production:
      NODE_ENV: production

$ vim start.sh
cd ~/electron-react-boilerplate
DISPLAY=:0 npm start

pm2を自動起動

$ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup -u pi --hp /home/pi"

pm2でElectronアプリを起動し、設定を保存

$ pm2 start ~/electron-react-boilerplate/pm2.yml
$ pm2 save

まとめ

拍子抜けするぐらいに簡単だったのではないでしょうか? これで、速度さえ気にしなければタッチパネルの付きの筐体は簡単に作れます。 これは動くと結構感動します。Arudinoとの連携なんかも調べれば簡単にできるので、 WEBエンジニアでもハードプロダクトが作れる自体なんだと実感できます。

実は最近ASUSからTinkerBoardがリリースされており、こちらはスペック的にはRaspberryPiの2倍あります。TinkerBoardにはGPUも搭載されているため、Material-UIなどcssアニメーションを使う場合はRaspberryPiではカクカクしてしまうので、TinkerBoardを使わなければならくなるかと思います。 ただ、設定面のしやすさ、ドキュメント量はやはりRaspberryPiの方が断然上なので、画面を見せるものでなければRaspberryPiが使いやすいです。

それではよいデスクトップアプリ開発を!

RaspberryPi 小ネタ集

RaspberryPiを使って、プリンタサーバやタッチパネルのシステムを業務で構築しナレッジが溜まってきたので、 幾つかご紹介していきます。

RaspberryPiに接続したいけど、IPアドレスがわからない場合の対処

arp-scanでIPを検索する

同じWifi内に接続している機器のIPアドレスを検索することができます。

$ sudo brew install arp-scan

Raspberry Pi Foundationと表示される端末がRaspberryPiになります。

$ sudo arp-scan -l --interface en0

Password:
Interface: en0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 2048 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.4.120.1  00:00:5e:00:01:1d   VRRP (last octet is VRID)
10.4.120.2  00:1a:1e:02:48:c0   Aruba Networks
10.4.120.3  00:1a:1e:02:a1:90   Aruba Networks
10.4.120.10 2c:d0:5a:a0:b2:20   Liteon Technology Corporation
10.4.120.16 8c:8e:f2:a9:58:ef   (Unknown)
10.4.120.7  0c:51:01:55:01:c6   (Unknown)
10.4.120.14 cc:fb:65:3a:b8:49   (Unknown)
10.4.120.28 e0:5f:45:0c:e1:16   Raspberry Pi Foundation

Ethernetで直接接続する

MacとLANケーブルを直接接続することで、接続することができます。 RaspberryPiはBonjourIPアドレスが不明でもホスト名でLAN上のコンピュータ等にアクセスする方法)が使えるため、 ホスト名.localで接続することができます。 ※Wifiに接続していてもBonjourは利用できます。

RaspberryPiのデフォルトのhost名はraspberrypiなので、 以下で接続することができます。

ssh pi@raspberrypi.local

最新のRasbianであれば何もしなくても、host名によるアクセスができたと思いますが、 もしできない場合は以下をインストールして試してみてください。

sudo apt-get install avahi-daemon

host名の変更方法

以下の2箇所変更する必要があります。 raspberrypiと記載されている箇所を変更します。

  • /etc/hosts
  • /etc/hostname

sshでログインしているraspberrypiでElectronが起動できない

これは別にelectronの問題ではないのですが、 sshでログインしている際には、どのディスプレイで表示するかを設定する必要があります。

なので、先頭にDISPLAYを付ける必要があります。

npm start ⇒ DISPLAY=:0 npm start

visudoのエディタをnanoからvimに変更する

sudo update-alternatives --set editor /usr/bin/vim.basic

以下の記事のコマンドが使えます。 qiita.com

OS起動後にDesktopを表示させない

$ vim ~/.config/lxsession/LXDE-pi/autostart

# @lxpanel --profile LXDE-pi
# @pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@xset s noblank
@xset s off
@xset -dpms

ディスプレイを上下逆にする

raspberrypiの純正の7インチディスプレイを使用する際に、ケースにはめた際に、 表示が上下逆になっているので、この設定が必要になります。

$ vim /boot/config.txt

lcd_rotate=2

electronを自動起動

pm2を使うことで簡単にelectronの自動起動ができます。

pm2.keymetrics.io

$ git clone https://github.com/electron/electron-quick-start
$ cd electron-quick-start
$ npm install
$ npm run build

// pm2設定ファイルを作成
$ vim pm2.yml
apps:
  - script: /home/pi/electron-quick-start/start.sh
    name: 'electron-quick-start'
    env:
      NODE_ENV: development
    env_production:
      NODE_ENV: production

// 起動ファイルを作成
$ vim start.sh
cd ~/electron-quick-start
DISPLAY=:0 npm start

$ sudo npm install -g pm2
$ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup -u pi --hp /home/pi"
$ pm2 start ~/electron-quick-start/pm2.yml
$ pm2 save

RaspberryPiでSVGを作成した際に日本語が表示されない時の対処

f:id:iwate_takayu:20171013201738j:plain

RASPBIAN STRETCH LITEを利用したのですが、 こちらには日本語のフォントがインストールされていません。

そのため、日本語用のフォントを設定すればSVGに無事日本語をインストールすることが可能になります。 ここに辿りつくのに結構時間がかかってしまいました。

そもそも、なんでRaspberryPiでSVGを作成しようとしたのかと言うと、 プリンタサーバを作成するためでした。

日本語フォントをインストールしないまま、日本語をSVG内で書き出した場合、 何も表示されないため、あれ?となります。 同じ事をやろうとしている方は是非お試しください。

日本語フォントを設定

フォント管理のソフトをインストール

$ sudo apt-get install fontconfig

日本語フォントをインストール&設定

$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname fonts-noto
$ sudo fc-cache -fv

フォントの検索

sudo apt-cache search font japanese |grep roboto

おまけ

raspberry pi自身のロケールの変更 必要かどうかわからないですが、変更しました。

$ sudo raspi-config
  1. Localisation Options -> I1 Change Locale

※以下をスペースでチェックします

ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8

最後にデフォルトを以下に設定して完了です。

ja_JP.UTF-8 UTF-8

RaspberryPiでUSB接続でTM-30mプリンターを使う際に管理者権限以外で実行したい場合の対処

サーマルプリンターをUSB接続で使う際に、 node-thermal-printer を使用したのですが、普通に実行すると処理が終了しません。

これは権限の問題で、sudoを付けて実行すると実行できます。 ですが通常はsudo無しで実行したいので、 USBの権限を変更する方法について記載します。

USB権限の設定

USBデバイスのidVendorとidProductの確認

USBの権限を変更するためのruleファイルを作成するためには、 対象のUSBデバイスのidVendorとidProductの値が必要となります。

$ dmesg | grep usb

[    2.320512] usb 1-1.5: new full-speed USB device number 4 using dwc_otg
[    2.462682] usb 1-1.5: New USB device found, idVendor=04b8, idProduct=0e20
[    2.465600] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.468465] usb 1-1.5: Product: TM-m30 Bluetooth
[    2.471268] usb 1-1.5: Manufacturer: EPSON

ruleファイルを作成

$ sudo vim /etc/udev/rules.d/99-tm-m30.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0e20", GROUP="dialout", MODE="0660"

再起動して試す

設定が反映されるよう一度再起動します。

$ sudo reboot

印刷用のプログラム作成

$ npm install node-thermal-printer 
$ vim printer.js

const printer = require("node-thermal-printer");
printer.init({
  type: 'epson',
  interface: '/dev/usb/lp0'
});
printer.alignCenter();
printer.println("Hello world");
printer.printQR("https://github.com/Klemen1337/node-thermal-printer");
printer.cut();
printer.execute((err) => {
  if (err) {
    console.error("Print failed", err);
  } else {
    console.log("Print done");
  }
});

印刷実行

$ node printer.js
> Print done

参考

http://thinkami.hatenablog.com/entry/2015/06/25/064658

「なぞときBINGO」という新しいBINGOを作ったよ

f:id:iwate_takayu:20170819110621p:plain

実は最近結婚式をやりました(祝)
私は謎解き(リアル脱出ゲーム)にハマっており、 2次会では何か謎解き関連のことがやりたいと思ってました。

そこで思いついたのが、ビンゴゲームです。
結婚式の2次会で誰もがやる定番中の定番なゲームだと思います。
そんなビンゴゲームと「謎解き」をかけ合わせたら面白いと思って作ったのが、
「なぞときBINGO」だったのです。

なぞときBINGOとは?

通常のビンゴゲームでは、数字はガラガラさせて数字の書いてある玉を出すビンゴマシーンで数字を出して、 1列すべてが空いたらビンゴで運要素しかないゲームです。 運要素の強いビンゴゲームを「なぞときBINGO」では少し実力主義型のゲームに変えました。

「なぞときBINGO」ではビンゴマシーンは使わず、 ビンゴカードと謎(パズルのようなもの)が書かれた紙を数枚使ってゲームを進めます。 参加者が謎を解くと答えで数字が出てくるので、その数字をビンゴカードから開けてゲームを進めます。

謎をすべて解いた後ですが、 実は「電話番号」が出てきます。 その電話番号に電話すると抽選に参加できる仕組みになっています。

なんで電話をかけるんだと思った方がいるかと思うのですが、
これは、電話を使って抽選するためです。

通常のビンゴゲームではビンゴになると、ビンゴー!と高らかに言って、
会場の前の方に行くかと思います。

この「なぞときBINGO」では、抽選は電話で行います。

f:id:iwate_takayu:20170819112943p:plain

WEBのツールを用意しており、電話をかけた方の番号の下4桁が一覧で表示され、
当選人数を指定し抽選ボタンを押すと、当選した番号が決定し、
電話に着信が入るのです。

f:id:iwate_takayu:20170819112844p:plain

どうやって作ったのか?

f:id:iwate_takayu:20170510221936j:plain

実はこのビンゴカード自作なんです。
これは特注しているわけではなく、レーザーカッターで自分で切って作っています。
レーザーカッターは使い方がわからなくても、渋谷のFabcafeでハンズオンをやっていたり、
AKIBA.DMMやTechShopでも教えてくれる人がいるので案外なんとかなりました。

電話のシステムはTwilioを使って作っています。

これ非常に便利です。 自動音声応答(IVR)や着信をトリガーに処理を投げることができたりと、
電話を使った仕組みは一通り作れるのではないでしょうか?

WEBツールは裏側はFirebaseで作っています。
Firebase FunctionsでAPIは作成しており、APIからTwilioを呼び出しています。
サーバーを保持していないため、 コストが安く、メンテナンスなしで動作する構成で作っています。

まとめ

もともとは自分の結婚式のために作ったものですが、 意外と評判がよかったため、現在販売も開始しました!(是非友達に進めてください)
結婚式の2次会で普通のビンゴでは満足できない方にはオススメの商品になったと思います。
意外にも電話で抽選がくるのは面白かったです。

もともとTwilioのサイトに抽選用のデモアプリがあったので、
システム的にはそれをFirebase用に書き換えた感じです。

体験レポートなんかも今後書いていきたいので、もし写真付きで書いてもいいよという方は、
info@nazoneko.comまでメール頂ければ無料で謎解きビンゴをプレゼントします。
上記のキャンペーンは終了しました。

▼購入はこちらから

peraichi.com

▼体験版の申し込みはこちらから

docs.google.com

raspberryPiの初期セットアップ

f:id:iwate_takayu:20170408172520j:plain

必要なもの

SDカードにRaspbian(OS)を焼く

こちらはMacでの作業になります

raspbianをMacにダウンロード

以下のページからダウンロードできます

https://www.raspberrypi.org/downloads/raspbian/

1.SDカードのディスクを確認します

$ diskutil list
/dev/disk2 (internal, physical):
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:     FDisk_partition_scheme                        *15.9 GB    disk2
  1:             Windows_FAT_32 boot                    66.1 MB    disk2s1
  2:                      Linux                         4.3 GB     disk2s2

2.先程ダウンロードした.imgのファイルを指定してSDカードに書き込みます

$ sudo dd bs=1m if=2017-03-02-raspbian-jessie.img of=/dev/disk2


4190+0 records in
4190+0 records out
4393533440 bytes transferred in 3563.665218 secs (1232869 bytes/sec)

3.sdカードを取り出します

sudo diskutil eject /dev/disk2

WIFI設定

SSID, PASSWORDは適宜変更する

sudo sh -c 'wpa_passphrase SSID PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf'

Wifiのパスワードが残っているので消す

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

network={
        ssid=SSID
        #psk=PASS # 生パスワードなんで消しておく
        psk=01b...
}

SSIDが表示されれば成功

$ iwconfig wlan0

IPを固定にする

現在のIPを確認する

$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr b8:27:eb:46:79:7d  
          inet addr:192.168.0.205  Bcast:192.168.0.255  Mask:255.255.255.0

ゲートウェイのアドレスを確認する

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

DNSサーバを確認する

$cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 8.8.8.8

先程確認したIPを記載する

sudo vi /etc/dhcpcd.conf

interface wlan0
inform 192.168.0.205
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

$ sudo /etc/init.d/dhcpcd reload

各種インストー

アップデート

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get install -y git
$ sudo apt-get install -y vim

鍵設定

githubに公開鍵を置く

githubに鍵を予め登録しておく 共通鍵は以下のURLで確認できる

https://github.com/[username].keys

公開鍵を登録する

cd 
mkdir .ssh
cd .ssh 
wget -O authorized_keys https://github.com/ganezasan.keys 
cd ..

sudo chmod 700 .ssh
sudo chmod 600 .ssh/authorized_keys

sshの設定

$sudo vim /etc/ssh/sshd_config

...
PermitRootLogin no # root不可
...
PasswordAuthentication no # パスワード認証を無効に
...
AuthorizedKeysFile     %h/.ssh/authorized_keys #コメントインする

$ sudo /etc/init.d/ssh restart

sshを有効にする

sudo raspi-config

Interfacing options > ssh > Enable or disable ssh server

ディスプレイを上下逆にする

$ sudo vim /boot/config.txt      
$ lcd_rotate=2