找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14354|回复: 22
收起左侧

我这几年业余DIY磁悬浮实验的视频分享给大家

  [复制链接]
ID:80996 发表于 2017-4-23 19:55 | 显示全部楼层 |阅读模式

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-4-24 01:59 | 显示全部楼层
楼主牛人啊 能分享点程序和电路吗?
回复

使用道具 举报

ID:1 发表于 2017-4-24 01:59 | 显示全部楼层
楼主牛人啊 能分享点程序和电路吗?
回复

使用道具 举报

ID:187614 发表于 2017-4-24 06:38 | 显示全部楼层
确实牛
回复

使用道具 举报

ID:80996 发表于 2017-4-24 12:24 | 显示全部楼层
可以,等我下板发上来一些
回复

使用道具 举报

ID:74784 发表于 2017-4-27 20:18 | 显示全部楼层
小赵 发表于 2017-4-24 12:24
可以,等我下板发上来一些

最好能出套件~~~~~~~~~~~
回复

使用道具 举报

ID:217754 发表于 2017-7-24 22:16 | 显示全部楼层
留印。等楼主什么时候发图。好期待做一个
回复

使用道具 举报

ID:232182 发表于 2017-9-10 08:32 | 显示全部楼层
楼主看见请联系我,邮箱422236998@qq.com
回复

使用道具 举报

ID:229500 发表于 2017-12-1 17:43 | 显示全部楼层
请问有电路图和源代码这些吗??
回复

使用道具 举报

ID:254411 发表于 2017-12-22 20:37 | 显示全部楼层
请问平行控制原理任何?
回复

使用道具 举报

ID:276348 发表于 2018-1-30 19:29 | 显示全部楼层
简单的看看了视频,感觉还是不错的。
回复

使用道具 举报

ID:55655 发表于 2018-4-6 16:23 | 显示全部楼层
楼主套件都卖光了也不见电路图。
回复

使用道具 举报

ID:74784 发表于 2018-4-17 17:35 | 显示全部楼层
快过去一年了
楼主的资料啥时间发上来呀?
回复

使用道具 举报

ID:80996 发表于 2019-1-16 18:21 | 显示全部楼层
#include <PID_v1.h>
#define IN1 4
#define IN2 3
#define IN3 8
#define IN4 7
#define ENA 6
#define ENB 5
#define BL 2



extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

double Setpoint_X, Input_X, Output_X,X_plus;
double p_X =0.8,i_X =0.1,d_X = 0.008;
double Setpoint_Y, Input_Y, Output_Y,Y_plus;
double p_Y =0.8,i_Y =0.1,d_Y = 0.008;
int i,on_put;
unsigned long time;
PID PID_X(&Input_X, &Output_X, &Setpoint_X,p_X,i_X,d_X, DIRECT);
PID PID_Y(&Input_Y, &Output_Y, &Setpoint_Y,p_Y,i_Y,d_Y, DIRECT);

char inByte='9',nullByte,run_flag,run_dirict;
float go_step;

void turn_X(int a)
{
  if(a>=0)
  {
    digitalWrite(IN1,1);
    digitalWrite(IN2,0);
    analogWrite(ENA,a);
  }
  else
  {
    a=-a;
    digitalWrite(IN1,0);
    digitalWrite(IN2,1);
    analogWrite(ENA,a);
  }
}

void turn_Y(int a)
{
  if(a>=0)
  {
    digitalWrite(IN3,0);
    digitalWrite(IN4,1);
    analogWrite(ENB,a);
  }
  else
  {
    a=-a;
    digitalWrite(IN3,1);
    digitalWrite(IN4,0);
    analogWrite(ENB,a);
  }
}

void setup()
{



  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(ENA,OUTPUT);
  pinMode(ENB,OUTPUT);
  pinMode(BL,OUTPUT);
  digitalWrite(IN1,0);
  digitalWrite(IN2,0);
  digitalWrite(IN3,0);
  digitalWrite(IN4,0);
  analogWrite(ENA,0);
  analogWrite(ENB,0);

  Serial.begin(115200);

  Setpoint_X = 500;//560;
  Setpoint_Y = 500;//560;
  PID_X.SetTunings(p_X,i_X,d_X);
  PID_Y.SetTunings(p_Y,i_Y,d_Y);
  PID_X.SetOutputLimits(-255,255);
  PID_Y.SetOutputLimits(-255,255);
  PID_X.SetSampleTime(5);
  PID_Y.SetSampleTime(5);
  PID_X.SetMode(AUTOMATIC);
  PID_Y.SetMode(AUTOMATIC);
}

