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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
470
Processing.jsによるデータの可視化と生成的表現
tado
1
1.9k
Tumblrを使う2 - テーマをカスタマイズする
tado
0
380
Github Pagesで作品を公開、Automatic Page Generatorでサイトを生成
tado
0
1.7k
TumblrでWebサイトを作成
tado
0
730
bmaw14 第2回: Touchéセンサーを使う1 Touchéセンサーを作成する
tado
0
2.3k
Webサーバーの準備 - Github PagesでWebサイト開設
tado
0
1.5k
Other Decks in Technology
See All in Technology
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.6k
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
200
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.7k
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
4
1k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
470
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
87k
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
0
520
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
9.1k
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
420
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
140
KAEN Company Deck
kaen
PRO
0
150
Featured
See All Featured
Fireside Chat
paigeccino
42
4k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Crafting Experiences
bethany
1
270
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
Building an army of robots
kneath
306
46k
Embracing the Ebb and Flow
colly
88
5.2k
Navigating Weather and Climate Data
rabernat
0
500
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
680
A Soul's Torment
seathinner
7
3.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Building Adaptive Systems
keathley
44
3.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ÉͷϓϩάϥϜɺͲͪΒͷํ๏͔ʁ ‣ ʮ࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ʯͷԠ༻ ‣ ࣮ࡍʹϓϩάϥϜΛιʔείʔυΛݟͳ͕Βղੳͯ͠ΈΔ