久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22125|回復: 36
打印 上一主題 下一主題
收起左側

Arduino自平衡小車……你值得擁有

  [復制鏈接]
跳轉到指定樓層
樓主
ID:100312 發表于 2016-4-9 10:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include  "Wire.h"`
  2. const uint8_t IMUAddress = 0x68; // AD0 is logic low on the PCB
  3. const uint16_t I2C_TIMEOUT = 100; // Used to check for errors in I2C communication

  4. uint8_t i2cWrite(uint8_t registerAddress, uint8_t data, bool sendStop) {
  5.   return i2cWrite(registerAddress, &data, 1, sendStop); // Returns 0 on success
  6. }

  7. uint8_t i2cWrite(uint8_t registerAddress, uint8_t *data, uint8_t length, bool sendStop) {
  8.     Wire.beginTransmission(IMUAddress);
  9.     Wire.write(registerAddress);
  10.     Wire.write(data, length);
  11.     uint8_t rcode = Wire.endTransmission(sendStop); // Returns 0 on success
  12.     if (rcode) {
  13.       Serial.print(F("i2cWrite failed: "));
  14.       Serial.println(rcode);
  15.     }
  16.     return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
  17. }

  18. uint8_t i2cRead(uint8_t registerAddress, uint8_t *data, uint8_t nbytes) {
  19.     uint32_t timeOutTimer;
  20.     Wire.beginTransmission(IMUAddress);
  21.     Wire.write(registerAddress);
  22.     uint8_t rcode = Wire.endTransmission(false); // Don't release the bus
  23.     if (rcode) {
  24.       Serial.print(F("i2cRead failed: "));
  25.       Serial.println(rcode);
  26.       return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
  27.     }
  28.     Wire.requestFrom(IMUAddress, nbytes, (uint8_t)true); // Send a repeated start and then release the bus after reading
  29.     for (uint8_t i = 0; i < nbytes; i++) {
  30.       if (Wire.available())
  31.         data[i] = Wire.read();
  32.       else {
  33.         timeOutTimer = micros();
  34.         while (((micros() - timeOutTimer) < I2C_TIMEOUT) && !Wire.available());
  35.         if (Wire.available())
  36.           data[i] = Wire.read();
  37.         else {
  38.           Serial.println(F("i2cRead timeout"));
  39.           return 5; // This error value is not already taken by endTransmission
  40.         }
  41.       }
  42.     }
  43.     return 0; // Success
  44. }

  45. /******************************************************/

  46. //2560 pin map  引腳定義好即可,然后改變一下PID的幾個值(kp,kd,ksp,ksi)即可,剩下的全部都是固定的程序,
  47. //可能小車會有一點重心不在中點的現象,加一下角度值或者減一點即可
  48. //至于每個MPU6050的誤差,自己調節一下即可,不是很難
  49. //調試時先將速度環的ksp,ksi=0,調到基本可以站起來,然后可能會出現倒,或者自動跑起來的時候加上速度環
  50. //這時就會很穩定的站起來,然后用小力氣的手推不會倒。
  51. int ENA=11;
  52. int ENB=12;

  53. int IN1=4;
  54. int IN2=5;
  55. int IN3=6;
  56. int IN4=7;

  57. int MAS,MBS;


  58. /* IMU Data */
  59. double accX, accY, accZ;
  60. double gyroX, gyroY, gyroZ;
  61. int16_t tempRaw;

  62. double gyroXangle, gyroYangle; // Angle calculate using the gyro only
  63. double compAngleX, compAngleY; // Calculated angle using a complementary filter
  64. double kalAngleX, kalAngleY; // Calculated angle using a Kalman filter
  65. uint8_t i2cData[14]; // Buffer for I2C data
  66. uint32_t timer;
  67. unsigned long lastTime;      

  68. /***************************************/
  69. double P[2][2] = {{ 1, 0 },{ 0, 1 }};
  70. double Pdot[4] ={ 0,0,0,0};
  71. static const double Q_angle=0.001, Q_gyro=0.003, R_angle=0.5,dtt=0.005,C_0 = 1;
  72. double q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
  73. double angle,angle_dot,aaxdot,aax;
  74. double position_dot,position_dot_filter,positiono;

  75. /*-------------Encoder---------------*/

  76. #define LF 0
  77. #define RT 1

  78. //The balance PID
  79. float kp,kd,ksp,ksi;

  80. int Lduration,Rduration;
  81. boolean LcoderDir,RcoderDir;
  82. const byte encoder0pinA = 2;
  83. const byte encoder0pinB = 8;
  84. byte encoder0PinALast;
  85. const byte encoder1pinA = 3;
  86. const byte encoder1pinB = 9;
  87. byte encoder1PinALast;

  88. int RotationCoder[2];
  89. int turn_flag=0;
  90. float move_flag=0;
  91. float right_need = 0, left_need = 0;;

  92. int pwm;
  93. int pwm_R,pwm_L;
  94. float range;
  95. float range_error_all;
  96. float wheel_speed;
  97. float last_wheel;
  98. float error_a=0;

  99. void Kalman_Filter(double angle_m,double gyro_m)
  100. {
  101.     angle+=(gyro_m-q_bias) * dtt;
  102.     Pdot[0]=Q_angle - P[0][1] - P[1][0];
  103.     Pdot[1]=- P[1][1];
  104.     Pdot[2]=- P[1][1];
  105.     Pdot[3]=Q_gyro;
  106.     P[0][0] += Pdot[0] * dtt;
  107.     P[0][1] += Pdot[1] * dtt;
  108.     P[1][0] += Pdot[2] * dtt;
  109.     P[1][1] += Pdot[3] * dtt;
  110.     angle_err = angle_m - angle;
  111.     PCt_0 = C_0 * P[0][0];
  112.     PCt_1 = C_0 * P[1][0];
  113.     E = R_angle + C_0 * PCt_0;
  114.     K_0 = PCt_0 / E;
  115.     K_1 = PCt_1 / E;
  116.     t_0 = PCt_0;
  117.     t_1 = C_0 * P[0][1];
  118.     P[0][0] -= K_0 * t_0;
  119.     P[0][1] -= K_0 * t_1;
  120.     P[1][0] -= K_1 * t_0;
  121.     P[1][1] -= K_1 * t_1;
  122.     angle+= K_0 * angle_err;
  123.     q_bias += K_1 * angle_err;
  124.     angle_dot = gyro_m-q_bias;//也許應該用last_angle-angle
  125. }

  126. void setup() {
  127.     Wire.begin();
  128.     Serial.begin(9600);
  129.     pinMode(IN1, OUTPUT);
  130.     pinMode(IN2, OUTPUT);
  131.     pinMode(IN3, OUTPUT);
  132.     pinMode(IN4, OUTPUT);  
  133.     pinMode(ENA, OUTPUT);
  134.     pinMode(ENB, OUTPUT);
  135.     TWBR = ((F_CPU / 400000L) - 16) / 2; // Set I2C frequency to 400kHz

  136.     i2cData[0] = 7; // Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz
  137.     i2cData[1] = 0x00; // Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering, 8 KHz sampling
  138.     i2cData[2] = 0x00; // Set Gyro Full Scale Range to ±250deg/s
  139.     i2cData[3] = 0x00; // Set Accelerometer Full Scale Range to ±2g
  140.     while (i2cWrite(0x19, i2cData, 4, false)); // Write to all four registers at once
  141.     while (i2cWrite(0x6B, 0x01, true)); // PLL with X axis gyroscope reference and disable sleep mode

  142.     while (i2cRead(0x75, i2cData, 1));
  143.     if (i2cData[0] != 0x68) { // Read "WHO_AM_I" register
  144.         Serial.print(F("Error reading sensor"));
  145.         while (1);
  146.     }

  147.     delay(20); // Wait for sensor to stabilize

  148.     while (i2cRead(0x3B, i2cData, 6));
  149.     accX = (i2cData[0] << 8) | i2cData[1];
  150.     accY = (i2cData[2] << 8) | i2cData[3];
  151.     accZ = (i2cData[4] << 8) | i2cData[5];


  152.     double roll  = atan2(accX, accZ) * RAD_TO_DEG;
  153.     EnCoderInit();
  154.     timer = micros();

  155.       //The balance PID
  156.     kp= 42;//24.80;43
  157.     kd= 1.9;//9.66;1.4
  158.     ksp= 8.5;//4.14;
  159.     ksi= 2.1;//0.99; 0.550
  160. }

  161. void EnCoderInit()
  162. {
  163.     pinMode(8,INPUT);
  164.     pinMode(9,INPUT);
  165.     attachInterrupt(LF, LwheelSpeed, RISING);
  166.     attachInterrupt(RT, RwheelSpeed, RISING);
  167. }

  168. void pwm_calculate()
  169. {
  170.     unsigned long  now = millis();       // 當前時間(ms)
  171.     int Time = now - lastTime;
  172.     int range_error;
  173.     range += (Lduration + Rduration) * 0.5;
  174.     range *= 0.9;
  175.     range_error = Lduration - Rduration;
  176.     range_error_all += range_error;
  177.    
  178.     wheel_speed = range - last_wheel;   
  179.     //wheel_speed = constrain(wheel_speed,-800,800);
  180.     //Serial.println(wheel_speed);
  181.     last_wheel = range;  
  182.     pwm = (angle + 0.825) * kp + angle_dot * kd + range * ksp + wheel_speed * ksi;     
  183.     if(pwm > 255)pwm = 255;
  184.     if(pwm < -255)pwm = -255;
  185.    
  186.     if(turn_flag == 0)
  187.     {
  188.          pwm_R = pwm + range_error_all;
  189.          pwm_L = pwm - range_error_all;
  190.     }
  191.     else if(turn_flag == 1)     //左轉
  192.     {
  193.         pwm_R = pwm ;  //Direction PID control
  194.         pwm_L = pwm + left_need * 68;
  195.         range_error_all = 0;     //clean
  196.     }
  197.     else if(turn_flag == 2)
  198.     {
  199.         pwm_R = pwm + right_need * 68;  //Direction PID control
  200.         pwm_L = pwm ;
  201.         range_error_all = 0;     //clean
  202.     }
  203.       
  204.        Lduration = 0;//clean
  205.        Rduration = 0;
  206.        lastTime = now;
  207. }

  208. void PWMD()
  209. {  
  210.       if(pwm>0)
  211.       {
  212.           digitalWrite(IN1, HIGH);
  213.           digitalWrite(IN2, LOW);
  214.           digitalWrite(IN3, LOW);
  215.           digitalWrite(IN4, HIGH);   
  216.       }
  217.       else if(pwm<0)
  218.       {
  219.           digitalWrite(IN1, LOW);
  220.           digitalWrite(IN2, HIGH);
  221.           digitalWrite(IN3, HIGH);
  222.           digitalWrite(IN4, LOW);
  223.       }
  224.       int PWMr = abs(pwm);
  225.       int PWMl = abs(pwm);
  226.    
  227.       analogWrite(ENB, max(PWMl,60)); //PWM調速a==0-255  51
  228.       analogWrite(ENA, max(PWMr,60)); //PWM調速a==0-255  54
  229.       
  230. }

  231. void LwheelSpeed()
  232. {
  233.       if(digitalRead(encoder0pinB))
  234.         Lduration++;
  235.       else Lduration--;
  236. }


  237. void RwheelSpeed()
  238. {
  239.       if(digitalRead(encoder1pinB))
  240.         Rduration--;
  241.       else Rduration++;
  242. }

  243. void control()
  244. {
  245.     if(Serial.available()){
  246.       int val;
  247.       val=Serial.read();
  248.       switch(val){
  249.         case 'w':
  250.           if(move_flag<5)move_flag += 0.5;
  251.           else  move_flag = 0;
  252.           break;
  253.         case 's':
  254.           if(move_flag<5)move_flag -= 0.5;
  255.           else  move_flag = 0;
  256.          Serial.println("back");
  257.           break;
  258.         case 'a':
  259.           turn_flag = 1;
  260.           left_need = 0.6;
  261.           Serial.println("zuo");
  262.           break;
  263.         case 'd':
  264.           turn_flag = 2;
  265.           right_need = 0.6;
  266.           Serial.println("you");
  267.           break;
  268.         case 't':
  269.           move_flag=0;
  270.           turn_flag=0;
  271.           right_need = left_need = 0;
  272.           Serial.println("stop");
  273.           break;
  274.         default:
  275.           break;
  276.           }
  277.       }
  278. }

  279. void loop()
  280. {

  281.     //control();
  282.     while (i2cRead(0x3B, i2cData, 14));
  283.     accX = ((i2cData[0] << 8) | i2cData[1]);
  284.     //accY = ((i2cData[2] << 8) | i2cData[3]);
  285.     accZ = ((i2cData[4] << 8) | i2cData[5]);
  286.     //gyroX = (i2cData[8] << 8) | i2cData[9];
  287.     gyroY = (i2cData[10] << 8) | i2cData[11];
  288.     //gyroZ = (i2cData[12] << 8) | i2cData[13];

  289.     double dt = (double)(micros() - timer) / 1000000; // Calculate delta time
  290.     timer = micros();

  291.     double roll  = atan2(accX, accZ) * RAD_TO_DEG - move_flag;


  292.     //double gyroXrate = gyroX / 131.0; // Convert to deg/s
  293.     double gyroYrate = -gyroY / 131.0; // Convert to deg/s

  294.     //gyroXangle += gyroXrate * dt; // Calculate gyro angle without any filter
  295.     //gyroYangle += gyroYrate * dt;

  296.     Kalman_Filter(roll,gyroYrate);   
  297.     if(abs(angle)<35){
  298.         //Serial.println(angle);   
  299.         pwm_calculate();
  300.         PWMD();
  301.     }
  302.     else{
  303.         analogWrite(ENB, 0); //PWM調速a==0-255
  304.         analogWrite(ENA, 0); //PWM調速a==0-255
  305.     }  
  306.     delay(2);
  307. }
復制代碼

器件:Arduino UNO或者Mega2560、LM298模塊,MPU6050傳感器、兩個編碼電機,
          公母杜邦線,藍牙HT-06、鋰電池18650(4)——(成本大概200左右)

如果用手機控制可以下載應用寶里面的一個“小蜜蜂機器人”APP,個人覺得這個APP功能超強大,大神寫的APP就是屌!專門連接藍牙的串口助手,還有調試舵機的功能,簡直可以上天了。

調試過程中會學習到很多東西,希望大家可以看看,雖然我也做的很好,不過在這期間學習到了很多東西……
幾天就可以看到你想看到的現象喲,還等什么,開始動手吧,慢慢看資料慢慢理解(不對之處,敬請諒解)
                                                                                                                                  ——初學者心聲
http://v.youku.com/v_show/id_XMTUyODUwMDkxMg==.html




評分

參與人數 1黑幣 +5 收起 理由
蔡定銀 + 5 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2016-4-9 12:27 | 只看該作者
謝謝分享 樓主能傳個壓縮包嗎 好像還有些頭文件沒有
回復

使用道具 舉報

板凳
ID:100312 發表于 2016-4-9 16:55 | 只看該作者
附件里面有wire的庫文件,MPU6050原始數據分析,以及PWM輸出的原理,還有小蜜蜂藍牙助手的調試APP……

Wire_bluetooth_MPU6050數據分析.zip

5 MB, 下載次數: 146, 下載積分: 黑幣 -5

值得看看

回復

使用道具 舉報

地板
ID:91641 發表于 2016-4-15 22:35 | 只看該作者
s414545584 發表于 2016-4-9 16:55
附件里面有wire的庫文件,MPU6050原始數據分析,以及PWM輸出的原理,還有小蜜蜂藍牙助手的調試APP……

arduino平衡車自動跑起來的時候怎么加上速度環呢?
回復

使用道具 舉報

5#
ID:100312 發表于 2016-4-16 20:07 | 只看該作者
xiaobolinux 發表于 2016-4-15 22:35
arduino平衡車自動跑起來的時候怎么加上速度環呢?

直接加呀,代碼里面有
回復

使用道具 舉報

6#
ID:91641 發表于 2016-4-17 00:00 | 只看該作者
s414545584 發表于 2016-4-16 20:07
直接加呀,代碼里面有

但是我的平衡車能平衡但是只是往一個方向跑,跑一段就倒了,不能原地控制。
回復

使用道具 舉報

7#
ID:91641 發表于 2016-4-17 09:54 | 只看該作者
s414545584 發表于 2016-4-16 20:07
直接加呀,代碼里面有

哪句是關于速度環的呀
回復

使用道具 舉報

8#
ID:91641 發表于 2016-4-17 10:23 | 只看該作者
然后可能會出現倒,或者自動跑起來的時候加上速度環
//這時就會很穩定的站起來,然后用小力氣的手推不會倒。


這個不行啊,一直往前,倒。 然后代碼里面沒有加速度環呀,,怎么加呀,,速度環是啥呀,,求教
回復

使用道具 舉報

9#
ID:100312 發表于 2016-4-17 12:21 | 只看該作者
xiaobolinux 發表于 2016-4-17 10:23
然后可能會出現倒,或者自動跑起來的時候加上速度環
//這時就會很穩定的站起來,然后用小力氣的手推不會倒 ...

加q414545584,私聊,交流一下
回復

使用道具 舉報

10#
ID:134558 發表于 2016-7-21 23:21 | 只看該作者
  你好 請問在哪兒可以調初始角?
回復

使用道具 舉報

11#
ID:134558 發表于 2016-7-22 19:49 | 只看該作者
  請問一下樓主  那個電機編碼器的線 接到車上的腳是要怎么定義?
回復

使用道具 舉報

12#
ID:100312 發表于 2016-7-23 12:21 | 只看該作者
yangtao 發表于 2016-7-21 23:21
你好 請問在哪兒可以調初始角?

double roll  = atan2(accX, accZ) * RAD_TO_DEG - move_flag;
這個就是x軸方向的角度,move_flag就是偏移量,調偏移量,用串口讀數直到基本為0
回復

使用道具 舉報

13#
ID:100312 發表于 2016-7-23 12:22 | 只看該作者
yangtao 發表于 2016-7-22 19:49
請問一下樓主  那個電機編碼器的線 接到車上的腳是要怎么定義?

編碼電機上的AB相線一個用來檢測高低電平然后自加或者自減,另外一個用來觸發中斷函數,你可以看上面的引腳定義就知道啦
回復

使用道具 舉報

14#
ID:134558 發表于 2016-7-23 23:34 | 只看該作者
s414545584 發表于 2016-7-23 12:22
編碼電機上的AB相線一個用來檢測高低電平然后自加或者自減,另外一個用來觸發中斷函數,你可以看上面的引 ...

謝謝了 已經調平衡了
回復

使用道具 舉報

15#
ID:116662 發表于 2016-8-2 14:11 來自手機 | 只看該作者
好資料,辛苦樓主了
回復

使用道具 舉報

16#
ID:137339 發表于 2016-8-22 22:46 | 只看該作者
贊一個
回復

使用道具 舉報

17#
ID:137396 發表于 2016-8-23 15:28 | 只看該作者
這個還ˊ需要再修改一下 使可以適應四處移動
回復

使用道具 舉報

18#
ID:100312 發表于 2016-8-25 12:21 | 只看該作者
a98765432180 發表于 2016-8-23 15:28
這個還ˊ需要再修改一下 使可以適應四處移動

里面不是有個control函數嗎,那就是用藍牙控制的呀……
回復

使用道具 舉報

19#
ID:139027 發表于 2016-9-10 19:32 | 只看該作者
樓主可以分享個接線圖嗎?
回復

使用道具 舉報

20#
ID:189412 發表于 2017-4-14 06:36 | 只看該作者
thank you so much.
回復

使用道具 舉報

21#
ID:173821 發表于 2017-4-17 03:09 | 只看該作者
本帖最后由 bonzewu1213 于 2017-4-19 03:16 編輯

請問樓主,目前我按您貼的源碼,上傳後,僅有右輪正常運轉,傾斜加速,反向傾斜,反向加速,但僅有右輪會動,左輪完全不動,是不是源碼有地方被註記起來,沒有打開,謝謝。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

22#
ID:173821 發表于 2017-4-17 20:54 | 只看該作者
哈哈,ENA及ENB應接11,12,接錯了,接成10,11,改正後就可以了,已經解決,只是重心還要調一下,基本上已正常運作,太棒了,感謝樓主,大大感謝。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

23#
ID:191204 發表于 2017-4-19 14:07 | 只看該作者
bonzewu1213 發表于 2017-4-17 03:09
請問樓主,目前我按您貼的源碼,上傳後,僅有右輪正常運轉,傾斜加速,反向傾斜,反向加速,但僅有右輪會動 ...

我上傳后怎么兩個輪子都沒動
回復

使用道具 舉報

24#
ID:173821 發表于 2017-4-20 00:36 | 只看該作者
仔仔12 發表于 2017-4-19 14:07
我上傳后怎么兩個輪子都沒動

據我所知,L298N 有分A,B 兩型, 你要買那種 6根排針上面都沒有jumper 的那種,馬達電源需要有12V,12V接線要接對,接錯,很容易把線燒著了,得趕緊滅火 XD 如果接線都對了,應該跑得起來才對,原始作者,應該給他大大讚一個!
回復

使用道具 舉報

25#
ID:216395 發表于 2017-7-2 17:55 | 只看該作者
不錯,真的不錯,我正在找呢
回復

使用道具 舉報

26#
ID:216395 發表于 2017-7-2 17:56 | 只看該作者
這些代碼我正需要,沒想到在這個網站找到了,不錯!
回復

使用道具 舉報

27#
ID:232830 發表于 2017-9-13 10:54 | 只看該作者
這些代碼我正需要,沒想到在這個網站找到了,不錯!
回復

使用道具 舉報

28#
ID:232830 發表于 2017-9-13 10:54 | 只看該作者
這些代碼我正需要,沒想到在這個網站找到了,不錯!
回復

使用道具 舉報

29#
ID:214383 發表于 2017-9-16 00:50 來自手機 | 只看該作者
學習了
回復

使用道具 舉報

30#
ID:238956 發表于 2017-10-12 19:40 | 只看該作者
學習一下
回復

使用道具 舉報

31#
ID:177577 發表于 2017-11-27 19:54 | 只看該作者
樓主有接線圖嗎?
回復

使用道具 舉報

32#
ID:254763 發表于 2017-11-28 16:40 | 只看該作者
好棒,不知運行結果如何。
回復

使用道具 舉報

33#
ID:233519 發表于 2018-5-1 10:04 | 只看該作者
這個厲害了!!!
回復

使用道具 舉報

34#
ID:315589 發表于 2018-5-3 11:21 | 只看該作者
真的很溜哦
回復

使用道具 舉報

35#
ID:79544 發表于 2018-7-29 18:10 | 只看該作者
樓主您好!分享出原理圖啊謝謝!!
回復

使用道具 舉報

36#
ID:161201 發表于 2019-1-15 02:28 | 只看該作者
好棒,不知運行結果如何
回復

使用道具 舉報

37#
ID:540025 發表于 2019-5-16 17:17 | 只看該作者
感謝樓主的分享,剛從百度上搜到這篇文章,小蜜蜂app的大神真棒。就是app資源確實難找
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品久久久久久牛牛 | 国产精品视频久久久 | 国产欧美在线视频 | 99pao成人国产永久免费视频 | 99视频免费播放 | 91av免费版| 在线免费观看a级片 | 亚洲精选久久 | 老司机狠狠爱 | 日韩伦理一区二区 | 亚洲欧美日韩精品久久亚洲区 | 91久久精 | 男人的天堂在线视频 | 免费的一级视频 | 黄免费观看视频 | 成人欧美一区二区三区黑人孕妇 | 亚洲成av人影片在线观看 | h视频在线免费看 | 国产亚洲精品精品国产亚洲综合 | 91成人| 亚洲在线 | www.狠狠干 | 一级在线观看 | 99re | 中文日韩在线 | 免费在线播放黄色 | 影音先锋久久 | 欧美精品1区2区 | 午夜精品久久久久久不卡欧美一级 | 国产一级影片 | 成人av免费| 亚洲视频在线观看 | 色播99 | 51ⅴ精品国产91久久久久久 | 中文字幕av色 | 精品成人免费视频 | 一区二区三区日韩 | 亚洲视频在线一区 | 欧美激情亚洲 | 欧美电影一区 | 欧美日韩福利视频 |