読書記録:仕事の教科書

ビジネスとは精神的な活動ではなく、むしろフィジカルな作業の連続

  • 甘い考えでは生き残れないシチュエーションも出てくる

→この本を通して「泣きたくなるほど大変なビジネスの世界でも、どうにかして希望を持ち続けながら働く技術」を伝えたい

スピードアップ術

特に若いころは量でも質でもなく、「スピード」を重視すべき

  • スピードは量にも質にも転換できる

  • スピードはビジネス人生の最初の数年間で決定される部分が大きい

3つのすぐを意識して仕事に取り組む→仕事が早いと評価されるうえで重要なのはタイムよりもタイミング

  • すぐやる→依頼された日のうちに0.01%でのその作業に取り掛かる
  • すぐ出す→締切期限より早く終わらせる
  • すぐ答える→即答する
    • 「Yes, but構文」→まずは「やります!」と言い、その後不安な点を伝える
      • 上司やクライアントから仕事を頼まれたときに、すぐ「やります!」と意思表示することは、多くのものを引き寄せてくれるとても有効な方法
      • 不安な点を伝えるときは
        • 現時点で自分に足りないことを正直に伝える
        • 「なんでも教えてくれ」とならないように「3つの事前準備」

          1. 相手の都合にいいタイミング、場所を把握
          2. 最低限「何が分からないのか」「不安心配の原因は何か」をメモにまとめてから話す
          3. 目的(何が理解できれば良いのか、何を助けてほしいのか)を最初に明確に伝える

目標→計画→行動の順で進める

  • 最初に目標を立てる(~~までに業務を終わらせるなど)
  • 作業を分解する
    • 分解は細かければ細かいほど、次の行動がイメージしやすくなる→一度分解したら、「もう一度分解できないか?」考える癖をつける
  • 分解したそれぞれのタスクにどれくらい時間をかけているかをざっくりと計測する→具体的な改善策が見えてくる
    • 客観的に記録する、数字や変化をメモする
  • 一日の中で「経営者の時間」と「実行者の時間」を分ける
    • 経営者の時間→実行者がやりやすいように仕事を分解し、タグ付け(「いつやるか?」「どのように取り組まないといけないか」の目安を事前に示すことで、実行のハードルを下げる)する
    • おすすめは夜に明日の経営者となり、翌日実行する

文章術

  • 目的ファーストの法則→文章の冒頭で目的、所要時間の2つを伝える
    • ビジネスの文章は重要度の高い順で情報を並べるべき
    • ある程度「話の予測」ができる状態を作る→相手のストレスが下がる
  • 動詞の法則→すべての文章(タイトルに動詞を入れる)
  • 短文の法則→形容詞などの無駄をなくして、一文を短くする
    • 文字数に対する情報量が多い文章=美しい文章
  • GBNの法則→事実に対してシンプルな解釈(Good(よい)、Bad(悪い)、Not Clear(わからない))を加えること
  • 共通感情の法則→「相手が良く理解している情報」「相手の感情」を解釈の後に付け加える

提案術

「作業」と「仕事」の違いはそこに「提案」があるか

  1. ペインを探す

    • ペイン→「目標」と「現状」の間のギャップ
    • 提案→そのペインを解消するための答えが得られる問い
  2. 最初に得べき大きな問い(セントラルクエスチョン)を設定

    • 一つ上、2つ上の視点まで一貫して考慮した問いを立てる
  3. 2で設定した問いを分解する

セントラルクエスチョン
(2で設定した問い)
3か月以内に5万人の会員を予算内で獲得するには?
サブクエスチョン1
(セントラルクエスチョンをより具体化するための問い)
現状の予算1000万円で獲得できる見込みは?→3万人
サブクエスチョン2
(「現状(サブクエスチョン1)を踏まえて、やるべきことを明確にする問い」)
その差(2万人)を埋めるために必要なことは?
サブクエスチョン3
(優先順位を明確にする問い)
優先順位は?

提案のまとめ方

