マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

SwitchScience製ESPr® Developer(ESP-WROOM-02開発ボード)でMicroPythonを使う

2018年04月21日 | 電子工作
インタープリターのPythonをマイコンボードで使用できるなんて、もしかしたらマイコンボードの最終型なのではないか(ちょっと言い過ぎ)、もっと言ってしまうとMicroPythonを動かすためにマイコンボードは進化を続け、私もこれに出会うために生まれてきたのではないかという信念を持って、このMicroPythonに取り組んでいます。
 
私が使用しているパソコンのOSはLubuntu1804です。使ったボードはSwitchScienceESPr® Developer(ESP-WROOM-02開発ボード)です。今ではESP-32がでてきてから、ちょっと肩身の狭くなってしまったチップですがまだまだいけます。
 
MicroPythonのホームページからesptool.pyesp-8266**.binをダウンロードしてきてから
まずはフラッシュをクリアします。
sudo python3 esptool.py --port /dev/ttyUSB0 erase_flash
次にボードにMicroPythonを書き込みます。
 sudo python3 esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20171101-v1.9.3.bin 
次は MicroPythonをインストールしたボードと通信するソフトをLubuntuにインストールします。
sudo apt-get install picocom
コマンドプロンプトでpicocomを起動してMicroPythonにアクセスします。
sudo picocom /dev/ttyUSB0 -b115200
次はUSBからではなく、Wi-FiからMicroPythonにアクセスすることができるらしいけど、英語が難しくって理解できないんだよね。
どなたか協力してください。お願いします。 
参考したホームページは
https://micropython.org/
https://github.com/micropython
です。
Enjoy Python!! Enjoy MicroController!!
コメント

秋月電子のデータロガーを使ってみた。

2018年03月21日 | 電子工作
  • 一般的にデータロガーは値段が高い。そこで秋月電子のデータロガーとシリアル−USB変換ケーブルを購入して使用してみようと考えた

  • ただ、このデータロガーの入力端子はメスピン、実際に使うには使いづらい。そこで木板に基盤を固定して端子台をつけた。

  • データロガーの入力端子と端子台を接続したのは2×20の昔のハードディスクのパラレルケーブル。ピンは順番がバラバラなので端子台に順番に接続した。(マイナスの端子にはGNDを接続)

  • 端子台に可変抵抗器を接続し、スタンドアロンで動作を確認。

  • ログデータを吸い上げるにはPCが必要。そこで接続したPCのOSはUbuntu、Wine上でCD−ROMに入っていたデータ管理ソフト「AKI PIC LOGGER」を動作させ、一通り動作を確認できました。
    (補足:AKI PIC LOGGERは本来Windowsのソフトです。WineはLinux系のOS上でWindowsのソフトを動作させるソフトです。ただ、エミュレータではないらしい。)

  • あと、WineのためにUSBのシンボリックリンクを追加してください。
    ~/.wine/dosdevices/ に
    ln -s /dev/ttyUSB0 com1

    以下のURLを参考にしてください。https://wiki.winehq.org/Wine_User%27s_Guide#Serial_and_Parallel_Ports


  • 今どきのグラフィックが派手なデータロガーと異なり、秋月のデータロガーはかなり地味ですが、データロガーとしての最低限の機能は十分にあります。PCを接続してもリアルタイムでグラフをグラフィック表示できないことはご承知ください。

  • 編集後記:将来、Raspberry PiとPythonを利用して操作したかったので、PC−データロガー間の通信の仕様を秋月に聞いてみたのですが、「ソースコードがCD−ROMに載っているのでそれを参考にしてください」ということでした。結果的に私のスキルでは読むことができませんでした。もともとプログラミングヘタレな私にはアセンブラなんかもっと無理! ただ、UbuntuとCutecom(シリアル通信用ターミナルソフト)を利用し、「V」コマンドでデータロガーのファームウェアのバージョンをターミナルソフトに表示することは成功しました。もし、興味がある方はこれ以降をお願いいたします。

コメント

SHARPのテレビをパソコンからArduino経由で操作する

2018年01月03日 | 電子工作

事の発端はGoogle HomeもどきであるAIY Project Voice Kitを購入・組み立て・インストールして、とりあえず英語で動作するようになって、英語で質問すると時間や天気と答えるようになったが、「じゃぁ、この箱はなにに使えるの?」と聞かれるとなにも使えない。

それじゃ、とりあえず目の前のテレビを操作しようということになって始めたプロジェクトがこれです。

実は最初は中に入っているRaspberry Piから直接赤外線LEDを発光させてテレビを操作しようと思ったのですが、Linuxのリモコン操作のライブラリーがバージョンによって使い方が違うということが判明しまして、さらに英語が大の苦手な私にとって最新のライブラリーの使い方を理解することは不可能と判断しまして、基本的に赤外線LEDの発光はArduinoにお任せしようとなったわけです。

