查看: 370|回复: 10

[已解决] 如何使用光敏电阻控制电机正反转

[复制链接]
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-12-3 14:42 | 显示全部楼层 |阅读模式
    本帖最后由 earlysun 于 2019-12-6 16:12 编辑

    用的是ULN2003A模块

    4相5线 28BYJ-48 步进电机
    和光敏电阻或光敏模块。
    最近才接触arduino,不懂就来问.
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-12-3 16:55 | 显示全部楼层
    看了很多帖子,加上同学帮忙,正反转倒是懂了一些.
    #include <Stepper.h>
    #define STEPS 60// 这里设置步进电机旋转一圈是多少步
    Stepper Stepper(STEPS,8,9,10,11);//设置步进电机的步数和引脚(注意驱动板上INA~IND连接的四个数字口分别对应arduino板的9,10,8,11)。

    int a =160;     //此处需是环境基础亮度变量,请查看自己的亮度数值,
                    //填写到此处数值要略大于所测得的数据但小于灯光下的数据
    void setup ()
    {
      Stepper.setSpeed(390);// 设置电机的转速:每分钟为90步
      Serial.begin(9600);
      pinMode(13,OUTPUT);
    }
    void loop()
    {
      int n = analogRead(A0);            //读取模拟口A0数值
      Serial.println(n);
      if (n>= a )                   //对光线强度进行判断,如果比我们的预设值大 就点亮LED否则就关闭
      {
        digitalWrite(13,HIGH);
          Serial.println("shun");// 顺时针旋转一周
          Stepper.step(5120); //4步模式下旋转一周用2048 步。
          delay(500);
      }
      else
      {
        digitalWrite(13,LOW);
           Serial.println("ni"); // 逆时针旋转半周
           Stepper.step(-5120); //4步模式下旋转一周用1024 步。
           delay(500);
      }
    }
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-12-3 16:58 | 显示全部楼层
    但是如果要实现根据光敏模块的数值控制电机旋转的角度,要怎么做呢?主要是想实现利用光敏模块控制百叶窗的开合程度。
  • TA的每日心情
    郁闷
    2020-1-10 22:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-12-4 22:29 | 显示全部楼层
    设置几个判断,如果光敏反馈的信号在某一范围步进电机往哪个方向转几下。把感光值分区就好了
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-12-5 09:19 | 显示全部楼层
    duron_w 发表于 2019-12-4 22:29
    设置几个判断,如果光敏反馈的信号在某一范围步进电机往哪个方向转几下。把感光值分区就好了 ...

    好像很复杂,先要判断当前光敏值和电机旋转角度的光敏值的大小,决定顺时针还是逆时针旋转,另外差值是多少,再让电机转一定的步数。我试试把程序写出来。感谢感谢
  • TA的每日心情
    郁闷
    2020-1-10 22:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-12-5 15:44 | 显示全部楼层
    earlysun 发表于 2019-12-5 09:19
    好像很复杂,先要判断当前光敏值和电机旋转角度的光敏值的大小,决定顺时针还是逆时针旋转,另外差值是多 ...

    不客气,重点是找到感光值和百叶窗位置关系。还有一种方法就是设定一个感光值,大于这个就关上一点,小于这个值就打开一点,直到全开或全关。
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-12-6 16:24 | 显示全部楼层
    本帖最后由 earlysun 于 2019-12-6 16:48 编辑
    duron_w 发表于 2019-12-5 15:44
    不客气,重点是找到感光值和百叶窗位置关系。还有一种方法就是设定一个感光值,大于这个就关上一点,小于 ...

    这个程序变相实现了光敏模块控制百叶窗开合程度,但是没能解决步进电机当前所旋转的角度,导致现在无法让叶片处于水平状态,也就是完全开启百叶窗和百叶窗完全关闭无法实现.难受的一批
    #include <IRremote.h>
    #include <Stepper.h>
    #define STEPS 60// 这里设置步进电机旋转一圈是多少步


    Stepper Stepper(STEPS,8,9,10,11);//设置步进电机的步数和引脚(注意驱动板上INA~IND连接的四个数字口分别对应arduino板的9,10,8,11)。

      
    int RECV_PIN = 6;
    IRrecv irrecv(RECV_PIN);
    decode_results results;   
    int a =100;     //此处需是环境基础亮度变量,请查看自己的亮度数值,
    int b =250;
    int c =500;
    int d =5;
                    //填写到此处数值要略大于所测得的数据但小于灯光下的数据
    void setup ()
    {
      Stepper.setSpeed(390);// 设置电机的转速:每分钟为90步
      
      Serial.begin(9600);
      pinMode(13,OUTPUT);
      irrecv.enableIRIn(); //初始化红外遥控
      pinMode(12,OUTPUT);
    }
    void loop()
    {
      int n = analogRead(A0);  //读取模拟口A0数值
      Serial.println(n);
      if (n< a and n> d)              //对光线强度进行判断,如果比我们的预设值小就让光照进入室内
      {
          digitalWrite(13,LOW);
          Serial.println("ni");// 逆时针旋转
          Stepper.step(-20); //4步模式下旋转一周用2048 步。
          delay(200);
      }
      if (n> b and n < c)
      {
           digitalWrite(13,LOW);
           Serial.println("shun"); // 顺时针旋转
           Stepper.step(20); //4步模式下旋转半周用1024 步。
           delay(200);
      }
      if (n > c)
      {
          digitalWrite(13,LOW);
          delay(200);
      }
        if (n <b and n >a)
      {
              digitalWrite(13,HIGH);
              digitalWrite(8, LOW);
              digitalWrite(9, LOW);
              digitalWrite(10, LOW);
              digitalWrite(11, LOW);
              delay(200);
      }
      if (irrecv.decode(&results))
      {
       if(results.value==16724175)    //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。
      {
      digitalWrite(12,HIGH);   //点亮LED
      Serial.println("turn on LED");  //串口显示开灯
         
      }
      else if(results.value==16718055)//确认接收到的第一排按键2的编码
      {
       digitalWrite(12,LOW);  //熄灭LED
       Serial.println("turn off LED");  //串口显示关灯
         
      }
        irrecv.resume(); // 接收下一个值
      }
    }
  • TA的每日心情
    郁闷
    2020-1-10 22:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-12-7 16:38 | 显示全部楼层
    earlysun 发表于 2019-12-6 16:24
    这个程序变相实现了光敏模块控制百叶窗开合程度,但是没能解决步进电机当前所旋转的角度,导致现在无法让 ...

    建议您在完全关闭或是完全打开的状态设置个开关,比如微动开关,检测百叶窗是否到达最大值或是最小值。上电后先自自检最大或最小值,然后再调整。让整个执行系统形成闭环。
    再有,我看您整个用到了红外遥控,不知道用的啥型号,我也在试红外遥控,但是发现接收回来的编码不稳定,而且这个红外库文件解码出来的值也不能保证每次都准确。不知道您是否碰到这些问题。
  • TA的每日心情

    2019-12-10 08:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-12-9 08:22 | 显示全部楼层
    duron_w 发表于 2019-12-7 16:38
    建议您在完全关闭或是完全打开的状态设置个开关,比如微动开关,检测百叶窗是否到达最大值或是最小值。上 ...

    红外用的是 OPEN JUMPER的,目前没有碰到这种情况。
  • TA的每日心情
    郁闷
    2020-1-10 22:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-12-9 14:45 | 显示全部楼层
    earlysun 发表于 2019-12-9 08:22
    红外用的是 OPEN JUMPER的,目前没有碰到这种情况。

    啥型号?某宝有卖吗?怎么搜索?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Arduino使用电阻分压测量电池电压问题
    Arduino使用电阻分压测量
    请教,下图中的连接有什么问题,如何调整? 让只有一块电池的条件下,解决测量电压不
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表