#目的 本稿の目的は, Python を用いて Arduino とシリアル通信を行い, 更に同通信により得た値を数値として処理できるようにすることである. 目標 PC側から Arduino にデータを送信, その内容に応じて Arduino の動作を変化させる PCが, Arduino から受信したデータを数値的に処理できるようにする 具体的目標 PCから文字データを送信し, ArduinoのLEDの明滅を操作するプログラムを組む 超音波距離センサ HC-SR04 から得たデータから数値を取り出すプログラムを組む 上記プログラム言語には Python 3.x を利用する 準備 Arduino Uno Rev.3 USBケーブル LED ジャンパワイヤ 4本 HC-SR04 Python 3.x , Arduino IDE Python モジュール : PySerial 環境 Windows
ArduinoIDEにあるシリアルモニタは、Arduinoの挙動を確認するのに便利です。それに加えて、ウインドウ上部にある入力フィールドから、Arduino本体へ直接情報を送ることも出来ます。ただし、基本的にキャラクター型の1バイトずつ、つまり「1文字」でしか送れません。もし、数桁に及ぶ「数値」を投げたいなら、ちょっとした工夫が要ります。そのため、それほど使用頻度は高くありません(自分的に)。 そこで、シリアルモニタから簡単に大きい数値を送れるスケッチを考えてみました。順を追って説明していきますが、「理屈はいならい」という方は最後のまとめスケッチをどうぞ。 シリアルモニタからの送信 シリアルモニタにはデータを入れるフィールドがあり、文字を打ち込んで「送信」すると、シリアル通信を使ってArduinoにそのデータを送ることが出来ます。 送信に使う関数 シリアル通信の関数は色々用意されていて、普
ものり/monoli @Hakusi_Katei 光を当てると、鏡の向こうで色が変化する「液晶ウィンドウ」ネックレス。3年以上の研究を経て完成しました。来月販売します。 pic.twitter.com/2lcjm2SZ5i ものり/monoli @Hakusi_Katei 博士(工学)。科学なデザイナー。眠いと大体むりです。SHOP: monoli.easy-myshop.jp / material designer. Ph.D. in engineering. 👥: @pixelartpark +3 https://t.co/6BW4wkpEsh ものり/monoli @Hakusi_Katei ◉「液晶ウィンドウ ver.3」です。 ケージに閉じ込められた、液体と結晶2つの性質をあわせ持つ液晶。温度や角度、光源によって色彩が大きく変化します。@hamolaty 博士との共同研究により
CooltermとかZtermとかあるけど、Pythonでやりたかったので。 これでRaspberry piのターミナルからArduinoをコントロールできる。 https://github.com/shohei/avr_parrot_echo ポイントとしては、 (1)マルチスレッドを実装する。キーボード中断が入った時の処理としてスレッドをキルしないと、プログラムが終わらない。 (2)raw_inputの後ろに改行コードを付けて送る。付けないとprint data, したときに、即時に標準出力に出ない。 (3)sys.stdout.write()を使うと綺麗に表示される。print data,だと全角文字っぽく表示されてしまった。 (4)ArduinoのSerial.available()的な感じで、通信が安定するまで待たないといけない。 参考:マルチスレッドのキル http://sta
ValueError – Will be raised when parameter are out of range, e.g. baud rate, data bits. SerialException – In case the device can not be found or can not be configured. The port is immediately opened on object creation, when a port is given. It is not opened when port is None and a successive call to open() is required. port is a device name: depending on operating system. e.g. /dev/ttyUSB0 on GNU/
Native ports¶ class serial.Serial¶ __init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)¶ port – Device name or None. baudrate (int) – Baud rate such as 9600 or 115200 etc. bytesize – Number of data bits. Possible values: FIVEBITS, SIXBITS, SEVENBITS, EI
PythonからArduinoにシリアルで文字列を送る場合、pyserialを使って、こんな感じで書くと思います。 import serial ser = serial.Serial() ser.baudrate = 9600 ser.port = 2 # COM3->2,COM5->4 ser.open() ser.write("Hello") ser.portはUSBを抜き差しするたびに変わるので、Arduino IDEでポートを確認し、Macの場合はser.port = "/dev/tty.usbmodem1451"、WindowsだとCOM3に刺さってる場合、ser.port = 2と書くわけですが、抜き差しするたびに変わって面倒ということで、こういう書き方も用意されてます。 import serial import serial.tools.list_ports ser = se
ArduinoなどのマイコンからUSBシリアル変換チップ経由でMacやPC(以下まとめてPC)とシリアル通信すると、適当に書いたPC側のシリアル通信プログラムがフリーズすることがある。これへの対処法が分かったので書いておく。 シリアル通信とバッファ マイコン、PCに限らず、大抵のシリアル通信をする計算機はバッファを持つ。プログラム側はバッファへの読み込み書き込みを行うことでシリアル通信を実現している。マイコンやPCのOSは、相手側から来た信号をバイトに変換してバッファに入れていく。また、バッファに書き込まれたバイトを信号に変換して相手側に送信する。プログラム側ではこの「バッファ」を読み込んだり書き込んだりすることしか出来ないのがポイント。 フリーズの対処法 先に対処法。簡潔に言うとバッファを空にするとフリーズしなくなる。 まず、フリーズしてたプログラムから。この例はopenFramewor
以前、Raspberry Pi 2にsystemdを入れたので、次はその動作を試してみることにしました。 何にしようか考えながらsystemdに関する記事を調べていたところ、 デバイスを表すdeviceタイプのUnitも動的に生成されます。これは、udevが新しいデバイスを認識したタイミングで、「systemd」というudevタグを付けると、それを受け取ったsystemdが対応するUnitを生成して有効化します Systemd入門(3) - cgroupsと動的生成Unitに関する小ネタ - めもめも というのを見かけ、気になりました。 そこで、以下を参考に、「USBデバイス挿入時にサービスを起動する」ことを試してみました。 Linux: Start daemon on connected USB-serial dongle - Stack Overflow 目次 環境 Windows 7
ほとんどの製品にはスイッチがあります。 そのスイッチをポートに入力回路として構成する場合には、プルダウンとプルアップという方法があります。 スイッチの入力を感知する2つの方式 プルダウンとは、あらかじめグランド側と接続をしておいて、入力がない場合はLOWが、スイッチをおされて入力されると5Vが供給されHIGHとなります。 その逆、プルアップとは、あらかじめ5Vと接続しておきHIGHが供給されていて、スイッチの入力でグランド側と接続するためにLOWに変化します。 この変化をポート制御によってスイッチの入力を感知します。 そのためには、外付け部品を加えた回路を用意します。 プルアップの基本的な回路と動作 プルアップ(PULLUP)の基本的な接続方法は下記となります。 Arduino(マイコン)のポートにR(抵抗)で5Vを接続し、グランドとの間にスイッチを設けます。 こうすると、通常はスイッチが
小ネタです。 電子部品で傾斜スイッチとかチルトスイッチとか呼ばれているものがあります。 KKHMF 10PCS SW-520D ボールスイッチアングルスイッチ傾斜スイッチ 出版社/メーカー: Apple Trees E-commerce co., LTメディア: その他この商品を含むブログを見るakizukidenshi.com 傾きでON/OFFが切り替わるスイッチです。先日のこれでも使いました。 筒状の本体の中に、2つの接点と、それに固定されていない導電体が入っています。足を下に立っている状態(写真の角度)だと導電体が接点に触れて通電し、逆さにすると切れます。 回路上はただのスイッチなので、加速度センサで傾き検知するよりずいぶん楽に使えます。 中に入っているという「導電体」の正体なのですが、僕はてっきり金属球か何かだと思っていました。しかし水銀であるという噂を聞いたので分解してみました
ArduinoのTimerに関する情報がまとまっていなかったのと、自分には複雑だったためかいつまんで重要そうなところだけまとめてみます。今後も加筆・修正していく予定です。後学のためにも間違いがありましたらご指摘いただけると幸いです。またこの記事において"arduino"は全てArduino Unoを指します。 なぜTimerが必要か 個人的にはATtiny85(Arduinoの超小型化版のようなもの。詳しくは->ArduinoユーザーのためのATTiny入門)で(擬似的な)サイン波を出すために必要でした。Arduinoではtone()やfor文を使って矩形波で音を出すことは可能ですが、サイン波など矩形波以外の信号を手軽に出すにはMozziなど外部のライブラリが必要でした。 Timerは基本的には正確なタイミングでなんらかのシグナルを送りたい時に必要になるものです。arduinoではdela
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く