ここまで引っ張っておきながら今回AIY Project Voice Kitには全く触れていません。

今回のブログはパソコンからシリアル通信でArduinoに文字データを送り、赤外線LEDを 発光させるだけです。

動作確認はSHARP LC-42EX5だけです。

AruinoのスケッチはPanasonicとなっていますが、赤外線の発光パターンがパナソニック形式だっただけで、このスケッチで操作しているのはSHARPのテレビです。(信号コードを変更してあげれば可能だと思う)

スケッチや回路図などのデータは今回からGithubに載せてみました。

SoratobuMacaroniPenguin/PansonicIrRemote

なにか不具合点や質問、要望などコメントしてください。

最後にArduinoのIRremoteライブラリーを開発してくれたKen Shirriffに感謝します。

 

 

 

コメント

Raspberry Piで監視カメラをつくる

2017年04月06日 | 電子工作

息子の部屋でお菓子が無くったという連絡を受けて、監視カメラを作るプロジェクトを立ち上げました。

ハードルは大きく分けて3つ

1.LinuxのプログラムMotionを使いこなす
2.Sambaの設定をする
3.Raspberry Piのメモリーを利用するため、ある程度画像が溜まったら自動的に削除するプログラムを作る



1−1 Motionをインストールをする sudo apt-get install motion
1−2 /etc/motion/motion.confの設定をする
1−3 設定値はサンプルを基本にして適当に設定しました。(静止画のみ、3秒おきに撮影、640×480) ※変更箇所のみピックアップ 

width 640
height 480
minimum_frame_time 3
threshold 4000
ffmpeg_output_movies off
target_dir /home/pi/Pictures
stream_port 0 


1-4 webcontrol_port 8080 であればブラウザで設定ができます。Raspberry Pi上のブラウザのURL欄に127.0.0.1:8080を入力してください。ただし、設定完了後にはSaveをお忘れなく

1−5 デーモンで動かす

 

2−1 Sambaの設定はSambaのホームページからサンプルをダウンロードして多少変更して使用しています。
「Chapter 2. 手軽な始め方: 短気な方への手引き」の「スタンドアローンサーバー」の「Example 2.1. 匿名リードオンリサーバー設定」を参考に設定しました。
ちなみにこの設定では外部から写真を閲覧はできますが、削除はできません。


 
3−1 ある容量以上に達した場合、古いファイルから削除するスクリプトをPythonで作ってみました。

# coding: Shift_JIS
import os
from operator import itemgetter
picture_space = 30720                       # 30720 = 30 * 1024

d_name = '/home/pi/Pictures/'
file_list = []
size_counter = 0

#ファイルデータ取得
for file in os.listdir(d_name):
   file_info = os.stat(d_name + file)
   file_list.append([d_name + file , file_info.st_mtime , int(file_info.st_size / 1024)])
   size_counter = size_counter + int(file_info.st_size / 1024)

#古い順にソート
file_list.sort(key = itemgetter(1))

#ファイルの削除
for file in file_list:
   if size_counter > picture_space:
     size_counter = size_counter - file[2]
     os.remove(file[0])
   else:
     break



コメント

chibi:bitを手に入れて、プログラムを書いてみた

2016年08月31日 | 電子工作

MakerFaireTokyo2016
スイッチサイエンスで手に入れたchibi:bitですが、様々な問題(Bボタン問題とWindows10AnniversaryUpdate)を乗り越え、やっとのことでプログラムが完成しました。

コンパスです。
ネットに掲載しているプログラムを参考にしましたが、最終的に矢印が常に北を指しているプログラムはオリジナルです。

実はこのブロックのプログラムを公開したいと思い、とりあえずプリントスクリーンしたのですが解像度が足りなくなってしまい、うまく公開することができません。
次に文字スクリプトにコンバートしてみたのですが、コピーすることができません。

なんかいい方法はないものですかねぇ。

このchibi:bitはBBC micro:bitの互換機です。
その中にはBluetooth、磁気センサー、5×5LED、ブロックによるプログラムなどいままでにない素晴らしいワンボードマイコンなのですが、かなり惜しいです。
先ほど話したネットでの公開方法も惜しいと思えることの一つです。
その他、入出力端子が基板の端についているというのはとっても斬新なアイデアなのですが、接続できるスロットが手に入らない。(もしかしたら、私が見つけられないだけなのかもしれないが、見つかる気配がない)
さらに情報が少ない。

私自身、実はこのchibi:bitが初mbedなのです。
いままでarduino推しだったのでmbedに触ったことがなかったのですが、結構面白いと思います。
ユーザーがネット上に掲載する情報がもっと多くなったら、とってもよいマイコンボードになると思います。

コメント

