Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Touchéの仕組みを理解 - ProcessingとArduinoの連携
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Atsushi Tadokoro
June 16, 2014
Technology
2.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Touchéの仕組みを理解 - ProcessingとArduinoの連携
Atsushi Tadokoro
June 16, 2014
More Decks by Atsushi Tadokoro
See All by Atsushi Tadokoro
デザイン言語総合講座 - クリエイティブ・コーディング
tado
0
2.8k
Tumblrを使う4 - Webサイトを構成する、固定ページとタグ
tado
0
1.8k
Tumblrを使う3- カスタムHTMLテーマの作成
tado
0
460
Processing.jsによるデータの可視化と生成的表現
tado
1
1.9k
Tumblrを使う2 - テーマをカスタマイズする
tado
0
380
Github Pagesで作品を公開、Automatic Page Generatorでサイトを生成
tado
0
1.6k
TumblrでWebサイトを作成
tado
0
720
bmaw14 第2回: Touchéセンサーを使う1 Touchéセンサーを作成する
tado
0
2.2k
Webサーバーの準備 - Github PagesでWebサイト開設
tado
0
1.5k
Other Decks in Technology
See All in Technology
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
610
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
4.4k
現場のトークンマネジメント
dak2
1
200
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
250
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
280
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
390
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
150
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
0
380
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
300
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
220
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
180
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
180
Featured
See All Featured
Abbi's Birthday
coloredviolet
3
8.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
170
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
The Limits of Empathy - UXLibs8
cassininazir
1
370
sira's awesome portfolio website redesign presentation
elsirapls
0
290
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
240
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
Chasing Engaging Ingredients in Design
codingconduct
0
230
Transcript
CNBXୈճ 5PVDIÉͷΈΛཧղ 1SPDFTTJOHͱ"SEVJOPͷ࿈ܞ ݄ ଟຎඒज़େֶใσβΠϯֶՊϝσΟΞܳज़ίʔε ాॴ३
ࠓͷ༰ ‣ 5PVDIÉͷதΛཧղ͢Δ ‣ ࠓճɺओʹιϑτΣΞଆͷΈΛཧղ ‣ 1SPDFTTJOHͱ"SEVJOPͲͷΑ͏ʹ࿈ܞ͍ͯ͠Δͷ͔ʁ
1SPDFTTJOHͱ"SEVJOPͷ࿈ܞ
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 5PVDIÉͷ͓͓·͔ͳਤղ 5PVDIÉ "SEVJOP ෦ʹϓϩάϥϜΛଂ 1SPDFTTJOH ࿈ܞ 64#
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 1SPDFTTJOHͱ"SEVJOPΛ࿈ܞ͢Δํ๏େ͖͚ͯͭ͘ ! ‣ طଘͷϥΠϒϥϦΛ༻͢Δํ๏ ‣ "SEVJOPଆʹ'JSNBUBϥΠϒϥϦ ‣ 1SPDFTTJOHଆʹ"SEVJOPϥΠϒϥϦ
‣ 1SPDFTTJOH͔Β"SEVJOPͷೖग़ྗΛૢ࡞͢Δ ! ‣ γϦΞϧ௨৴Λࣗ࡞͢Δํ๏ ‣ ֎෦ϥΠϒϥϦ༻͠ͳ͍ ‣ "SEVJOPͱ1SPDFTTJOHํͰɺγϦΞϧೖग़ྗͷϓϩάϥϛϯά
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 1SPDFTTJOHͱ"SEVJOPΛ࿈ܞ͢Δํ๏େ͖͚ͯͭ͘ ! ‣ طଘͷϥΠϒϥϦΛ༻͢Δํ๏ ‣ "SEVJOPଆʹ'JSNBUBϥΠϒϥϦ ‣ 1SPDFTTJOHଆʹ"SEVJOPϥΠϒϥϦ
‣ 1SPDFTTJOH͔Β"SEVJOPͷೖग़ྗΛૢ࡞͢Δ ! ‣ γϦΞϧ௨৴Λࣗ࡞͢Δํ๏ ‣ ֎෦ϥΠϒϥϦ༻͠ͳ͍ ‣ "SEVJOPͱ1SPDFTTJOHํͰɺγϦΞϧೖग़ྗͷϓϩάϥϛϯά 5PVDIÉͪ͜Βͷํ๏
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ ͭͷํ๏Λॱ൪ʹհʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ͜ͷํ๏ͷΠϝʔδ ‣ "SEVJOPʹ'JSNBUBΛɺ1SPDFTTJOHʹ"SEVJOPϥΠϒϥϦΛɺͦΕͧΕΠϯε τʔϧ͢Δ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ·ͣɺ1SPDFTTJOHଆͷ४උ ‣ 1SPDFTTJOHΛىಈ͠ɺ4LFUDI*NQPSUMJCSBSZʜ"EEMJCSBSZʜ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ -JCSBSZ.BOBHFSͷݕࡧ૭ʹʮ"SEVJOPʯΛೖྗ͠ݕࡧ ‣ "SEVJOP 'JSNBUB ͕ग़ͯ͘ΔͷͰɺબͯ͠ʮ*OTUBMMʯϘλϯΛԡ͢ ‣ 1SPDFTTJOHଆͷ४උྃʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ"SEVJOPଆͷ४උ ‣ "SEVJOPʹɺ'JSNBUBͱ͍͏֎෦ͱͷίϛϡχέʔγϣϯͷͨΊͷ൚༻ιϑτΣ ΞΛೖΕΔ ‣ 'JSNBUBIUUQXXXpSNBUBPSH
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ "SEVJOPͰ'JSNBUBΛѻ͏ͨΊͷιϑτΣΞɺ"SEVJOPʹ࠷ॳ͔ΒೖͬͯΔ ‣ 0QFOMJCSBSJFT'JSNBUB4UBOEBSE'JSNBUBΛબ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 'JSNBUB͕ਖ਼ৗʹಈ࡞͢Δ͔࣮ݧ ‣ 'JSBNBUBͷςετ༻ϓϩάϥϜΛΠϯετʔϧ ‣ IUUQXXXpSNBUBPSHXJLJ.BJO@1BHF'JSNBUB@5FTU@1SPHSBN ! ‣ ༻͍ͯ͠Δ04ʹԠͯ͡બɺ.BD049ͳΒ
‣ IUUQXXXQKSDDPNUFFOTZpSNBUB@UFTUpSNBUB@UFTUENH
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ pSNBUB@UFTUBQQΛىಈ ‣ ϝχϡʔ͔Βɺ1PSUEFWVTCNPEFNʜΛબ ‣ %JUJUBM"OBMPHͷೖग़ྗ͕ҰཡͰ͖Δ ‣ ͜ΕͰɺ"SEVJOPଆͷ४උྃʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ1SPDFTTJOHଆͰ"SEVJOPΛ༻͍ͯ͠Δ1PSU൪߸ΛௐΔ ‣ "SEVJOPͱ1SPDFTTJOHʹ64#έʔϒϧΛ༻͢Δ ‣ 64#6OJWFSTBM4FSJBM#VT൚༻తγϦΞϧόε ‣ ํͰ64#Λ༻͢Δʹɺਖ਼͍͠1PSU൪߸ʹଓ͢Δඞཁ͕͋Δ ‣
ిݯίϯηϯτʹܨ͙Α͏ͳΠϝʔδ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰ"SEVJOPΛ༻͍ͯ͠Δ1PSU൪߸ΛௐΔϓϩάϥϜ import processing.serial.*; import cc.arduino.*; ! println(Arduino.list());
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ίϯιʔϧʹσόΠεͷҰཡ͕ग़ྗ͞ΕΔͣ ‣ EFWDVVTCNPEFNʜ͕͔Β͑ͯԿ൪͔Λ୳͢ ‣ ྫ /dev/cu.Bluetooth-Incoming-Port /dev/cu.Bluetooth-Modem /dev/cu.usbmodemfd131
/dev/tty.Bluetooth-Incoming-Port /dev/tty.Bluetooth-Modem /dev/tty.usbmodemfd131
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ίϯιʔϧʹσόΠεͷҰཡ͕ग़ྗ͞ΕΔͣ ‣ EFWDVVTCNPEFNʜ͕͔Β͑ͯԿ൪͔Λ୳͢ ‣ ྫ͜ͷྫͩͱ൪ /dev/cu.Bluetooth-Incoming-Port /dev/cu.Bluetooth-Modem /dev/cu.usbmodemfd131
/dev/tty.Bluetooth-Incoming-Port /dev/tty.Bluetooth-Modem /dev/tty.usbmodemfd131 0 1 2 3 4 5
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ͍Α͍Αɺ࿈ܞΛࢼ͠·͢ ‣ ҎԼͷΑ͏ʹɺ"SEVJOPͷ%JHJUBMʹɺ-&%ΛͱΓ͚ͭ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰҎԼͷίʔυΛ࡞ import processing.serial.*; import cc.arduino.*; ! Arduino arduino;
int ledPin = 13; int portNum = 2; color bgColor = color(0); ! void setup() { size(400, 200); arduino = new Arduino(this, Arduino.list()[portNum], 57600); arduino.pinMode(ledPin, Arduino.OUTPUT); } ! void draw() { background(bgColor); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰҎԼͷίʔυΛ࡞ ! void mousePressed() { arduino.digitalWrite(ledPin, Arduino.HIGH); bgColor
= color(255,0,0); } ! void mouseReleased() { arduino.digitalWrite(ledPin, Arduino.LOW); bgColor = color(0); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHͷը໘ΛΫϦοΫ͢Δͱɺ-&%͕౮͢Δͣʂ .PVTF$MJDL ౮ʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ"SEVJOPͷೖྗΛ1SPDFTTJOHʹૹͬͯΈΔ ‣ Մม߅ʢݻఆ߅ʣͷΛૹͬͯΈΔʢѻ͍қ͍ͷͰʣ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ઢҎԼͷΑ͏ʹ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ·ͣɺ߅ΛจࣈͰදࣔ1SPDFTTJOHଆϓϩάϥϜ import processing.serial.*; import cc.arduino.*; Arduino arduino; int
input = 0; int portNum = 2; ! void setup() { size(400,200); arduino = new Arduino(this, Arduino.list()[portNum], 57600); } ! void draw() { background(0); fill(255); int analog = arduino.analogRead(input); text("input = " + analog, 10, 20); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ Մม߅ͷπϚϛΛճ͢ͱɺʙͷஈ֊ͰมԽ͢Δͣʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ྫ͑ɺ߅Ͱԁͷେ͖͞ΛมԽͤͯ͞ΈΔ import processing.serial.*; import cc.arduino.*; Arduino arduino; int
input = 0; int portNum = 2; ! void setup() { size(800,600); arduino = new Arduino(this, Arduino.list()[portNum], 57600); } ! void draw() { background(0); fill(31, 127, 255); int analog = arduino.analogRead(input); float diameter = map(analog, 0, 1023, 0, height); ellipse(width/2, height/2, diameter, diameter); fill(255); text("input = " + analog, 10, 20); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ Մม߅ͷπϚϛΛճ͢ͱɺԁͷେ͖͕͞มԽ͢Δʂ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPɺ1SPDFTTJOHํͰγϦΞϧ௨৴ͷͨΊͷίʔυΛࣗ࡞ ‣ 'JSNBUBΛ༻͢Δํ๏ʹൺ͖ͯΊࡉ͔͘ޮతͳ௨৴͕ՄೳͱͳΔ ! ‣ ࠓճͷγϦΞϧૹड৴ʹʮϋϯυγΣΠΩϯά IBOETIBLJOH ʯͱ͍͏ख๏Λ༻
‣ ؒͷ௨৴࿏Λཱ֬ͨ͠ޙɺຊ֨తʹ௨৴Λߦ͏લʹࣄલͷΓऔΓΛࣗಈతʹߦ͏ ‣ ϋϯυγΣΠΩϯάͨ͠ޙɺ௨ৗͷใͷసૹΛߦ͏
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPɺ1SPDFTTJOHɺϋϯυγΣΠΩϯάΛਤղ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ Մม߅ΛͭՃɺ"OBMPHʹ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPଆϓϩάϥϜ int firstSensor = 0; int secondSensor =
0; int inByte = 0; ! void setup(){ Serial.begin(9600); establishContact(); } ! void loop(){ if (Serial.available() > 0) { inByte = Serial.read(); firstSensor = analogRead(0)/4; delay(10); secondSensor = analogRead(1)/4; Serial.write(firstSensor); Serial.write(secondSensor); } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPଆϓϩάϥϜ ! void establishContact() { while (Serial.available() <=
0) { Serial.print('A'); delay(300); } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ 1SPDFTTJOHଆϓϩάϥϜ import processing.serial.*; ! Serial myPort; int[] serialInArray
= new int[2]; int serialCount = 0; PVector pos; boolean firstContact = false; ! void setup() { size(800, 600); noStroke(); pos = new PVector(width/2, height/2); println(Serial.list()); String portName = Serial.list()[5]; myPort = new Serial(this, portName, 9600); } ! void draw() { background(0); fill(31, 127, 255); ellipse(pos.x, pos.y, 20, 20); }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ 1SPDFTTJOHଆϓϩάϥϜ void serialEvent(Serial myPort) { int inByte =
myPort.read(); if (firstContact == false) { if (inByte == 'A') { myPort.clear(); firstContact = true; myPort.write('A'); } } else { serialInArray[serialCount] = inByte; serialCount++; if (serialCount > 1) { pos.x = map(serialInArray[0], 0, 255, 0, width); pos.y = map(serialInArray[1], 0, 255, 0, height); println(pos.x + "\t" + pos.y); myPort.write('A'); serialCount = 0; } } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ ͭͷՄม߅Ͱɺԁ͕ಈ͖·ΘΔʂ
5PVDIÉͷαϯϓϧϓϩάϥϜΛղ
5PVDIÉͷαϯϓϧϓϩάϥϜΛղ ‣ 5PVDIÉͷϓϩάϥϜɺͲͪΒͷํ๏͔ʁ ‣ ʮ࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ʯͷԠ༻ ‣ ࣮ࡍʹϓϩάϥϜΛιʔείʔυΛݟͳ͕Βղੳͯ͠ΈΔ