4段フォーマット→「目的」「背景」「提案」「詳細」

  • 目的→迷ったらセントラルクエスチョンから考える
  • 背景→ペインを入れる、ペインの根拠(事実)を付け加える
  • 提案→目標を達成するための手段、数パターン案を出す、その中で自分なりの優先順位を持っておく
  • 詳細→やらない理由(「とはいえ~~では?」という反論)を事前につぶしておく

セルフコントロール

自分の取扱説明書を作る→自分が自分の人生のリーダとして自分の機嫌を取ること

  • ポジティブ&非日常→「あなたが最もわくわく(興奮)することは?」「喜びや楽しみを感じることは?」
  • ポジティブ&日常 →「あなたが日常的に元気になることは?」
  • ネガティブ&日常 →「日常的にやってくるめんどくさいこと、いやなことは?」
  • ネガティブ&非日常→「あなたが怒りや悲しみを感じ、自分をコントロールできなくなることは?」

→それぞれのゾーンに当てはまる理由を考えて、ポジティブゾーンは質と量を最大化する方法を、ネガティブゾーンはダメージを最小化する方法を考える

  • アンガーマネジメント、ダウンマネジメント→怒りや悲しみを感じた時に、最初にどうするかを事前に決めておく
    • 大事なのは「完全に防ごうとする」のではなく、「長引かせないこと」

著者がやって効果があった具体例

  • 食事の時間をそろえる、夕飯はできるだけ早い時間に食べる
  • 寝具や電化製品に使う額を一桁上げる
  • SNSで見ないものを決める(ミュートにする)
  • 家庭と職場以外のもう一つの所属場所(サードコミュニティ)に触れておく→価値観を同質化させない
    • サードコミュニティ→家庭と職場と異なる文化、言語、価値基準を持つ年齢、男女比、職業が異なるコミュニティ
  • 古いもの、不要な考え方、不要なプライドなどを捨てる→不要なものを捨てると新しいものが入ってくる
  • 悩みを紙に書きだす→混乱の最小化
    • 考えていることを①事実②解釈③次のアクションの3つに分解して書きだす
  • 心身が悲鳴を上げる前に休む、どうしても無理だと思ったら転職する
  • コミュニケーション能力(他者と心地よく仕事をするために必要な対話の力)に自己投資する
  • べき論(Must)から離れて考える
    • MuatをWillに引き寄せる→自分が楽しむための工夫をする
    • MuatをCanに引き寄せる→自分で自分の業務に意義付けをする
      • ~~しなければならない→・・・できるようになるために~~している

読書記録:人は話し方が9割

本書は「職場、家族、友人などの身近な人との人間関係を円滑にする方法」について伝える。

  • コミュニケーションは人間関係を作っていくための大きな要素であり、コミュニケーションがうまくいくことで人生は豊かなものに変わる。

  • 話すことへの苦手意識をなくし(自己肯定感が上がる)、話す機会を増やすと、話し方はうまくなっていく。

    • 一度や二度の失敗で苦手意識を持つ必要はない。
  • 話し方において一番大事なことは、「あなたの思いやスタンス」

    • 相手の立場を考えて、相手優先で話をする、相手が幸せでありますようにとの思いを持つ。

    • 「何を伝えたいか?」「どういう意識で相手と接しているか」は、必ず会話ににじみ出る。

      • 「うまく話そう」という姿勢が透けて見えると「自分に取り入ってメリットを得ようとしている」と受け取り、気持ちが離れる。
      • 「役に立ちたい」という気持ちで話すと、相手にも伝わる。
  • 「人は自分に深い関心を寄せてくれる人を好きになる」

    • 人は誰もが自分のことが一番大切である。
    • 人は誰もが自分のことをわかってほしい、認めてほしいと熱望している。
  • 会話において大切なことは聞くこと

    • 相手に関心を寄せる。
    • 相手を観察し、相手の求めていることを探す。
    • 笑顔で聞き、自分の感情を言葉に乗せ、リアクションをする。
    • 相手の話を広げる。(感嘆、反復、共感、賞賛、質問)
    • 名前を頻繁に呼ばれると、自分自身が受け入れられた感じがする。→親近感、安心感を抱きやすい。