家庭用NASを作っています。

2015年07月26日 | Linux
なんか、家族の個人個人がパソコンなりタブレットやスマホを持つようになり、データの一元管理がしたくなったのでNASを作ろうと計画しています。

パソコンは以前、WindowsXPが動いていたやつを利用します。
OSはOpenMediaVaultを選びました。

インストールは他のホームページを参考にしていただくとして、問題はPCに接続されているHDDが1台だけだと何かと不都合であるということです。

このOpenMediaVaultはインストール時にはハードディスクのすべての領域をOSとしてインストールしてしまいます。
確かに仕事等で使えのであればOS用のHDDとデータ用のHDDは別にするのでしょうが、個人で使用するNASにはたかだか2GBのOS領域のためだけにHDDをまるまる一台さくなどはできません。それに最近のHDDの容量はデカイですからね。

そこで、1台のHDDでOS領域とデータ領域をシェアする方法を書きます。

まずはUbuntuなどのイメージファイルをダウンロードしたものをCDに焼いておきます。

それからOpenMediaVaultをインストールします。(この場合、クリーンインストールしますのでHDDに入っていたデータは全て消えます)



それからCDに焼いたUbuntuをLiveCDとして起動し、GPartedを起動しパーテーションの領域の変更をします。


そのまま、このソフトで空きとなった領域に新しいパーテーションを作成します。

再び、OpenMediaVaultを起動すれば、WEB画面からデータ領域を指定し、使用することができます。
コメント

LEDの照明器具の調光装置を自作する

2015年05月06日 | 電子工作
概要
俗に蛍光灯が一般的だった時代が終わりLEDと変わりました。
40W2灯用逆富士型蛍光灯器具いわゆる「逆富士」で通っていた名称もLED時代には形も変わり「ベースライト」という名称が一般的になりました。

我が家の子供の部屋の2段ベット風ロフトの下が暗いのですが、明るさの調整が微妙だということで調光付きのLEDベースライトをつけようと思いました。当然ながら照明器具だけでは調光ができず、別途調光装置が必要です。しかし、メーカー製の調光装置は値段が高い。
そこで電子工作で何とかならないかと考えたのが今回の企画です。

注意事項
しかし、お断りをしておかなければならないことがあります。

当然ながらこの記事を読んで同じものを作ってみようと思われることは大変結構なことですが、自己責任でお願いいたします。
それからもっと大切なことですが、この記事を書いている時点で実際にLEDベースライトで動作を試せていません。

試せていない理由はLEDベースライトを間違えて購入してしまったからです。
読者の方に同じ轍を踏まさないためにも間違えた理由をここに書いておこます。

私の場合、蛍光灯換算で20W1灯用タイプのベースライトを買いました。
本来購入しなければならなかった蛍光灯器具は
三菱電機製 組み合わせ形名 MY-L215030N AZH(ライトユニットEL-LU21503N AZH + 器具EL-LHL20700)ですが、
実際には私がAZHというところを未記入で発注してしまったため、電材屋さんで一般時な方のAHTNの記号が補填され 
三菱電機製 組み合わせ形名 MY-L215030N AHTN(ライトユニットEL-LU21503N AHTN + 器具EL-LHL20700)
が来てしまいました。
開封前に気がつけば返品もできたのでしょうが、調光ができないことがわかってから型番が違うことに気がついたのでかなりの後の祭りでした。


とりあえず作ってみた
ArduinoのPWM機能を使います。ArduinoのPWMの出力は5V、ベースライトのPWMの入力信号は10V前後らしいのでトランジスタで増幅します。



int analogPin = 3;
int pwmPin = 3;
int val = 0;

void setup() {
}

void loop() {
  val = analogRead(analogPin);
  analogWrite(pwm Pin, val / 4);
}


とりあえず動かしてみた

実際は

このようになります。

簡易ですがオシロスコープで見てみました。
Arduinoの出力はきれいなパルスだったのですが、トランジスタを通した途端に汚いパルスになってしまいました。
原因は二次側に接続されていないからだと思われます。


早めに今あるLEDベースライトの行き先を決めて、新たに調光付きLEDベースライトを購入して試してみたいと思います。


コメント

Arduono+Python+Firmataの今日の成果

2014年11月26日 | 電子工作
先日のラズパイコンテストに応募してから逆にArduono+Python+Firmataに魅せられて、頑張っています。(念の為、別にRaspberryPiが嫌いというわけではないです)

とりあえず、今日完成した成果から

Arduonoのシールドは何年か前のMakerFaireTokyoでスイッチサイエンス + セニオネットワークのワークショップに参加した時に娘がハンダゴテを使用して作った「五徳バーLEDシールド」です。

その時に使われていた教科書がどこかに行ってしまったので逆にハード側から調べたのですが、バーLEDのしくみが分からない。
ホント、四苦八苦して調べたら、Complementary LED Driveという方式で点滅していることが判明。

