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

毎年春は花粉症のせいなのか分かりませんが、どうも性欲が落ちると言うかチクニーする気があまり起きなくなります

それが原因なのかどうなのか此処の所どうもArduinoランダムコントローラー(以下アルコンとします)が微妙な気が・・・

LV4

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


次のチクニーの時もアルコンを使ってみましたがやはり微妙?・・・
なんか物足りない気が・・・

なんとな~く思ってたのですがスマホランダムコントローラー(以下スマコンとします)の方が気持ち良いかも?・・・
そう思ってスマコンを使ってみたところ・・・確信しました

やはりスマコンの方が気持ち良いです。
アルコンが微妙に感じるようになった原因はこれですね

それで真っ先に思い当たったのがスマコンを作った時にも言っていた回転時間

スマホでモーター制御(パソコン不使用)

ずっと探してた物がやっと見つかりました パソコンを一切使わずにスマホのみでモーターを制御できるモータードライバ送料が500円かかりました MotorAir v2 - Bluetoothデュアルモータドライバスマートフォンリモートコントロールキット デュアルチャネルDC...


iOS端末で意外とランダム(パソコン不使用)

前回のスマホでモーター制御の続きです 前回の記事(android端末)はこちら スマホでモーター制御(パソコン不使用) ずっと探してた物がやっと見つかりました パソコンを一切使わずにスマホのみでモーターを制御できるモータードライバ送...



iOS端末版はちょっと特殊で数値にしにくいのでandroidの方で比べてみると
スマコン:0.1秒~3.9秒 の範囲でランダム
アルコン:0.5秒~1秒 の範囲でランダム

回転時間つまり回転ストロークの事がすっかり頭から抜けてました
回転速が同じでストロークが4倍違うとこんな感じですかね
アルコンスマコン
実際は回転方向の切り替えもランダムさせているので同じ方向が続けばアルコンも長いストロークになりますが、やはりムラが出てきます

アタッチメントを変えたら話が変わってくるかも知れませんが
スマコンが気持ちよく感じたのはこういう理由なのでしょう
という事で回転時間をスマコンと一緒にしてみました

小刻みパターン→旧長いパターンに変更
旧100ms~300ms → 新500ms~1000ms
長いパターン→スマコンと同じパターンに変更
旧500ms~1000ms → 新100ms~3900ms



実際使用してみたところバッチリでした
微妙な感じはスッカリ無くなり乳首がピンピンとしっかり弾かれてドライ中のゾワゾワ感も確実に増しました

回転速の方にばかり気がいってましたが
なるほどなるほど。ストロークも重要だったんですね


スケッチは下記から
(スローモーター用とは言っていますが、どのモーターでも使えます)

他のLv1~Lv4のアルコンのスケッチも
500の箇所を全て100に。1000の箇所を全て3900に書き換えればスマコンと同じストロークにできます


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

const int m1_cw  = 10;        //正回転ピン
const int m1_ccw = 11;        //逆回転ピン
const int a_pin =   0;        //アナログピン番号(ボリューム用)
const int SW1 (8);            //スイッチ1   
const int SW2 (12);           //スイッチ2   

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) {
        //RCtrl(最小速度,最大速度,最小時間,最大時間) ※速度は100ぐらい~255まで
        switch (count) {
        case 1:
              RCtrl(160,255,500,1000);    //スローモーター用小刻み
            break;
        case 2:
            PCtrl(volume(100,255),300,0); //固定パターン
            PCtrl(0,300,0);
            break;
        default :         
            RCtrl(160,255,100,3900);    //スローモーター用長い回転
            break;
        }
        break;
      }
}

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

//ランダムコントロール
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);                                  //回転方向ランダム
    l_pwr = GetRandom(volume (pwr_min,pwr_max),pwr_max);    //回転速度ランダムスローモーター用
    rev_time = GetRandom(dly_min,dly_max);                  //回転時間ランダム
    time_now = millis();

    //シリアルモニタ
    if (lrot == 0) {
      Serial.print("F");
    }else{
      Serial.print("R");
    }
    Serial.print(l_pwr);
    Serial.print(" ");
    Serial.print(rev_time);
    Serial.println("ms");
          
    do {
        if (lrot==0){
            analogWrite(m1_cw,l_pwr);
        } else if (lrot==1) {
            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();
    
    do {
        if (m_rot==0){
            analogWrite(m1_cw,m_pwr);
        } else if (m_rot==1) {
            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 vpwr_min,int vpwr_max) {
    int val;
    val = map(analogRead(a_pin), 0, 1023, vpwr_min, vpwr_max);
    return val;
}
//#############################################
//スケッチはここまでコピー
//#############################################
関連記事

コメント

非公開コメント

このページのトップへ