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
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エージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
0
140
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
310
現場のトークンマネジメント
dak2
1
190
Agile and AI Redmine Japan 2026
hiranabe
4
480
2026 AI Memory Architecture
nagatsu
0
250
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
770
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
220
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
160
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
1
1.1k
AIはどのように 組織のアジリティを変えるのか?
junki
4
1.4k
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
640
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
480
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Writing Fast Ruby
sferik
630
63k
Mobile First: as difficult as doing things right
swwweet
225
10k
Navigating Weather and Climate Data
rabernat
0
230
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
First, design no harm
axbom
PRO
2
1.2k
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ÉͷϓϩάϥϜɺͲͪΒͷํ๏͔ʁ ‣ ʮ࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ʯͷԠ༻ ‣ ࣮ࡍʹϓϩάϥϜΛιʔείʔυΛݟͳ͕Βղੳͯ͠ΈΔ