Arduino项目- LDR和伺服电机同步和旋转



我做一个家庭项目只是为了好玩,我对Arduino很陌生,但我确实知道基础知识。

我正在制作一个自动百叶帘,暗时打开,亮时关闭。

因此,当光传感器检测到黑暗时,百叶百叶窗的板条将旋转到打开位置,当光传感器检测到光线时,板条将旋转到关闭位置。

我使用:

arduino uno r3/连续伺服电机/领导/LDR(光传感器)/10 k电阻/

此代码适用于标准伺服电机。我想让它与连续伺服电机一起工作,因为你可以"更好地控制它",这是我所拥有的。

我想我需要一个像这样的if语句:

如果光传感器检测到黑暗,则将伺服电机a旋转到一定程度后停止如果光传感器检测到光,则将伺服电机旋转到一定程度,然后停止。

#include <Servo.h>
Servo servo1;
int sensorPin = A0;            // select the input pin for the ldr
int ledPin = 13;  
unsigned int sensorValue = 0;
int servoPin = 9;
int pos = 0;
void setup()
{
  //Start Serial port
  Serial.begin(9600);        // start serial for output - for testing
  servo1.attach(9);
  pinMode(ledPin, OUTPUT);
}
void loop()
{
  // For DEBUGGING - Print out our data, uncomment the lines below
  Serial.print("Cell = ");     // print the value (0 to 1024)
  Serial.println(analogRead(sensorPin));                   // print carriage return  
  pos = analogRead(sensorPin);
  pos = constrain (pos, 0, 1023);
  int servoPos = map(pos, 0, 1023, 255, 0);
  int servoDegree = map(servoPos, 255, 0, 0, 179);
  servo1.write(servoDegree);
  Serial.print("Servo Degree = ");
  Serial.println(servoDegree);

  int val = analogRead(sensorPin);
  val = constrain (val, 0, 1023);
  int ledLevel = map(val, 0, 1023, 255, 0);
  analogWrite (ledPin, ledLevel);  
  delay(50);  
}   

使用连续伺服电机,您可以放弃位置信息。(详情请参阅Polou页面。)这意味着你将不知道百叶窗何时到达他们的打开/关闭位置,除非你也添加限位开关。如果你用开关,那么连续伺服就可以工作了。一个更好的解决方案可能是一个小齿轮步进电机像这一个从AdaFruit。他们有扭矩,但他们比连续伺服慢得多。

关键是,你不希望不断地激励电机(这是标准伺服器保持位置的方式)。这是一种浪费,并且会在像百叶窗应用程序这样的东西中烧毁电机,日复一日。你想让它完成任务,然后在loop()中等待,直到状态(应用程序中的亮度)发生变化。因此,您需要跟踪最后的光照水平,然后在loop()中检查当前的光照水平是否不同(并且大于您必须通过测试确定的某个阈值),然后更改百叶窗的状态并存储最后的光照水平。

相关内容

  • 没有找到相关文章

最新更新