コミュニケーションにおいて大切なことは「好かれる前にまず、嫌われないこと」

  • (正しいこと、本当のことであるかにかかわらず)相手の気分を害する余計なことを言わない。
  • 相手の立場や肩書によって態度を変えない。(目下の人にも敬意をもって接する)
  • 「でも」「だって」「どうせ」「ダメ」といったネガティブなワードをなるべく口にしない。→反論する際は、まず相手を肯定してから自分の意見を言う。(ネガティブな言葉を使うとネガティブな人という印象を持たれる)
  • 突っ込んだ男女関係や下ネタを言わない。
  • お笑い芸人の真似事(落ちを求める、いじる、突っ込みを求める)をしない。
  • 話をまとめることをしない。(相手の話を広げ、引き出し、相手に気持ちよく話してもらうという基本に反する)
  • 相手の話を奪わない。
  • すぐになれなれしくしない。(仲良くなる流れの中で、あだ名やため口への変化は自然とおこるもの)
  • 負け惜しみを言わない。(素直に人を賞賛できる人は、同じく賞賛される)

対応例

  • 叱るとき、正論を言うとき
    • 相手と同じ目線に立ち、寄り添いながら共感を得るように伝える。
    • 相手をねぎらい、意図に理解を示したうえで叱る。
  • 叱られたとき
    • 「すねる」「いじける」「ふてくされる」「言い訳をする」ことをしない。
    • 自分に非があるときはまず謝罪し、同時に感謝を伝える。(労力を払って指摘してくれることは大変ありがたいこと)
  • 相談をされたとき
    • 解決策を言うのではなく、一緒に悩み考える。→相手が求めていることは「わかってほしい」「共感してほしい」であり、必ずしも答えが欲しいわけではない。
    • 意見を押し付けない。

感想

「相手の立場を考えて、相手目線で話をする」という考え方は、今後の会話をする際に意識していきたいと思いました。

読書記録:自己肯定感を上げるOUTPUT読書術


最も伝えたいメッセージ:

「読書によって自己肯定感を高め、人生を好転できる」

そのためには、読んだ本をOUTPUTすることが重要

本書ではOUTPUTの方法を示す