参考:パレットソフトさんの複数LED制御のページの「サンプルプログラム(その2:Complementary LED Drive)」という項目。

とりあえず、作ってみたスケッチはこちら

from firmata import * 

a = Arduino('/dev/ttyUSB0',baudrate=57600) # 3 for COM4

#[Z,Z,Z,L,H]→Z:入力にするポート、L:出力LOWにするポート、H:出力HIGHにするポートの順番で配列(リスト)

led_matrix = [[2,3,4,1,5],[1,3,4,2,5],[1,2,4,3,5],[1,2,3,4,5],[2,3,5,1,4],[1,3,5,2,4],[1,2,5,3,4],[1,2,3,5,4],[2,4,5,1,3],[1,4,5,2,3],[1,2,5,4,3],[1,2,4,5,3],[3,4,5,1,2],[1,4,5,3,2],[1,3,5,4,2],[1,3,4,5,2],[3,4,5,2,1],[2,4,5,3,1],[2,3,5,4,1],[2,3,4,5,1]]


def led_print(n):
#毎回、一旦全部のポートを出力LOWにしている。
    for j in range(5):
       a.pin_mode(n[j] + 4, firmata.OUTPUT)
       a.digital_write(n[j] + 4, firmata.LOW)

#入力にするポート、出力LOWにするポート、出力HIGHにするポートの順番で設定

    print 'SEG' + str(n[0] + 3) + '= Z'
    a.pin_mode(n[0] + 3, firmata.INPUT)

    print 'SEG' + str(n[1] + 3) + '= Z'
    a.pin_mode(n[1] + 3, firmata.INPUT)

    print 'SEG' + str(n[2] + 3) + '= Z'
    a.pin_mode(n[2] + 3, firmata.INPUT)

    print 'SEG' + str(n[3] + 3) + '= L'
    a.pin_mode(n[3] + 3, firmata.OUTPUT)
    a.digital_write(n[3] + 3, firmata.LOW)

    print 'SEG' + str(n[4] + 3) + '= H'
    a.pin_mode(n[4] + 3, firmata.INPUT)
    a.digital_write(n[4] + 3, firmata.HIGH)

    a.delay(0.02)

#本文
a.delay(2)
while 1:
    for i in range(20):  
        print str(i) + " = " + str(led_matrix[i])
        led_print(led_matrix[i])


まあどれをとっても最初にしては上出来では・・・
コメント

パソコンから直接Arduinoの入出力を操作する。

2014年11月19日 | 電子工作
先日、「みんなのラズパイコンテスト」に応募してから、私の電子工作熱が復活したようです。
今度はFirmataをやってみたくなりました。

Firmataとはパソコンの高級言語やProcessingからArduinoの入出力端子に直接アクセすることができる方法です。
ArduinoにはあらかじめFirmataのスケッチをコンパイルして入れておきます。

先日、ちょこっと使用しようしたPython言語に惚れ込んでしまいましたので、最終的にはPythonからFirmataを使用したいと思っています。

とりあえず、ProcessingからFirmataを使用してみます。

なにも知らない私が参考にさせていただいたWebページは以下のとおりです。
です。これでArduinoが接続されているUSBの番号を知らないとFirmataが使えないことを知りました。サンプルなども大変参考になりました。

何に使いたいのかも、何に使えるのかも全くわからないですが、楽しみながらやりたいと思います。
コメント

「みんなのラズパイコンテスト」に応募してみた

2014年11月12日 | Weblog
一週間でコンテストに応募するための電子工作をイチから作るなどはかなり無謀ですが、とりあえず作って応募しました。
モットーは「参加することに意義がある」です。

今回、応募したコンテストのは「みんなのラズパイコンテスト」です。

ラズパイと聞いて、わからない人のために簡単に説明をすると正式名称はRaspberryPiという名刺サイズの高性能マイコンボードです。名刺サイズなのにLinuxの仲間をインストールして一昔前のパソコン並みに動かすことができます。
このマイコンボードとパソコンの大きな違いは外部に簡単に入出力をすることができるポートを持っていることです。基本的にRaspberryPiで電子工作というとこのポートを使ったものになります。


今回、作ったのは「簡単ホームセキュリティシステム」です。
本当はオチャラケな電子工作にしたかったのですが、残念ながら実用的なものになってしまいました。

ざっくり言ってしまうと、「泥棒さんが家に入ってくると電子メールで知らせる」システムです。

泥棒さんが入ってきたことがわかる部分というのが

ドアについた

センサーと

ブレットボードについた

モーションセンサーです。

これらで泥棒さんを感知すると

ブレットホードについた

LEDが点灯し

LANケーブル経由でメールを送ります。
コメント