Kanade Labo

かなで研究所

ArduinoでLチカ(初心に帰って)

こんにちは かなで です。

本サイトでは、触れてなかったのですが、結構前にArduinoを使って、色々作っていたことがあります。

ただしばらく扱ってなかったので、なんとなくは覚えてても、いざ使うにはちょっと怖いと思ってたりします。(※過去にArduino破壊経験者なので)

そんなわけで、リハビリというか、感覚を取り戻すべく、初心に帰っていろいろ試していきたいと思っているところです。

今回の記事では、Arduino初心者がまずやること。「Lチカ」をやりたいと思います。

「Lチカ」とは、「LEDをチカチカさせる」の略で、ようは「LEDを点滅させようという事です。

俗にいう「Hello World」相当ですね。

準備するもの

・Aruduino Uno(の互換機の「びんぼうでいいの」をカスタマイズしたもの)

・PCとつなぐケーブル(A-Bタイプ)

①Arduino IDEを開く

②PCとArduinoを接続

 LED1が光りました。(きっと電源が投入されたんでしょう

③ファイル→スケッチ例→01.Basics→Blinkと押していきます。

開いたスケッチには以下のように書かれています。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

こちらに説明書きを加えてみます。

void setup() {
  // ここに書いてあるものは、最初に1回だけ実行されるものです。
 pinMode(LED_BUILTIN, OUTPUT);  //LED_BUILTINをOUTPUTモードに変更
}

void loop() {
  // ここに書いてあるものは、ずっと無限ループするものです。 
  digitalWrite(LED_BUILTIN, HIGH);   // LED_BUILTINをHIGH状態に変更
  delay(1000);                       // 1000ミリ秒待つ
  digitalWrite(LED_BUILTIN, LOW);    // LED_BUILTINをLOW状態に変更
  delay(1000);                       // 1000ミリ秒待つ
}

わかりましたでしょうか?

初心者モードの私にはわかりません(おい

という事で、これをもっと説明していきます。

まず、「LED_BUILTIN」とは何か。これは「Arduinoに実装されているLED」という事を指します。

これをOUTPUTモードに変更と書きましたが、OUTPUTに設定することで、このLEDに向けて「5Vの電圧をかけることができるモードになったといえます。

そして、「LED_BUILTINをHIGH状態に変更」とは、5Vの電圧を「かけている状態に変更」

「LED_BUILTINをLOW状態に変更」とは、「電圧が全くかかっていない状態に変更」という事になります。

これを踏まえて、コメントをもっと簡単にしてみます。

void setup() {
  // ここに書いてあるものは、最初に1回だけ実行されるものです。
 pinMode(LED_BUILTIN, OUTPUT);  //Arduinoに実装されているLEDに電圧をかけることができるようにする
}

void loop() {
  // ここに書いてあるものは、ずっと無限ループするものです。 
  digitalWrite(LED_BUILTIN, HIGH);   // Arduinoに実装されているLEDに電圧をかける=LEDが点灯する
  delay(1000);                       // 1000ミリ秒待つ
  digitalWrite(LED_BUILTIN, LOW);    // Arduinoに実装されているLEDに電圧をかけない=LEDが消灯する
  delay(1000);                       // 1000ミリ秒待つ
}

こんな感じでどうでしょうか。

回りくどい言い方をしてみましたが、なんとなくわかった気になれるんじゃないでしょうか。

つまり、このスケッチをArduinoに書き込むと、LED点灯→1秒待ち→LED消灯→1秒待ち→LED点灯…(略

という動作をするわけですね。

では実際に書き込んでみましょう。

っとその前に、実際に書き込めるようになっているのか確認してみます。

こちらのチェックボタンにカーソルを合わせると、「検証」と出てきます。

そのままクリックしてみましょう。

このように「コンパイルが完了しました。」と表示されました。

特にエラーメッセージもないようです。

では続けて書き込みを行います。

こちらの右矢印ボタンにカーソルを合わせると「マイコンボードに書き込む」と出ます。

クリックしてみましょう。

すると、「シリアルポートが選択されていません。シリアルポートを変更して、もう一度書き込みますか?」と表示されました。

これは初期設定的なことを一切やっていないので、出たメッセージです。

私の場合は、「COM3」という選択になりましたが、「COM*」の数字の部分は人によって異なりますし、複数ある場合もあります。

ぶっちゃけ間違ったものを選んでもエラーになるだけなんで、とりあえず片っ端から選択してみるのもありかなと思います。

ちなみに、ここでCOMが表示されない場合、ArudinoとPCが正しく接続されていない可能性があります。

一度つなぎ直しをしてみてください。(Arduino用のドライバーがインストールされていない等の可能性もあります)

とりあえず「COM3」でOK進めてみます。

しばらく「マイコンボードに書き込んでいます…」の状態で無反応となったあげく…

エラーメッセージが出てしまいました。

Arduino:1.8.19 (Windows 10), ボード:"Arduino Uno"

最大32256バイトのフラッシュメモリのうち、スケッチが924バイト(2%)を使っています。

最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。

最大32256バイトのフラッシュメモリのうち、スケッチが924バイト(2%)を使っています。

最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。

スケッチの書き込み中にエラーが発生しました

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x19

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x19



「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

すんなり進んでしまうより、こうやって躓いた方が覚えるからいいんです!

あえてメッセージは一旦置いといて、先ほど選んだCOM3があってるのかを確認してみます。

ツール→シリアルポート と開いたときに、「COM3」の選択肢がありますね。

ここで、ArduinoとPCのケーブル外してみます。

シリアルポートの選択肢がなくなってしまいました。

つまり、Arduino向け=COM3で間違いなかったという事ですね。

ではケーブルはつなぎ直して…次は…

ツール→ボードを選ぶと「Arduino Uno」が選択されていました。

基盤的にUnoの互換機を使っているので、「Arduino Uno」で問題ないはずです。

一応、「ボード情報を取得」を押してみます。

なんだこれは…

よくわかりませんが、軽く調べてみると、「CH340」というチップのことを指すみたいです。

これ専用のドライバをインストールせよ と書かれているサイトもありましたが、

今のPCを見ると

ちゃんとドライバは入ってそうです(バージョンが若干古いですが)

なので、一旦ここはクリアという事にします。

もしドライバが入ってない場合は、「http://www.wch.cn/download/CH341SER_EXE.html」こちらからダウンロード&インストールすればよいようですが、私はダウンロードしていないので割愛します。

あとは…

書き込み装置は「AVRISP mkII」でよいという噂…

一つ気になってるのが、ICチップ「ATMega328PU」なんですが、

家に複数個あるんですが、もしかしたら壊れてるやつだったりブートローダが書き込まれてないやつだったりをひいちゃった可能性があるかなと。

という事で、このチップを別のやつに入れ替えたところ…

すいません。すんなりイケてしまいました(汗

書き込みボタンを押すと、一瞬LEDがチカチカッと。

そして、LED点灯→1秒待ち→LED消灯→1秒待ち→(以下ループ)

が正しく動作していることが確認できました。

なぞに遠回りしたLチカでした。

最後までお読みいただきありがとうございました。
気になることがあったら、コメント頂けると嬉しいです。
自主学習も兼ねて記事にするかもしれません。

-Arduino/ATMega328P