読書習慣を身に着けることの重要性→読書は食事に近い行為

  • パフォーマンス向上

  • 人生のリスクを減らす(本は人生の過去問であるケーススタディ

  • 長い人生を楽しむ栄養

  • 心をいやす「薬」

  • 本から他社の価値観に触れることで、自分の価値観を知る

  • 読書離れが進んでいるからこそ、差をつけて自分の人生を好転させるチャンス

OUTPUT読書術

  • OUTPUT読書術の大原則

    • 自分のペースを崩さない

      • 他者と優劣を比較しない、他者からの承認を求めない

      • とにかく楽しむ→本を読む楽しさに気づき夢中になれば、ランナーズハイのような状態になり、ほんと自分だけの世界に入り込める

    • 完璧を求めない

      • すべて理解する必要はない、多くを読めばいいわけではない、速く読めばいいわけではない
  • 基本の型→準備、読解、要約、発信

「準備」

  • 読解に集中するための環境(身の回りの整理)

  • スケジュールの固定(就寝前がおすすめ、枕元などに本を置く、隙間時間を活用する)

  • 本を読む目的を明確にする(自分にとって最優先事項に絞ったテーマ選び)→選書を参照、OUTPUTする必要があるのか?でふるいをかける

「読解」(情報の整理、理解)

  1. 本の表紙、帯、目次から結論の仮説を立てる

    • 時間をかけすぎない、間違っていても読解に支障はない
  2. はじめは拾い読み

    • 重要だと思った個所に線を引く

      • 言葉の温度が上昇する場所に注目(文章の最初と最後、強調表現、譲歩表現)

        • 本筋を見失うリスクを低減、スムーズに再読できる
  3. 著者と対話するようにアクティブに読む   

    • 思ったこと、気づいたことを本の中にメモする   
    • 問い、主張、根拠に突っ込みを入れながら読む
  4. 1章読み終わったら、最も重要だと思った個所に付箋を貼る

「要約」(情報の編集)

  • A4用紙1枚に情報をわかりやすくまとめる

  • 筋の通った構造を作ることがポイント

「発信」(情報の出力)

  • 発信相手を意識する(相手が分かるレベルまでかみ砕く)

  • 他人と読んだ本について、コミュニケーションを取るとよい

  • 承認を求めない

選書

目的を明確にする

最適な本の組み合わせを作り、目的に合った良書と出会う確率を上げる

  • 第一人者の代表作

  • わかりやすい本

  • 古典的名作

  • ベストセラー本

  • 最新作

感想

本を読むだけではなく、線を引きながら読み、読んだ後に内容を整理することで、理解が深まり、得られるものは大きいと感じました。 一方で、完璧に内容を整理しようとすると非常に時間がかかるため、本書にも記載がありましたが、完璧を求めずできる範囲でまとめること、OUTPUTする必要があるかを検討することが重要ではないかと思います。私も今後読んだ本を必要に応じて、記録していこうと思います。

春休み

今年は春休みが1か月半ありました。研究室が変わったので基本的に自由に過ごせました。

  • 部活で作っていたタンクの監視管理システムを完成させました。去年の11月ごろに作ったときにうまくいかなくて卒論があったので放置していたものがやっとできました。

    f:id:NKMRHYT:20220413101138j:plain:w300
    基板

  • 研究室の引継ぎと新しく入ってくるB4に向けた資料を作成しました。

  • 実家に帰省して運転免許証の更新と就活用のスーツを購入しました。

  • 卒業式がありました。卒業式の後には研究室の友達や部活の友達とお祝いをしました。

  • 部活の友達とフォレストアドベンチャーというアスレチック施設に行きました。思っていたよりしっかりとした施設ですごく楽しめました。

    f:id:NKMRHYT:20220413100754j:plain:w300
    フォレストアドベンチャー

  • 本を14冊読みました。読んだ内容をまとめてました。

  • 新しい研究室に行って少しでも早くなじめるようにしていました

卒業式

 3月23日に大学の卒業式がありました。僕は卒業しても同じ大学の院に進学するのであまり変化はないと感じています。ですが研究室が変わるので同じ研究室の人と会う機会が減ったり、仲の良かった人が就職したりほかの大学に進学するので会う機会が減ることはさみしく感じました。仲の良かった人で大学に残らない人とはこれからも関係が続くといいなと思いす。

 大学での4年間では友達に恵まれたなと感じています。友達がPCやプログラミングに興味があったので一緒になって勉強したことでプログラミングを始めたり、とても優秀な友達がいたのでその人のやり方を真似したりして成長できたりしました。院に進学しても人とのつながりを通して成長できればいいなと思います。

 大学に入るまでは言われたことをしっかりとやるといった性格でしたが、大学に入って自分で考えて勉強したりやることを考えるようになりました。どんなことをやるかとどれくらい頑張るかで成長できるかが決まったので院に進学しても自分が成長できることを全力で取り組みたいです。

Arduino学 Ⅱ ~データ通信編~

Arduino学 Ⅱ ~データ通信編~

目次

この資料の目的

 この資料はArduinoについてある程度勉強した人でArduinoでの通信の仕組みを理解したい人に向けて書きました。まだArduinoについて詳しくない人はArduino学 Ⅰを読んでみてください。

Arduino学 Ⅰ - NKMRHYTのブログ

Arduinoでは自分でライブラリを作らなくてもネットで見つかることが多く自分で作らない分にはこの内容を理解しなくても困りません。仕組みを理解したい人は読んでみてください。僕があまり詳しくないのでUART通信については書いていません。

はじめに

 マイコンから指令を送ったり、センサの値をデジタル値で読み取る際には通信を行う必要があります。どのようにデータをやり取りするのでしょうか?
 電圧がかかっている状態とかかっていない状態をタイミングよく切り替えることで通信を行っています。今回はセンサと通信を行い必要なデータを読み取ったり指令を送ったりする方法について説明します。説明の際には具体的なセンサを用いて説明しようと思います。

SPI通信

 MAX31855という温度センサを見てみましょう(MAX31855のデータシート)
データシートは説明書です。はじめは英語でいろいろ書いているので難しいと感じるかもしれませんがすぐに慣れます。

接続方法

 通信の開始終了を決めるSS、マスターからデータを送るMOSI、スレーブからのデータを受け取るMISO、タイミングを合わせるSCLを接続します。基本的にはマスターはArudinoです。SPI通信のセンサを複数使う際にはMOSI、MISO、SCLはマスターの同じピンでSSだけ変えます。データシートの1ページ目に書いています。

f:id:NKMRHYT:20220313232043p:plain
図1 配線図
このセンサではマイコンからのデータの送信はないのでマイコンのMOSIはつながっていません。このセンサではMISOはSO、SSはCSとなっています。

通信方法

 データシートの5ページ目にどのようにデータを送っているかが書いています。

f:id:NKMRHYT:20220313233058p:plain
図2 通信の様子
線が下側にある時がLOW上側にある時がHIGHです。図2のようにCSがLOWの時にCSLとSOが変化して通信をしています。通信を行っている間SCLは一定の間隔でHIGHとLOWを繰り返しています。どのタイミングで通信を行うかですが今回は立上りエッジです(図3参照)。
f:id:NKMRHYT:20220314001526p:plain:w300
図3 SPI_MODE
つまりSCLがHIGHになっているときにSOがHIGHかLOWかを見ることでデータを読み取ります。どのようにデータを決めているかは10ページに書いています(図4参照)。1がHIGH、0がLOWです。
f:id:NKMRHYT:20220314121314p:plain
図4 Memory Map

プログラム

#include <SPI.h>

SPISettings mySPISettings = SPISettings(5000000, MSBFIRST, SPI_MODE0);
int data;
float temp;

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

void loop() {
  SPI.beginTransaction(mySPISettings);
  digitalWrite(SS, LOW);
  data = SPI.transfer16(0x0000);
  digitalWrite(SS, HIGH);
  SPI.endTransaction();
  temp = (data >> 2) * 0.25;
  Serial.println(temp);
  delay(10);
}

 3行目のSPISettings mySPISettings = SPISettings(5000000, MSBFIRST, SPI_MODE0);でSPI通信の設定値を入力しています。5000000(5MHz)が最大の通信速度です。MSBFIRSTは上の位から読んでいくという意味です。データシートに書いています。

D[30:18] contain the converted temperature in the order of MSB to LSB

先ほど述べたように立上りエッジで通信を行っていないときにSCLはLOWなのでMODE0です。SPI.begin();で初期化、SPI.beginTransaction(mySPISettings);で設定の初期化、digitalWrite(SS, LOW);で通信開始、data = SPI.transfer16(0x0000);で16bitのデータを受信(送信データがないので0x0000)、digitalWrite(SS, HIGH);で通信終了、SPI.endTransaction();でほかのライブラリがSPIバスを使用できるようにする、 temp = (data >> 2) * 0.25;で2進数から10進数に変換しています。

I2C通信

 ADS1115というADコンバータを使って説明します(ADS1115のデータシート)

接続方法

 図5を見てください。データを送受信するSDA、タイミングを合わせるSCLを接続します。SPI通信から送信と受信のピンが1つになったことと送信開始を決めるピンがなくなり4本から2本になりました。I2CではSDAとSCLをプルアップする必要があります。データシートでは31ページに書いています。

f:id:NKMRHYT:20220315010711p:plain
図5 配線図

通信方法

f:id:NKMRHYT:20220317173227p:plain
図6 通信の様子
 図6のようにSCLがHIGHの時にSDAがHIGHからLOWになったら通信開始です。最初の7bitはアドレスです。これはセンサの名前でどのセンサと通信するかを指定します。8bit目で通信の方向を指定します。9bit目で区切りとしてLOWを出力します。次の8bitからデータの通信を行います。最後にSCLがHIGHの時にSDAがLOWからHIGHになったら通信を終了します。

プログラム

#include <Wire.h>
#define ADDR 0b1001000
#define FSR 4.096

int data;
float volt;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  
  Wire.beginTransmission(ADDR);
  Wire.write(0b00000001);
  Wire.write(0b11000011);
  Wire.write(0b10000011);
  Wire.endTransmission();
}

