LV5

ランダムコントローラー5

ストローク(回転時間)の調整を追加しました
LV5コントローラー[1]
今回からケースを新しくして若干コンパクトになりました
横着したため配線が以前にも増して雑です

■ストローク調整仕様
0.1秒~8秒範囲でランダム値を調整できます
ストローク調整仕様01

■パターンは3種類
  1. ランダムパターン
      通常のランダムパターンです

  2. ランダムパターンポーズ入り
      正転、逆転、停止をランダムに行います
      停止の発生は3割程度、時間は0.1~0.6秒でストロークと連動(模索中)

  3. 固定パターン
      ブッブッブッブという感じの固定パターンです
      パターン切り替え時の目印に

動作はこちら

※時間を元にしたランダム処理なので左右タイミングをずらして動かして下さい
※作成、使用、部品の購入は自己責任でお願いします



■使用感
ごちゃごちゃしてしまうので別ページでまとめました

LV5使用感等

スマコンを作ったことによりストロークの重要さに気づかされました スローモーター用パターン2(LV3以上用) 毎年春は花粉症のせいなのか分かりませんが、どうも性欲が落ちると言うかチクニーする気があまり起きなくなります それが原因なのかどうなのか此処の所どうもArduinoランダムコ...




■シリアルモニタ
シリアルモニタでランダム値を確認できます
Arduino IDEのメニューバー→ツール→シリアルモニタで表示できます
※パソコンとArduinoが繋がってる状態で
シリアルモニタ説明シリアルモニタ9600
シリアルモニタ ON OFF
ArduinoのLEDが点滅するくらいなのでONのままでも構わないと思いますがOFFにしたい場合はスケッチの赤字部分
const int SM = 0;に書き換えます(入力は半角文字で)



■LV5作り方
1.配線を組みパソコンとArduinoをUSBで繋ぐ
 (可変抵抗10KΩ をGND、A1、5Vに繋ぎます)
LV5配線[1]
2.下記スケッチをコピーしてArduino IDEのスケッチに貼り付ける
(IDEに元からあるスケッチは消してから貼り付ける)
ArduinoIDE
    
3.書込み(コンパイル)で出来上がり。
書込み(コンパイル)

■スケッチ
使用するモーターによってスケッチの赤字部分
const int MM = 0;を書き換えます(入力は半角文字で)
・通常モーター(UFO、ニップルカップ等)や動作音が気になるモーターは
 「const int MM = 0;」をお勧めします

・スローモーター(6v100rpm以下)やパワーが欲しい時は
 「const int MM = 1;」をお勧めします




//#############################################
//スケッチはここからコピー
//#############################################
//プログラムの配布は人様の関数を使っているため禁止とさせて頂きます
#include <time.h>

const int m1_cw  = 10;        //正回転ピン
const int m1_ccw = 11;        //逆回転ピン
const int a_pin0 =  0;        //アナログピン0(ボリューム用)
const int a_pin1 =  1;        //アナログピン1(ボリューム用)
const int SW1 (8);            //スイッチ1
const int SW2 (12);           //スイッチ2
const int MM = 0;             //通常モータ:0 スローモータ:1
const int SM = 1;             //シリアルモニタ OFF:0 ON:1

volatile unsigned long time_prev = 0, time_now , time2;
unsigned long time_chat = 300;
volatile signed char state , count = 0;
volatile bool g_pause = 1;

//セットアップ
void setup() {
  pinMode(SW1, INPUT_PULLUP); //スイッチ1プルアップ
  pinMode(SW2, INPUT_PULLUP); //スイッチ2プルアップ
  Serial.begin(9600);         //シリアル通信
}

//メイン処理
void loop() {
  int ii;
  if (digitalRead(SW1) == LOW) pause(); //一時停止
  if (digitalRead(SW2) == LOW && g_pause == 0) countup();
  state = 0;
  while (state == 0 && g_pause == 0) {

    switch (count) {

      case 1:                 //ランダムポーズ有り
        if (GetRandom(1,9) < 6) RCtrl(100,255,100,8000);
        else PCtrl(0,GetRandom(100,volume(a_pin1,100,600)),0);
        break;
        
      case 2:                 //固定
        PCtrl(volume(a_pin0,100,255),volume(a_pin1,100,600),0);
        PCtrl(0,300,0);
        break;
        
      default:                //ランダム
        RCtrl(100,255,100,8000);
        break;
    }
      break;
  }
}

//ボタンカウントアップ
void countup () {
  time_now = millis();
  if (time_now - time_prev > time_chat) {
    if (count < 2) count++;   //パターンは2種
    else count = 0;
  }
  state = 1;
  time_prev = time_now;
}

//一時停止
void pause () {
  time_now = millis();
  if (time_now - time_prev > time_chat) {
    if (g_pause ==1) g_pause=0;
    else g_pause = 1;
  }
  state = 1;
  time_prev = time_now;
}

//「苦C」minからmaxの間のランダム値を返す
int GetRandom(int min, int max){
  static int flag;
  if (flag == 0) {
    srand((unsigned int)time(NULL));
    flag = 1;
  }
  return min + (int)(rand() * (max - min + 1.0) / (1.0 + RAND_MAX));
}

//回転OFF
void Roff(){
  analogWrite(m1_cw,0);
  analogWrite(m1_ccw,0);
  delay(1);
}

