#024 黄色帯番外編 Arduino Nano 互換機を購入する【49歳から始めるArduino -黒帯を目指す】

#024 黄色帯番外編 Arduino Nano 互換機を購入する

 Arduinoを学習していると、プロジェクトを作りたくなりますね。そこで課題が発生します。Arduino Unoは高くて大きいのです。そこでArduino互換機を探してみると、Arduino Nanoが小さくてそして安価で安そうです。「びんぼうでいいの」自作が失敗しましたので、この機会に購入することにしました。Arduino Nano 互換機 15,99 Eur / 5個です。

Arduino Nano V3.0.png


 チップがCH340を利用しているため、mac環境ですと、ドライバーをインストール必要がありますが、この価格には大いに惚れました。もう少し調べてみると、ハンダつけが必要なこと、USBのケーブルが異なること、LEDが明るいので消費電力が大きいこと、さらに煙をだして壊してしまうことがあることが分かりました。どれも大きな課題に思えませんでしたので、迷わず購入することにしました。繰り返しになりますが、互換機購入は失敗に終わった「びんぼうでいいの」に続き2度目です。


 ピンをハンダつけし(多少曲がりましたが、問題ありません)、Macで認識させようとドライバーをインストールするのですが、うまく認識してくれません。マニュアル通りしているのですが、ダメです。「びんぼうでいいの」類似のトラブルの再来です。これで1週間ほどハマりました。ハンダ付けには今回は自信がありましたので、半田付け以外の理由をいろいろ調べてみました。ドライバーのインストールも何度か実施してもダメでしたが、感覚的にはmacのOS(シエラ)と既存のドライバーの相性のような気がします。認識しないのが問題だからです。またネットでも同様の課題を抱えている人たちがいました。購入した5つが初期不良とはなかなか考えにくいです。で、結局ドライバーの1.3を入れると繋がるようになりました。「びんぼうでいいの」ではv1.2までトライでした。何が問題だったのか実際は確証が持てないのですが、同様の問題があった場合はこちらのサイトを参照してください。分かりやすく解説しています。ちなみにgoogle場合は「ch340 mac」でいろいろ出てきます。


 このch340+mac問題はArduino uno互換機の「びんぼうでいいの」を購入した時に生じましたが、解決策が見つからず放置しています。Unoサイズのプロジェクトがあるようであれば、復活させてみようかなと思います。値段で購入したのですが、その後よーく調べてみると完成互換機の方が安いので、今では「なぜ購入してしまったのだろうか???」状態です。


 IDEからの接続はNanoを選択しました。これでLチカをすると、あっさりできました。しかし内臓LEDが眩しいこと。このLEDを潰せば消費電力が大きく下がることはネットで分かりました。また燃えるのはダイオードのようです。今はこのままとして、早速このNanoを使ってI2CのLEDの接続に取り掛かります。


おまけ: int() について

変数変換でint(x)をよく使います。教科書のp43に初めて出現し、リファレンスとしてまとめてあるp265によると「xをint型に変換する」とあります。すなわち整数のみを扱うことになります(勿論ですがマイナスも含みます)。教科書ではint()は例えばp42にあるようにint inputchar;と記載されています。これはinputcharを整数型と宣言したわけです。ところが色々学習をしていくうちに、これは正しくない使い方と思ってきました。変数の定義時には初期値を入れるのが宜しいと言われています。そこで例えば「Arduinoチュートリアル 基礎編」で調べると「宣言時に初期値を設定せずにおくことも可能」とあり、初期値の無い例を正しい宣言方法として示してあります。また初期化が必要な良い例として「変数の初期化は必ず必要なのでしょうか?」がありました。おまじないと思って、初期化をすることをこれからすることにします。


おまけ: 定数定義で#defineなのか intなのか?

これも似たような例ですが、出てきました。ずっと悩んでいたんですよね。お馴染みの使い方で void setup()の前に例えば #define LED_PIN 13としていますが、これはint LED_PIN 13とも書くことが出来ます。さてどちらがいいのでしょうか?正解はどちらも正しいが、状況によって異なるとなります。こんなのわかんないですよねー。で調べるとありました。ここで100%の正解がありました。「[C] 定数の定義は,const intか,#defineか,それとも」で詳しく書いてあります。で自分の結論はしばらくは#defineを利用します。それは配列時の制限が少なそうに見えました。こうして選択肢があることそしてその理由が分かることはとても大事と思いました。



コメント