さ~ぼも~た SG90
さ~ぼも~た SG90
の ぐるぐる回転する型
# ==== 【Gemini】様
ラズパイピコでのリベンジ・プログラム
前回のコードを少し改造して、
連続回転型専用の動きをさせてみましょう。
```python
import machine
import utime
# サーボの信号ピン (GP15)
servo = machine.PWM(machine.Pin(15))
servo.freq(50)
def set_servo(val):
# 連続回転型の場合: 90が停止、0と180が最大速
duty = int((val / 180) * (8192 - 1638) + 1638)
servo.duty_u16(duty)
print("連続回転型サーボ・テスト開始")
try:
while True:
print("右回転!")
set_servo(0)
utime.sleep(2)
print("停止(ブレーキ)")
set_servo(90)
utime.sleep(2)
print("左回転!")
set_servo(180)
utime.sleep(2)
print("ゆっくり回転")
set_servo(85) # 90に近いほど遅くなります
utime.sleep(2)
except KeyboardInterrupt:
servo.deinit()
```
接続の確認(Arduinoの時と同じ色ですが念のため)
* 茶色: GND
* 赤色: VBUS (5V)
* オレンジ: GP15 (20番ピン)
これが動いたらどうなる?
もしこれで「右に回って、止まって、左に回る」ができたら、いよいよ「スリップリング」がなくても、センサーを首振りさせるレーダーが作れます!
* 右に1秒回して、距離を測る。
* 左に1秒回して、距離を測る。
これで、正面だけでなく左右の障害物も検知できる「自律走行車」の目のような仕組みになります。
どうでしょう、今度は「意図した通り(回れ・止まれ)」に動いてくれそうですか?もし、90を指定しても「ゆっくり回ってしまう」場合は、個体差なので88とか92とかで調整すればピタッと止まりますよ!
# ==============================