//ランダムコントロール(最小速度,最大速度,最小時間,最大時間) ※速度は100-255
void RCtrl(int pwr_min,int pwr_max,int dly_min,int dly_max){
  bool lrot;
  int rev_time , l_pwr;
  lrot = GetRandom(0,1);                                                  //回転方向ランダム
  if (MM == 0) l_pwr = GetRandom(pwr_min,volume (a_pin0,pwr_min,pwr_max));//回転速度ランダム
  else l_pwr = GetRandom(volume (a_pin0,pwr_min,pwr_max),pwr_max);
  rev_time = GetRandom(dly_min,volume (a_pin1,dly_min,dly_max));          //回転時間ランダム
  time_now = millis();
  if (SM == 1) SerialM(l_pwr,rev_time,lrot);                              //シリアルモニタ
  do {
    if (lrot==0) analogWrite(m1_cw,l_pwr); 
    else analogWrite(m1_ccw,l_pwr); 
    time2 = millis();
  } while (time2 - time_now < rev_time && digitalRead(SW1) == HIGH && digitalRead(SW2) == HIGH);
  time_now = millis();
  Roff();                                                                 //回転OFF
}

//固定パターンコントロール
void PCtrl(int m_pwr,int m_dly,bool m_rot){
  time_now = millis();
  if (SM == 1) SerialM(m_pwr,m_dly,m_rot);                                //シリアルモニタ
  do {
    if (m_rot==0) analogWrite(m1_cw,m_pwr); 
    else analogWrite(m1_ccw,m_pwr); 
    time2 = millis();
  } while (time2 - time_now < m_dly && digitalRead(SW1) == HIGH && digitalRead(SW2) == HIGH);
  time_now = millis();
  Roff();                                                                 //回転OFF
}

//ボリューム値をvpwr_minからvpwr_maxに変換
int volume (int va_pin , int vpwr_min,int vpwr_max) {
  int val;
  val = map(analogRead(va_pin), 0, 1023, vpwr_min, vpwr_max);
  return val;
}

//シリアルモニタ
void SerialM(int m_pwr,int m_dly,bool m_rot){
  if (m_rot == 0) Serial.print("F");
  else Serial.print("R");
  Serial.print(m_pwr);
  Serial.print(" ");
  Serial.print(m_dly);
  Serial.println("ms");
}
//#############################################
//スケッチはここまでコピー
//#############################################



■LV4までの作り方

LV0

チクニーグッズのUFOやニップルカップ等をランダムなパターンで動かせるコントローラです シンプル、簡単、コスパを優先 3000円~4000円ほどで憧れのコントローラー2台繋ぎ左右完全独立可動させるコントローラーが作れます 例:左を小刻みに右を長いストロークにしたり。 3Pプレイで2人の人から舐められているようになります ...

LV1

ランダムコントローラー1とりあえず手っ取り早くランダムを体験してみたい人はこれで。配線を繋ぎ、スケッチを書き込むだけで出来上がりですスイッチ類無しでパターンはランダムのみですON、OFFは電源抜き差しか、スイッチ付きの電源を使います上がニップルカップ下は旧UFOドームやマジックもいけるはず■作り方1.配線を組みパソコンとArduinoをUSBで繋ぐ2.下記スケッチをコピーしてArduino IDEのスケッチに貼り付ける(IDEに元から...

LV2

ランダムコントローラー2値を設定していざ動かしてみると思ったより音が煩かったりチクニー後半に乳首が慣れてきて物足りないと集中できなかったのでまずは回転速度の調整を付けましたON、OFFは電源抜き差しか、スイッチ付きの電源を使います設定された回転速度の最小~最大の範囲で強弱できます■作り方1.配線を組みパソコンとArduinoをUSBで繋ぐ配線は以下画像を参照 実際の写真2.下記スケッチをコピーしてArduino IDEのスケ...

LV3

ランダムコントローラー3一時停止・再開ボタンとパターン選択ボタンを付けました今までスケッチの書き換えで行っていた6種のランダムパターンと1種の固定パターンをボタンで選択できるようにしてみました動作はこんな感じです■作り方1.配線を組みパソコンとArduinoをUSBで繋ぐ2.下記スケッチをコピーしてArduino IDEのスケッチに貼り付ける(IDEに元からあるスケッチは消してから貼り付ける)    3.書込み(コンパ...

LV4

ランダムコントローラー4電源とモータードライバを1つにまとめました色々な便宜上2つに分けていましたが操作系が出来たので1つにまとめました動作は前回と一緒ですが一応■作り方1.配線を組みパソコンとArduinoをUSBで繋ぐ(cr3と一緒です)2.下記スケッチをコピーしてArduino IDEのスケッチに貼り付ける(IDEに元からあるスケッチは消してから貼り付ける)    3.書込み(コンパイル)で出来上がり。これを2個作りタ...

自作コストまとめ

自作にかかったコストをまとめてみました 一部曖昧な表記や値段が変わっている物もあります 消費税や送料は計算には入れておりません ■必須工具類 1,490円~ 元々持っている物が結構あると思いますが一応計算に含めました はんだこて、はんだをダイソーで済ませば少し安くなります。当ブログの工作程度なら十分か...


スローモーター用パターン(LV3以上用)

6v60rpmと6v100rpmに絞って使っていくことにしたのでスローモーター用に作り直しましたパターンは「長い回転」「小刻み回転」「固定回転」の3種でボタンを押す毎に、この順番で切り替わります回転数の強弱を以下のように変更しました今までは最小値を基準にランダム値を強弱させていましたスローモーターだと若干ですが物足りなさを感じる時があったり動作音がとても静かなので最大値を基準にランダム値を強弱させてみました最大値...



関連記事

コメント

非公開コメント

このページのトップへ