void loop() {
  Wire.beginTransmission(ADDR);
  Wire.write(0b00000000);
  Wire.endTransmission();

  Wire.requestFrom(ADDR, 2);
  while (Wire.available()) {
    data = Wire.read() << 8 | Wire.read();
  }

  volt = data * (FSR / pow(2, 15));
  Serial.println(volt);
  delay(100);
}

I2CはWire.hライブラリを使用します。Wire.begin();でライブラリを開始、Wire.beginTransmission(ADDR);で送信開始(かっこの中にアドレスを書く)、Wire.write(0b00000001);で書き込み(かっこ内に送信データを書く)、Wire.endTransmission();で送信終了、Wire.requestFrom(ADDR, 2);でデータの受信要求(かっこの中にアドレスと要求するデータのバイト数を書く)、 Wire.available()は読み取りのバイト数を返す、Wire.read()で読み取り、volt = data * (FSR / pow(2, 15));で2進数から10進数に変換しています。

Arduino学 Ⅰ

目次

この資料の目的

 この資料は研究室の新人向けに作成したものです。c言語を勉強したことがある人向けにArduinoでできることをできる限り簡単に説明することを目的としています。そのためわかりやすさを優先するために説明を省略している場合があります。

Arduinoとは

 マイクロコントローラ(マイコン)の一種です。一番よく使われているマイコンです。ですからネットで検索すればたいていのことが分かります。わからなかったらとりあえずググりましょう。またArduinoにはいくつか種類があります。一番有名なのはUNO、MICROは小さいといった感じです。ArduinoArduino言語というプログラミング言語で書きます。Arduino言語はc言語と親戚です。例えると標準語と方言のような関係です。

