查看: 234|回复: 10

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

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

用的是ULN2003A模块

4相5线 28BYJ-48 步进电机
和光敏电阻或光敏模块。
最近才接触arduino,不懂就来问.
 楼主| 发表于 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);
  }
}
 楼主| 发表于 2019-12-3 16:58 | 显示全部楼层
但是如果要实现根据光敏模块的数值控制电机旋转的角度,要怎么做呢?主要是想实现利用光敏模块控制百叶窗的开合程度。
发表于 2019-12-4 22:29 | 显示全部楼层
设置几个判断,如果光敏反馈的信号在某一范围步进电机往哪个方向转几下。把感光值分区就好了
 楼主| 发表于 2019-12-5 09:19 | 显示全部楼层
duron_w 发表于 2019-12-4 22:29
设置几个判断,如果光敏反馈的信号在某一范围步进电机往哪个方向转几下。把感光值分区就好了 ...

好像很复杂,先要判断当前光敏值和电机旋转角度的光敏值的大小,决定顺时针还是逆时针旋转,另外差值是多少,再让电机转一定的步数。我试试把程序写出来。感谢感谢
发表于 2019-12-5 15:44 | 显示全部楼层
earlysun 发表于 2019-12-5 09:19
好像很复杂,先要判断当前光敏值和电机旋转角度的光敏值的大小,决定顺时针还是逆时针旋转,另外差值是多 ...

不客气,重点是找到感光值和百叶窗位置关系。还有一种方法就是设定一个感光值,大于这个就关上一点,小于这个值就打开一点,直到全开或全关。
 楼主| 发表于 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(); // 接收下一个值
  }
}
发表于 2019-12-7 16:38 | 显示全部楼层
earlysun 发表于 2019-12-6 16:24
这个程序变相实现了光敏模块控制百叶窗开合程度,但是没能解决步进电机当前所旋转的角度,导致现在无法让 ...

建议您在完全关闭或是完全打开的状态设置个开关,比如微动开关,检测百叶窗是否到达最大值或是最小值。上电后先自自检最大或最小值,然后再调整。让整个执行系统形成闭环。
再有,我看您整个用到了红外遥控,不知道用的啥型号,我也在试红外遥控,但是发现接收回来的编码不稳定,而且这个红外库文件解码出来的值也不能保证每次都准确。不知道您是否碰到这些问题。
 楼主| 发表于 2019-12-9 08:22 | 显示全部楼层
duron_w 发表于 2019-12-7 16:38
建议您在完全关闭或是完全打开的状态设置个开关,比如微动开关,检测百叶窗是否到达最大值或是最小值。上 ...

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

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

本版积分规则

热门推荐

Blynk与m5stack basic以及uiflow的交互玩法
Blynk与m5stack basic以及
Blynk与m5stack basic以及uiflow的交互玩法 [准备工作我们假设玩家已经熟悉下面的准备
【搬运】通过UDP将M5Camera图像发送至M5Stack
【搬运】通过UDP将M5Camer
本例将介绍通过UDP发送图像至M5Stack,代码分为M5CameraB与M5Stack,由于UDP传输
SYN6288语音模块
SYN6288语音模块
我用arduino写SYN6288的程序,用的是UNO板,可以吗? SYN怎么将文字转化为语音输出啊
【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
【原创】 drawbot平面关节
这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
【原创】全球最小口袋3D打印机mini one直播教程贴
【原创】全球最小口袋3D打
最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表