俺のクソレシピ

おもにプログラミングについて俺の趣味についてテキトーに書いています。

Arduino Uno PWMでLEDの明るさを制御する

今回はタイトルにある通り、ArduinoのLEDの明るさをPWMを使って制御していきたいと思います。
余談ですが、今回俺は「Arduino Web Editor」というWebサービスを使ってスケッチをArduinoに書き込んでみました。結構使いやすく、俺はインストール版よりUIが好きです。ただ、アカウントを作ってプラグインをインストールする必要があったので最初は少しめんどくさかったですね。
ということで、余談はこの辺にして今回の本題に入っていきたいと思います。

f:id:myprogramming:20170913191316j:plain

PWMとは

PWM(パルス幅変調)とは、簡単に説明すると素早くON・OFFを繰り返しONとOFFの比率を変えることによって、出力される電力を制御する方式の一つです。つまり、PWMを使うと擬似的にアナログ出力することが可能になります。

ArduinoでPWMを実現するには

ArduinoでPWMはanalogWrite関数を使うことによって実現できます。第一引数にPWM出力が可能なピン番号を、第二引数に出力する電力を0~255までの256段階で指定します。ちなみに、PWM出力が可能なピン番号は、「~」が横に書いてあるデジタルピンです。

f:id:myprogramming:20171031205146p:plain
「~」が横に書いてあるデジタルピンがPWM出力可能

だんだん明るくしてまた暗くしていくものを作ってみた

スケッチはこちら

まず、変数iを定義してfor文で0~255の範囲で増やしていきます。このiの値を使ってPWM出力し10ミリ秒待って次の値に変化させます。同じように暗くしていき、それを繰り返すことによってだんだん明るくなってまた暗くなっていく、という風に動作します。

Arduino言語の文法についてはこちら
Arduino 日本語リファレンス

回路はこちら
f:id:myprogramming:20171031210101p:plain

回路は前回のLチカの13番ピンを9番ピンに変更するだけでOKです。

実際に動作している様子

まとめ

今回はArduinoで、PWMを使ってLEDの明るさを制御していきました。このPWMを使えばLEDだけでなくDCモーターの速さやサーボモーターの角度などを制御したりすることができます。
前回はデジタル出力、今回はアナログ出力をやったので、次はデジタル入力、そしてアナログ入力という風にやっていきたいと思います。

Pythonのリストの要素を入れ替える

今まで、クソめんどい方法でやっていたのでちょっとご紹介。

f:id:myprogramming:20170627164334j:plain

list[i]をlist[j]に、list[j]をlist[i]にしてリストの要素の入れ替えをしたいわけなんですが、

とやってしまうと、list[j]がなにも変わっていないのがわかるでしょうか?

例えば、

とすると、まず、list[0]がFalseになり、それをまたlist[1]に代入してもlist[1]がFalseのままですよね。

そこで、今までやっていた方法だと、

このように入れ替える前にlist[i]を他の変数に代入していたのですが、Pythonでは複数の変数にそれぞれ値を同時に代入できるので、
 
だけで良かったみたいです。

今まで本当にアホなやり方してたんだな…

Raspberry Pi(Raspbian)にArduino IDEをインストールする

皆さんこんにちは。

突然ですが、Raspberry PiArduino IDEをインストールしてみたいなと思って適当にやってみたら普通にできてしまったのでその方法を皆さんにも紹介したいと思います。

なお、この記事にたどり着いた方はRaspberry PiArduinoについての知識がある方がほとんどだと思うのでRaspberry PiArduino自体については解説しません。もし気になったらググれば大量に情報があるので、ぜひ調べてみてください。

f:id:myprogramming:20170924170222p:plain

インストールする

Linuxでインストールといったらapt-getコマンドだと思ってやってみたら、普通にできちゃったのでその方法を説明します。
ブログ的にはこれでうまくいかないほうが面白いんだけど...(笑)

まず

sudo apt-get update コマンドと
sudo apt-get upgrade コマンドで

パッケージを一応更新しておいてください。

パッケージが更新できたら、

sudo apt-get install -y arduino コマンドを

叩けばOKです。

  • yオプションはすべての質問にYesで答えるようにするものです。例えば、「続行しますか」のような質問がでなくなりすべてYesで答えたことになります。