Arduino(マイコン)でできること

 Arduinoでできることは大まかにいうと電圧を出力すること、電圧を読み取ることです。基本的には電圧がかかっているかかかっていないかという2通りで出力、読み取りを行います(2進数)。出力するタイミングを制御することでセンサの読み取りやモータの制御を行っています。

Arduinoの使い方

準備

 Arduinoのソフトウェアをインストールしましょう(ダウンロード)
インストールしたらソフトを起動します。PCとArduinoを接続します。ツールからボード、シリアルポートを設定します。以上で準備ができました。

Arduinoを動かしてみよう

1. シリアルモニタに表示

 結果を確認したいときやデバックをする際に使います。これを適切に使えるようになるとデバックが早くなります。

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.print('a');
}

void loop() {
  // put your main code here, to run repeatedly:
  
}

こうすることでシリアルモニタに表示できます。

プログラムの説明
  • void setup()(一行目の”{”から5行目の”}”で囲まれた範囲)は最初の一回だけ実行されます。
  • void loop()(7行目の”{”から10行目の”}”で囲まれた範囲は繰り返し実行されます。
  • 3行目のSerial.begin(9600);はシリアル通信の初期設定をしています。
  • 4行目のSerial.print('a');は文字を表示するためのプログラムです。(c言語はprintfでした。)
    練習

    以下の項目をやってみましょう

  • 繰り返し表示
  • 複数の文字(aaa)を表示
  • 数字を表示
  • 変数を表示
  • 改行
  • 2進数を表示
  • 文字と数字、文字と変数などを組み合わせて表示(print関数を複数使う)
  • シリアルブロッタ

2. シリアルモニタから入力

出力を変えたり、プログラムの分岐で使います。

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

void loop() {
  if (Serial.available() > 0) {

    char data = Serial.read();
    Serial.print(data);
  }
}

プログラムの説明
  • 6行目のSerial.available() > 0:入力があるかどうかを調べる
  • 8行目のSerial.read(); :読み取り
  • 9行目のSerial.print(data); :表示
    練習
  • 変数の型をcharからintにしてみよう(ASCIIコード)(シリアルモニタの右下の改行なしとかのところによって結果が変わる)

3. 電圧出力

const int LED_PIN = 13;

void setup() {
  pinMode( LED_PIN, OUTPUT );
}

void loop() {
  digitalWrite( LED_PIN, HIGH);
  delay( 1000 );

  digitalWrite( LED_PIN, LOW);
  delay( 1000 );
}

ArduinoのLEDが点滅します。

プログラムの説明
  • 1行目のconst int LED_PIN = 13;:変数に代入しています。(c言語と同じですね)
  • 4行目のpinMode( LED_PIN, OUTPUT );:13ピンを出力として使うことを宣言
  • 8行目のdigitalWrite( LED_PIN, HIGH);:電圧ON
  • 9行目のdelay( 1000 );:1000ms(1s)待機
  • 11行目のdigitalWrite( LED_PIN, LOW);:電圧OFF
    練習
  • ONOFFのタイミングを変えてみましょう
  • 8行目のHIGHと11行目のLOWは別の書き方があります。

4. PWM

 Arduinoの出力ピンは5Vしか出せません。では3V出したいときはどうすればよいでしょうか?
一つの方法としてPWM(Pulse Width Modulation)というものがあります。高速でONとOFFを繰り返すことで電圧が変わっているのと同様の結果を引き起こす方法です。

int PIN = 3; 
float V = 2.0;
int DUTY = V * 51;

 void setup(){
   pinMode(PIN, OUTPUT); 
 }
 
 void loop(){
   analogWrite(PIN, DUTY);
}

テスターで測ると約2V出力されていることが確認できます。

プログラムの説明
  • 3行目のint DUTY = V * 51;:電圧をデューティ比に変換しています。
  • 10行目のanalogWrite(PIN, DUTY);:PWM出力
    練習
  • ピンを変えてみよう(~がついているピンがPWMが使える)
  • 電圧を変えてみよう
  • V * 51 を説明してください
  • ほかの電圧を制御する方法を考えてみてください

5. 電圧読み取り

 ボタンのON、OFF判定などに使います。

const int DIN_PIN = 4;

void setup(){
    pinMode( DIN_PIN, INPUT );
    Serial.begin( 9600 );
}

void loop(){
    int value;
    
    value = digitalRead( DIN_PIN );
    Serial.println( value );

    delay( 1000 );
}

4ピンとグラウンドをつなぐと0、5Vをつなぐと1が表示される

プログラムの説明
  • 4行目のpinMode( DIN_PIN, INPUT );:入力に設定
  • 11行目のvalue = digitalRead( DIN_PIN );:読み取り
    練習
  • ピンを接続しないと0になったり1になったりしてしまいます。これを解決しましょう。(PULLUP、PULLDOWN)
  • PWMと組み合わせてみましょう(PWMの様子を確認できます。)

6. 電圧を測定

const int VOL_PIN = A0;

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

void loop(){
    int value;
    float volt;

    value = analogRead( VOL_PIN );

    volt = value * 5.0 / 1023;

    Serial.print( "Value: " );
    Serial.print( value );
    Serial.print( "  Volt: " );
    Serial.println( volt );


    delay( 500 );
}

電圧が読み取れます。

プログラムの説明
  • 11行目のvalue = analogRead( VOL_PIN );:電圧読み取り。
  • 13行目のvolt = value * 5.0 / 1023;:0から5vに変換(関係ないですが5.0を5とすると小数点以下が四捨五入されます)
    練習
  • いろいろなピンにつないでみましょう(基本0Vか5V)

7. ライブラリ

 センサを使う際などにプログラムが複雑になる場合ライブラリを使います(Serial.print、Serial.beginなどもライブラリ)。自分で作れますがArduinoの場合GitHubなどでダウンロードできることが多いです。いきなりライブラリを作るのは難しいのでまずはネットで探してダウンロードしたものを使うといいと思います。今回は僕が作ったAD5328(DAコンバータ)のライブラリを例に説明します ライブラリ。 右上のCodeからダウンロードできます。 Auruinoのソフトのスケッチ->ライブラリをインクルード->.ZIP形式のライブラリをインストールで使えるようになります。 使用する際はまずはsampleファイルを確認しましょう。

練習
  • ファイルを見てみよう(.hファイル、.cppファイル、keywords.txt、library.prorerties)
  • センサの主な通信方式であるI2C、SPI通信について説明しよう。

Arduino学 Ⅱ ~データ通信編~ - NKMRHYTのブログ

  • いろいろなライブラリを使ってみよう
  • ローパスフィルタについて勉強しよう

ローパスフィルタで復習する制御工学 - Qiita