3 posts tagged with "arduino"

View All Tags

CocoaBitというオリジナルBitを作った話

CocoaBitというlittleBits拡張モジュールを作ってみて気がついたことを書き連ねておきます。

CocoaBitとは

まずはカンタンにCocoaBitについて説明していこうと思います。

CocoaBitとは、cloudBitと呼ばれるインターネットと通信ができるモジュールが日本では技適のため使えないため、開発された拡張モジュール(拡張Bit)です。

私が作成しているNefryをベースとしており、NefryのメリットであるWiFiやモジュールの設定を簡単に出来る点を引き継ぎ、littleBits向けにさらにカスタマイズしています。

(CocoaBitはまだ販売されてませんが、反響があれば…

CocoaBitのサイトはこちら

cocoaBit

カンタンにCloudBitがどのようなものか分かったところで作ってみて気が付いたメリットデメリットについて話してみようと思います。

メリット

手軽に試せる

なんといってもこれが一番のlittleBitsと繋げられるメリットだと思います!

普通の電子工作であると半田付けが必要だったり、ブレッドボードにピンを何本も刺さないといけなかったりするのが、littleBitsなら繋ぐだけでいけます!磁石で繋がるので間違えることもない!

子どもでもあそべる

向きを間違えないため、こどもに任せてしまっても問題なく作ることができます!

子どもももちろんですが大人でもロジックBitなどもあるので充分に遊ぶことが出来ます!

デメリット

とりあえずお高い 

littleBits自体セットで販売などもされているため若干安くなったりしますが、それでもお高い…

これは特に多数のBitがあるとより楽しめるのですが、揃えるまでが…

ときどき接触がわるいときがある

磁石で接続しているため仕方無いのですがカンタンにとれてしまいます。それはlittleBitsの手軽に繋げられるとこと関わるので難しいところです…

(Bitを留められるボードもあるのでそれで解決するところですが…

bitの形に制限がある

これもlittleBitsの世界なので仕方無いところですが、公式からこのようなサイズで作るといいよ、という情報が出ています。

(これも無視して作ることも出来ますが、littleBits同士キレイに揃うといいので出来るだけ合わせましょう。

オリジナルのBitをつくるまで!

私の備忘録を兼ねて今回のCocoaBitを作成した流れを説明していこうと思います。

まずは、どんなものを作るのか検討しよう。

どんなものを作るのか検討すれば、必要な部品数が判明すると思われます。その部品から必要となるであろうサイズを割り出します。

そのサイズからその部品が収まるBitのサイズを選びます。

こちらのサイト内にあるHDK manualのリンクをクリックします。

よりプロフェッショナルなTIPSについてはHDK manual やTips & Tricks もチェックして下さい。

ファイルがダウンロードされるのを待って、Design\Design Manual\PDFsの中にあるUser Interface Considerations for littleBits Module Design.pdfを開き部品が収まるサイズを探します。

無事に見つかったら図の下にある英語の文字を覚えておきましょう。

さくっと回路を起こしていこう

eagleのテンプレートファイルがGitHubで公開されているのでそれをベースに作成するのがお勧めです。

私はKicadの方が好きなので、採寸をまねて作成しました。 こんな感じにできれば、問題ありません。

回路ができれば、SeeedStudioさんやElecrowさんを作成してもらいましょう!

## 部品をそろえよう

まずは、littleBitsの公式サイトからBITSNAPSというlittleBitsの両端を購入しましょう。

もしくは、littleBitsのHardware Development Kitを日本の代理店であるKORGさんから購入することもできます。

あとはほかに必要な部品を購入していてください。

組み立てよう!

BITSNAPSともろもろの部品をつければ、無事にオリジナルの拡張Bitが出来上がりました!

このあたりもSeeedStudioさんやElecrowさんの部品実装サービス使うと大変便利です。 CocoaBitも作成していただいています。

#まとめ

そもそも、littleBitsの拡張することができるなんて思いませんでした。 BitSnaps自体がちょっと高価ではありますが、自分好みのものをつくれるメリットは大きいと思います。

回路を作成するなど難易度は高めですが、完成度も高いので是非お勧めします! よいlittleBitsライフを!

Arduino勉強会資料

ArduinoIDEをダウンロードする

https://www.arduino.cc/

こちらからダウンロードしましょう

早速Lチカしてみよう

ハードウエア入門しよう

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

LEDを繋いでみよう

向きを間違えないように!

本当はちゃんと抵抗を入れましょう。 LED 制限抵抗 で検索!

プログラムの解説 setup

起動したときやリセットを押した時に一度だけ呼び出されるのがsetup()の内容

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

プログラムの解説 loop

電源が入ってる時に何度も呼び出されるのがloop()の内容

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

プログラムの解説 digitalWrite

digitalWrite関数は、ピンの出力をHIGH or LOWに変更することができます。

digitalWrite(13, HIGH);

delay関数は、次のコードまで待つことができます。時間の単位はミリ秒です。 1000ミリ秒=1秒

delay(1000);

pinMode関数は、そのピンを入力ピンか出力ピンに指定することができます。

pinMode(13, OUTPUT);

for文を使ってみよう!

for文とは何度か繰り返したい処理をするプログラムを作成する時に便利なものです!

for(int i=1;i<=5;i++){繰り返したい処理}
for(初期値;継続条件;繰り返すたびに変化させたい値){繰り返したい処理}

ほかにもwhile文やdo~while文などが繰り返しさせることができます。

プログラム

実際に試してみようと思います。

for(初期値;継続条件;繰り返すたびに変化させたい値){繰り返したい処理}

リセットしたときにLEDを20回点滅させるプログラム

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
for (int i = 1; i <= 20; i++) {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

if文を使ってみよう!

if文とは、Arduinoに指定した条件になったときだけある処理をしたいといった分岐したいときに使うものです。

if(条件式){実行したいもの}

プログラムはif文やfor文などの組み合わせでできています。 言語が違うもののスマホのアプリなども同じようにしてできています。

プログラム

スイッチが押されたときだけLEDが点滅するものをつくってみよう

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
pinMode(8, INPUT_PULLUP);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
if (digitalRead(8) == LOW) {
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
}

サーボを動かしてみる

サーボとは角度を指定して回すことができるモータです。 線にそれぞれ意味があるのでArduinoと接続を間違えないように!

プログラム

ArduinoIDEにプログラムを書いてみましょう

#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

RGBLEDを動かしてみよう!

前もって、ライブラリをインストールしておきましょう!

プログラム

#include <Adafruit_NeoPixel.h>
// RGBLEDに出力するピン番号
#define RGBLED_OUTPIN 2
// Arduinoにぶら下がっているRGBLEDの個数
#define NUMRGBLED 1
// RGBLEDのライブラリを生成する(色指定はRGBの並びで行う、LEDの速度は800KHzとする)
Adafruit_NeoPixel RGBLED = Adafruit_NeoPixel(NUMRGBLED, RGBLED_OUTPIN, NEO_RGB + NEO_KHZ800);
void setup()
{
RGBLED.begin() ; // RGBLEDのライブラリを初期化する
RGBLED.setBrightness(50) ; // 明るさの指定(0-255)を行う
RGBLED.setPixelColor(0, 0,150,0) ; // 適度に明るい緑の色。(R=0,G=150,B=0)
RGBLED.show() ; // LEDにデータを送り出す
}
void loop()
{
}

ESP8266でWPSを実装してみる

http://bbs.espressif.com/viewtopic.php?t=1096

ソース元はこちら

ESP-WROOM-02にはWPSでWiFiの設定をすることができる環境がつくられているようなのでその解説と結果を報告します。

環境

Arduino IDE 1.6.7 Arduino core for ESP8266 WiFi chip (https://github.com/esp8266/Arduino) v2.2.0

Arduino coreのバージョンが古いと実装されてない可能性があります。

コード

#include <ESP8266WiFi.h>
void Wifi_wait();
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
//WiFi.begin("","")このようにすることでWPSで保存したデータがある場合そちらに接続するようになる
WiFi.begin("", "");
Wifi_wait();
// Wifiに接続していないときにはWPSを開始します
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nAttempting connection ...");
WiFi.beginWPSConfig();
Wifi_wait();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected!");
Serial.println(WiFi.localIP());
Serial.println(WiFi.SSID());
Serial.println(WiFi.macAddress());
} else {
Serial.println("Connection failed!");
}
} else {
Serial.println("\nConnection already established.");
}
}
void loop() {
}
void Wifi_wait() {
int wait=0;
Serial.println("WiFi connecting");
while (wait < 20) {
if (WiFi.status() == WL_CONNECTED) {
Serial.println("WiFi connected");
return;
}
Serial.print(".");
wait++;
delay(250);
}
Serial.println("Connect timed out");
}

使いかた

Wifiに接続失敗したときにWPSで設定中のルータをさがしに行きます。

WPSで設定中のものがあったとき、ESP-WROOM-02はそのルータから設定を取得し、今後そのルータに接続するようになります。

Wifiに詳しくない人でもESP-WROOM-02を手軽に扱えるようになる技術だと思います、

結果

私の所持しているWifiルータではWPSでの接続は成功しませんでした…

それは、私の持っているWifiルータが悪いのかもしれないのでもしよければ、試して成功したかどうか教えてください。