void loop()
{
  while (Serial.available() > 0)  
  {
    nullByte= char(Serial.read());
    if(nullByte == 'w')
    {
      Setpoint_X+=10;
      //inByte =Serial.read();
    }
    else if(nullByte == 'q')
    {
      Setpoint_X-=10;
    }
    else if(nullByte == 's')
    {
      Setpoint_Y+=10;
    }
    else if(nullByte == 'a')
    {
      Setpoint_Y-=10;
    }
    else if(nullByte == 'o')
    {
      run_flag=!run_flag;
      run_dirict = 1;
      Setpoint_X=560;
      Setpoint_Y=560;
    }
    else if(nullByte =='p')
    {
      run_flag=!run_flag;
      run_dirict = 0;
      Setpoint_X=560;
      Setpoint_Y=560;
    }
    else if(nullByte =='x')
    {
      nullByte=char(Serial.read());
      if(nullByte>20)
      {inByte=nullByte;
      Setpoint_X = 10*(inByte-'0')+480;
      }
      nullByte=char(Serial.read());
      if(nullByte>20)
      {inByte=nullByte;
      Setpoint_Y = 10*(inByte-'0')+480;
      }
    }


    if(Setpoint_X>575)
      Setpoint_X=575;
    if(Setpoint_Y>575)
      Setpoint_Y=575;
    if(Setpoint_X<480)
      Setpoint_X=480;
    if(Setpoint_Y<480)
      Setpoint_Y=480;
    nullByte ='?';
  }

  Input_X = analogRead(A1);
  Input_Y = analogRead(A0);
  if(analogRead(A2)>450)
  {
    digitalWrite(BL,1);
    on_put=1;
  }
  else
  {
    digitalWrite(BL,0);
    on_put=0;
  }

  i++;


  if(on_put)
  {
    PID_X.Compute();
    PID_Y.Compute();
    turn_X(Output_X+X_plus);
    turn_Y(Output_Y+Y_plus);

    if(run_flag)
    {
      if(millis()-time>2)
      {
        time = millis();
        if(run_dirict)
        {
          X_plus = 25*cos(go_step);
          Y_plus = 25*sin(go_step);
        }
        else
        {
          X_plus = 25*sin(go_step);
          Y_plus = 25*cos(go_step);
        }
        go_step+=0.07;
        if(go_step>6.3)
          go_step=0;
      }
    }
  }
  else
  {
    turn_X(0);
    turn_Y(0);
  }

Serial.println(Input_X);
Serial.println(Input_Y);
// Serial.print(on_put);
}

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:80996 发表于 2019-1-16 18:22 | 显示全部楼层
791351391
回复

使用道具 举报

ID:80996 发表于 2019-1-16 18:23 | 显示全部楼层
lxa0 发表于 2018-4-17 17:35
快过去一年了
楼主的资料啥时间发上来呀?

发不出去啊
回复

使用道具 举报

ID:1 发表于 2019-1-17 02:36 | 显示全部楼层

rar或者7z打包就可以上传附件了
回复

使用道具 举报

ID:471573 发表于 2019-1-23 17:23 | 显示全部楼层
挺丰富的!!!
回复

使用道具 举报

ID:478985 发表于 2019-2-21 18:02 | 显示全部楼层
老司机,求分享
回复

使用道具 举报

ID:399411 发表于 2019-2-26 09:29 | 显示全部楼层
楼主分享电路和程序打包文件啊
回复

使用道具 举报

ID:594896 发表于 2019-8-12 16:47 | 显示全部楼层
大神,求分享电路和程序打包文件啊
回复

使用道具 举报

ID:1086546 发表于 2023-6-29 18:19 | 显示全部楼层
嘿嘿嘿,大佬现在还弄吗?我现在要搞一个上拉式的磁悬浮,纯硬件的,还要实现下面的球体自转的效果
回复

使用道具 举报

ID:1065225 发表于 2023-7-11 20:46 | 显示全部楼层
那个超声波属实厉害 惊艳啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表