そしたらRaspberry Piを再起動してやれば、左上のアプリケーションメニューのプログラミングカテゴリーと電子工学カテゴリーに入っています。どちらも同じものなので好きな方から起動してください。ちなみに、もし表示されていなかったら設定のMain Menu Editorで表示させることができます。

もし、コマンドから起動したい、という方がいるのなら

arduino コマンドでも起動することができます。

f:id:myprogramming:20170924181325p:plain
アプリケーションメニューに表示されているArduino IDE

f:id:myprogramming:20170924181404p:plain
Arduino IDEを実際に開いてみたところ

まとめ

今回はすごく簡単でした。
俺も少し驚いていて、もっと早くやっときゃよかったな、なんて思ったりしてます。
今後、Raspberry PiArduinoの連携なんかもできたらいいなと思っているので、そちらの方も是非読んでみてください。
皆さんも是非試してみてください。

Arduino Uno(互換機)が届いたぞ! Lチカも成功!

皆さんArduinoを知っていますか?
Arduinoは誰でも始められるように作られたマイコンボードです。
今回Arduinoの互換品を購入してみたので紹介していきたいと思います。

※この記事では動作確認程度しかしていないので詳しい解説はしていません。

f:id:myprogramming:20170913191316j:plain

Arduinoの互換品

まずArduinoオープンソースハードウェアなのでたくさん互換品が世の中に出回っています。
その中で今回購入したものは、Arduinoの中で最もメジャーなArduino Unoの互換機の

EasyWordMall UNO R3開発ボード USBケーブル付属 Arduinoと互換

というものです。
これは、500円くらいで俺の場合、8日で届きました。
ハズレがあるかもと思って3台購入しておいたのですが、全てピン曲がりもなくちゃんと使える状態でした。
本家は1台3000円以上するので、これだと3台1500円位と、とてもお得ですね。
本家1台分で6台買えてしまいます。

ちゃんと動くかLチカしてみた

やはりArduinoといったらLチカ(LEDをチカチカ点滅させることで、ArduinoHello Worldみたいなもの)だと思い、俺もやってみました。
俺は一応Arduinoを以前にやっていたので、スケッチ(Arduinoのプログラム)を書くことができました。

そのスケッチはこんな感じ。

ArduinoとLEDと抵抗の回路。

f:id:myprogramming:20170913195116p:plain


さすがに何も解説がないのはまずいと思ったので、ちゃんと解説しているリンクを貼っときます。
Arduino docs
このサイトはやや情報が古いので、そこは自分の環境と比べて読み替えてください。
例えばこのサイトで紹介されている「123D Circuits」というWEBサービスは今は「Tinkercad」の「Circuits」となっています。
※今回の互換機を使うと、「ArduinoとPCを接続してみよう」の「シリアルポートの設定」の「Windowsの場合」では、デバイスマネージャーに「Arduino UNO」ではなく、「CH340」と表示されるので注意してください。ちなみに、MACについてはわからないのでもし知っている人がいたら、コメントしてくれるとありがたいです。

Lチカしている様子。


まとめ

今回はかなりお得な買い物ができたと思います。
今後、ラジコンとか作ったりできたらいいなと思っています。
これからは、Arduinoについての記事も結構書いていくと思うので、Arduinoを始めてみたいと思う人は是非参考にしてくれるとうれしいです。

JavaScriptで文字列を複数行記述するのが結構簡単だった

ブログを書くのがだいぶ久しぶりになってしまいましたが、今回はJavaScriptで文字列を複数行記述する方法を紹介したいと思います。ちなみにここでの複数行はソースコードは複数行で表記するけど実際には一行として扱われる場合ではなく実際に改行が入る場合です。

f:id:myprogramming:20170626201822p:plain

改行するところに \n を記述する

これは今まで俺が使っていた方法でした。ただ、どこで改行したのかわかりにくいし一行がとても長くなってしまっていました。

クォーテーションではなくグレイヴ・アクセントを使う