すりっぷりんぐ と さ~ぼも~た
ぐるりん
ぐ~るぐ~る
# ==== すりっぷりんぐ 【Gemini】様
1. なぜ今でもスリップリングなのか?
空港の監視レーダー(ASR)のように、「重いアンテナを回しながら、電気と信
号を送り続ける」必要がある場所では、360度エンドレスに回転できるスリップ
リングが唯一無二の解決策です。
仕組みはシンプルですが、非常に高度です:
* 回転側(リング): アンテナと一緒に回る金属の輪。
* 固定側(ブラシ): 金属の輪に「バネ」などで押し付けられている接点。
これで、回しながらでも電気が途切れずに流れます。
2. 進化しているスリップリング
ただ、昔のような「ただの金属の擦れ合い」だけだと、レーダーのような超高速
・大容量のデータ通信にはノイズが乗りすぎてしまいます。そのため、現代では
以下のような進化系が使われています。
* 光ファイバー・ロータリージョイント (FORJ):
電気ではなく「光」でデータを送ります。中心軸を光が通るので、非接触で超高
速通信が可能です。
* 液状金属スリップリング:
接点に水銀などの液状金属を使い、摩耗ゼロ・ノイズ最小限で電気を送ります(
医療用CTスキャンなどでよく使われます)。
* 非接触電力伝送:
スマホのワイヤレス充電のように、磁界を使って電力を飛ばすタイプ。摩耗がな
いのでメンテナンスフリーです。
3. 電子工作の世界での「レーダー」
もし、私たちが電子工作で「ぐるぐる回るレーダー」を作りたいと思ったら、Am
azonなどで数百円〜数千円で売っている「小型スリップリング」を簡単に買うこ
とができますよ。
これを使えば、
* 下の台座は固定。
* 上の超音波センサー(HC-SR04)だけがぐるぐる360度回る。
* ワイヤーはねじれない!
という、本物のレーダーそっくりの模型が作れます。
ちなみに
空港のレーダーは、あの大きなアンテナを1分間に約12〜15回転(5秒で1周くら
い)のペースで、24時間365日回し続けています。スリップリングの耐久性って
、実はとんでもなく凄いんです。
「ぷっちん!」を防ぐためのこの技術、まさに「縁の下の力持ち」ですよね。
次は、この「スリップリング」を使って何か回してみたくなりましたか?それと
も、超音波センサーのプログラムをもっと「動きのあるもの」へ進化させましょ
うか?
# ==== さ~ぼも~た 【Gemini】様
実は、ラズパイピコでSG90(サーボモータ)を動かすのは、少しコツがいります。Arduinoよりも「電圧」や「信号の作り方」に少しクセがあるからです。
1. SG90の「180度型」と「連続回転型」の見分け方
おっしゃる通り、SG90には2つのタイプがあります。
* 180度制限型(標準型): 指定した角度(0度〜180度)でピタッと止まります。ロボットの関節や、車のハンドル用です。
* 連続回転型(360度型): 「角度」ではなく「回転速度」を指示します。ずっと回り続けるので、車輪用です。
見分け方:
電源を繋いでいない状態で、手で優しく軸を回してみてください。
* どこかで「コツン」と止まれば 180度型。
* どこまでもクルクル回れば 連続回転型 です。
(※キットに入っているのは、ほぼ間違いなく 180度型 です!)
2. ラズパイピコでの接続(ここが失敗しやすい!)
SG90は「5V」で動く部品です。ラズパイピコから電源をとる場合は注意が必要です。
* 茶色(GND): ピコの GND(38番ピンなど)へ。
* 赤色(VCC): ピコの VBUS(40番ピン)へ。
* ※VBUSならUSBからの5Vを直接供給できるので、トルク不足になりにくいです。
* オレンジ色(Signal): ピコの GP15(20番ピン)などへ。
3. なぜ「うまく動かなかった」のか?(推定理由)
以前失敗した理由として、以下の2点が怪しいです。
1. 電力不足: 3.3Vピンに繋いでいた。
2. 信号の周波数: サーボモータは 50Hz という特殊な波形(PWM)が必要ですが、プログラムで正しく設定できていなかった。
4. 確実に動かすためのプログラム (MicroPython)
「角度」を指定して動かすためのコードです。MicroPythonの `PWM` という機能を使います。
```python
import machine
import utime
# サーボの信号ピンを設定 (GP15)
# 周波数は必ず 50Hz に設定します
servo = machine.PWM(machine.Pin(15))
servo.freq(50)
# 角度を計算する関数 (0度〜180度)
def set_angle(angle):
# SG90の仕様: 0.5ms〜2.4msのパルス幅
# ラズパイピコのPWM(duty_u16)は 0〜65535 の範囲
# 0度 = 約1638, 180度 = 約8192 くらいに調整
duty = int((angle / 180) * (8192 - 1638) + 1638)
servo.duty_u16(duty)
print("サーボテスト開始")
# 0度 -> 90度 -> 180度 と動かしてみる
try:
while True:
print("0度")
set_angle(0)
utime.sleep(1)
print("90度")
set_angle(90)
utime.sleep(1)
print("180度")
set_angle(180)
utime.sleep(1)
except KeyboardInterrupt:
# 終了時に信号を止める
servo.deinit()
```
次のステップへのワクワク
これが動けば、さっきの 超音波距離計 Rev.A と合体させて:
「距離が20cm以下になったら、サーボが『ダメダメ!』と首を振る」
みたいな、感情豊かなロボットのような動きが作れます!
まずは、このSG90が手元の配線で「ジジッ」と動くかどうか、試してみませんか?
接続で不安なピンがあれば、何でも聞いてくださいね。
# ==============================
2026/01/09 19:07:08
まず
手動で 回すと 2回転以上するから
ぐるぐる型 かもしれません
過去の実験失敗
使用マイコンは
Arduino UNO です
電子工作入門・・・みたいな本で
プログラム組んだけど
0度の 位置
90度 回す
みたいなのができなかった
詳細は 記憶から消えましたw
# ==============================
なるほど!「手で2回転以上する」のであれば、それは間違いなく 「連続回転型サーボ」 ですね。
Arduinoの入門キットにこれが入っているのは少し珍しいですが、これだと「角度(0度で止まれ)」という命令を出しても、「その方向にずっと回り続ける」という動きになります。過去の実験で「90度で止まってくれない!」と悩まれたのは、あなたのミスではなく「部品の仕様と目的が違っていた」のが正解です。
スッキリしましたね!
せっかくなので、この「連続回転型」をラズパイピコで手なずけてみましょう。
連続回転型サーボ(SG90-360など)のルール
このタイプは、角度ではなく 「回転の方向と速さ」 をコントロールします。
* 90度を指定すると: 停止(ブレーキ)
* 0度を指定すると: 反時計回りにフルスピード回転
* 180度を指定すると: 時計回りにフルスピード回転
* (91度とかにすると、ゆっくり回ります)
ラズパイピコでのリベンジ・プログラム
前回のコードを少し改造して、連続回転型専用の動きをさせてみましょう。
```python
import machine
import utime
# サーボの信号ピン (GP15)
servo = machine.PWM(machine.Pin(15))
servo.freq(50)
def set_servo(val):
# 連続回転型の場合: 90が停止、0と180が最大速
duty = int((val / 180) * (8192 - 1638) + 1638)
servo.duty_u16(duty)
print("連続回転型サーボ・テスト開始")
try:
while True:
print("右回転!")
set_servo(0)
utime.sleep(2)
print("停止(ブレーキ)")
set_servo(90)
utime.sleep(2)
print("左回転!")
set_servo(180)
utime.sleep(2)
print("ゆっくり回転")
set_servo(85) # 90に近いほど遅くなります
utime.sleep(2)
except KeyboardInterrupt:
servo.deinit()
```
接続の確認(Arduinoの時と同じ色ですが念のため)
* 茶色: GND
* 赤色: VBUS (5V)
* オレンジ: GP15 (20番ピン)
これが動いたらどうなる?
もしこれで「右に回って、止まって、左に回る」ができたら、いよいよ「スリップリング」がなくても、センサーを首振りさせるレーダーが作れます!
* 右に1秒回して、距離を測る。
* 左に1秒回して、距離を測る。
これで、正面だけでなく左右の障害物も検知できる「自律走行車」の目のような仕組みになります。
どうでしょう、今度は「意図した通り(回れ・止まれ)」に動いてくれそうですか?もし、90を指定しても「ゆっくり回ってしまう」場合は、個体差なので88とか92とかで調整すればピタッと止まりますよ!
# ==============================

ぴこぴこ 2N2222A 簡易ちぇっかぁ~
にゃふにゃふ
ぼんぼん
むか~~~し
格安で購入した
2N2222A 君
はてさて
本当に 動くの?
【Gemini】様
に
簡易チェッカー
のご提案をいただいた
ぴこ の GPIOに
反応して
LEDが ON/OFF するだけ!
のチェッカーである
まあ hfe はともかく
生きている
か
死んでいる
か
の判定は できる
でりしゃす
である
接続図

プログラム
#### テスト用コード (MicroPython)
```python
from machine import Pin
import time
base = Pin(15, Pin.OUT)
while True:
base.value(1) # ON
print("Transistor ON")
time.sleep(0.5)
base.value(0) # OFF
print("Transistor OFF")
time.sleep(0.5)
```
じじぃ~













