前回セリアの100均で購入した可動式ドールでマチ子風フィギュアを作りました。↓
今回はこれとアルコールディスペンサーを連動させて「呼び込み君」ならぬ「呼び込みちゃん」を作成しようと思います。
呼び込み君はシンプルでぬけた感じの見た目と音楽でお客さんを引き込みますが、呼び込みちゃんは「おもてなし」でお客さんを引き込みます。
実は完成品をNT金沢で出展してきたのですが激烈に不評でした。
しかし、3人ほどは笑ってくれたので個人的には成功といってもいいのです。
それでは作成過程をまとめていきますので、どうか私のTwitterをフォローして拡散しまくってやってください!あなたには何の得もありませんが私だけwinにしてやってください!
目次
ティーチャーバージョンの服を作るよ!
学生服verしかなかったので先生verの服を作ります!裁縫レベル―500の私には到底無理なので妻の力を借りる事にしました。
完璧です!
これを作品にするのだと言うと妻は一言「うっわきっしょ!!」と言っていました。
続いてこれに細工を仕掛けていきます。
ローリング&LED
マチ子を回転させるための土台を作ります。
回転するだけじゃ物足りないのでLEDで装飾します。
ESP32にモータードライバ経由で360度サーボモーターを接続させてます。
PWM制御なのでパルス幅で回転スピードを調節できます。
OK良い感じ!
なんか速度を落とすと始動が上手くいかなかったんでコンデンサを付けました。
※ニッケル水素の単三2個(2.4V)だったので、これアルカリ2個(3V)に変えたらコンデンサなしでも上手くまわりました。
神風を起こすよ!
理想は風でスカートをめくり上げたいのです。ネットで風量に定評のある小型扇風機で試してみます。
微動だにしません。。(-_-;)
自然の力って素晴らしいですよね、人間のスカートまくっちゃうんですから。
てことで風を動力としたまくり上げは中止とします。
暫定版(Ver2.0)完成(仮)!
不本意ですが妥協してまくり上げた状態で回転させるようにしました。
とりあえずM5StackCでスカートをめくる動作をすると回転する仕様になってます。
それではアルコールディスペンサーとコラボさせて完成させたいと思います。
呼び込みちゃん完成!
女子供が引いている未来しか見えませんが、これが作りたかったので仕方ない。許してやってください。
それじゃあ最後にプログラムを特別公開しちゃうよ!!’(書いてて空しくなってきた。。)
プログラム
アルコールディスペンサー側(クライアント側)
raspberrypi pico wを使っています。(micropython)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from machine import PWM, Pin import time from socket import socket, AF_INET, SOCK_DGRAM import network dstip = "サーバアドレス" dstport = ポート番号 wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('SSID', 'PASS') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) print('network config:', wlan.ifconfig()) s = socket(AF_INET, SOCK_DGRAM) #s.bind((dstip, dstport)) servo1 = PWM(Pin(0)) servo1.freq(50) pin = machine.Pin(2, machine.Pin.IN) max_duty = 65025 dig_0 = 0.0725 #0° dig_90 = 0.12 #90° mode = 1 data = "nane" while True: if pin.value() == 0 and mode == 1: servo1.duty_u16(int(max_duty*dig_0)) time.sleep(1) servo1.duty_u16(int(max_duty*dig_90)) time.sleep(1) mode = 0 data = "b" s.sendto(data, (dstip, dstport)) elif pin.value() == 0 and mode == 0: time.sleep(1) data = "nane" s.sendto(data, (dstip, dstport)) else: mode = 1 data = "nane" s.sendto(data, (dstip, dstport)) time.sleep(1) |
マチ子側(サーバー側)
ESP32を使っています。(micropython)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
import machine import time from machine import PWM, Pin from machine import Pin import neopixel from time import sleep_ms import _thread from socket import socket, AF_INET, SOCK_DGRAM import network HOST = "IP" PORT = ポート番号 wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('SSID', 'pass') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) print('network config:', wlan.ifconfig()) s = socket(AF_INET, SOCK_DGRAM) s.bind((HOST, PORT)) # サーボモーターを接続するGPIOピンの番号 #servo_pin = 4 #from machine import Pin # サーボモーターを制御するPWM信号の周波数と範囲 frequency = 500 # 周波数(Hz) #pwm_range = (500, 2500) # パルス幅の範囲(マイクロ秒) #p1 = Pin(0, Pin.OUT) #p2 = Pin(4, Pin.OUT) # PWMオブジェクトの初期化 #pwm = machine.PWM(machine.Pin(servo_pin)) #pwm.freq(pwm_freq) p1 = PWM(Pin(0), frequency) p2 = PWM(Pin(4), frequency) i = 0 p1.duty(0) p2.duty(0) # 右回転する関数 #def rotate_right(): #p1.duty(1023) # パルス幅を最大値に設定 #p1.value(1) # メインループ msg = "none" def servo(): global msg global i while True: msg, address = s.recvfrom(8192) #print(f"message: {msg}\nfrom: {address}") msg = msg.decode() print(msg) if msg == "b": #p1.value(1) #p2.value(0) p1.duty(250) p2.duty(0) time.sleep(5) # 1秒待機 #i += 1 #print(i) #p1.value(0) else: p1.duty(0) _thread.start_new_thread(servo, ()) def demo(np, r, b, g): n = np.n np.fill((0,0,0)) np.write() sleep_ms(1000) for i in range(n): np[i] = ( r,b,g ) np.write() sleep_ms(100) def run(): np = neopixel.NeoPixel(Pin(25), 14, timing = 1 ) demo(np, 255, 0, 0) #demo(np, 0, 255, 0) #demo(np, 0, 0, 255) #demo(np, 255, 255, 255) np.fill((0, 0, 0)) np.write() while True: if msg == "b": run() #except KeyboardInterrupt: # pass # print("exit") #p1.duty(0) |