この方法はシングルクォーテーションやダブルクォーテーションではなくグレイヴ・アクセントを使って文字列を定義する方法です。グレイヴ・アクセントとは ` のことで Shift + @ で入力できます。この方法を使うと自由に改行してもそのまま文字列を記述し続けることができます。

まとめ

ずいぶんと簡単に複数行の文字列を記述することができるようになりましたね。この方法を使えば、修正したりするときにもすぐ改行してあるところがわかりますね。皆さんもこのやり方でぜひ楽をしてみてください。ではまた今度。

JavaScriptでクソゲーを作ってみた

JavaScriptクソゲーを作ってみたので一応紹介します。

f:id:myprogramming:20170626201822p:plain

作ったゲームのリンク

GSG -Geometric Shooter Game-

このゲームは一切画像を使わず作ってみました。

それと、CSSJavaScriptでは様々な機能を使っているのでその一部を今度紹介したいと思います。

このゲームは改良しているうちにものすごく読みにくいプログラムになってしまったので、このゲームでの解説は省かせてもらいます。解読してみたい人は是非頑張ってみてください。

一応ダウンロードリンクも貼っておきます。

GSG.zip - Google ドライブ

Pythonで名言をツイートするbotを作ってみた

だいぶ遅れてしまいましたが、今回はPythonで名言をツイートするbotを作ってみたので解説します。ちなみに、Raspberry Piを使っていて名言は名言集.comから取得しています。

名言bot
python 名言bot (@py_meigen_bot) | Twitter

名言集.com
名言集.com - 名言・ことわざ・金言・格言集めました

f:id:myprogramming:20170728192959j:plain

名言を取得する

名言を取得する方法について説明します。まず、今回は名言集.comのランダム名言から取得します。HTMLを解析して名言を取得します。まずサイトのHTMLを取得して、その中から取得したい文字列(今回の場合は名言)を取得します。ズラズラ書かれていてもわかりにくいと思うのでまずプログラムを見てもらいましょう。

Python3ではurllib.request.urlopenを使ってHTMLを取得します。ただそのままだと文字化けしてしまうのでデコードします。名言集.comは、utf-8エンコードされているのでdecode('utf-8')でokです。そして、HTMLが取得できたら正規表現で名言とその作者を取得します。

urllibとデコードについて
Python3で、urllibとBeautifulSoupを使ってWebページを読み込む - minus9d's diary

正規表現について
Pythonの正規表現の基本的な使い方 | UX MILK

Pythonでツイートする

次にPythonでツイートする方法について説明します。まずpython-twitterをインストールします。

pip install python-twitter

importするときはpython-twitterではなくtwitterなので気をつけてください。

このソースコードにある"your ..."のところは自分のキーに置き換えてください。

twitterapiキーの取得について
Twitter API Key を取得する方法 | phiary

ちなみにtwitterapiキーを取得するには電話番号をtwitterアカウントに登録しないといけないのですが、俺の場合なぜかパソコンだと登録できなくてスマホだと電話番号の登録ができました。

取得した名言をツイートする

では実際に取得した名言をツイートしてみましょう。さっきの2つのプログラムを組み合わせるだけですね。

これを実行すれば名言をツイートしてくれるプログラムの出来上がりです。・・・ん?これじゃbotじゃない!!

Pythonプログラムを定期的に実行する

botにするには自動で定期的に実行しないといけませんね。定期的に実行するにはHerokuなどがありますが制限がかかっていたり設定がめんどかったりするので、今回は眠っていたRaspberry Pi3を使ってやってみました。ちなみにRaspberry Piのバージョンはなんでもokです。Raspberry Piで定期的にプログラムを実行するにはcronを使います。今回、俺は5分ごとにツイートしようと思ったので設定は以下のようになります。

*/5 * * * * python3 /home/ユーザー名(デフォルトではpi)/meigen_bot.py

cronの使い方について
決まった時間に処理する | Make.

ちなみに近々、Raspberry Piをやったことのない人のためにRaspberry Pi入門の記事を書きたいと思っています。

まとめ

今回はPythonRaspberry Piで名言をツイートするbotを作ってみました。Raspberry Piを使ったため少しお金がかかってしまいましたが、Raspberry Piならbotをやめた後でも使えますし、そこまで高くないのでRaspberry Piを買ってやってみるのもいいのではないでしょうか。今回は名言をツイートするというほぼ無意味なbotを作ってしまいましたが、これを応用すれば天気予報をツイートする実用的なものや、Raspberry Piを使っているのでセンサーから得た情報をツイートするものを作ることだって簡単にできてしまいます。ぜひ皆さんもいろいろなbot作りをしてみてください。