本帖最后由 大猫8888 于 2019-12-20 19:23 编辑
喜欢自驾游,走的地方多了就发现车灯的照射角度有限,特别是在山路大角度转弯和大坑照射不到,所以有了用头追的方式控制探照灯的想法
基本想法是用3D打印件支撑两个55克的舵机,控制灯的水平和垂直转动。灯为美国可瑞L2单颗大功率LED,用单片机控制它实现长亮、爆闪、短闪几个挡位
我用arduino编写的程序很初级很简单,姿态控制用的是6050,实际应用时发现三个问题:
1、Arduino 进口UNO,上传程序后控制基本正常,两个舵机都有动作,但是一旦断电再上电,两个舵机只是通电瞬间动一下归位然后就再也没反应了,按复位按钮复位也没用。必须重新烧写一次才有反映,但依然不能断电。我用的是进口原装UNO,不知是什么原因?
2、6050的问题:xy轴基本正常,但Z轴要么没输出,要么就乱跳,换了两块6050都是同样的毛病。网上查了很多资料,6050的应用基本没看到用z轴的。。。不知道有没有熟悉6050的朋友?
3、UNO的pwm输出很不稳定,比如模拟输出200时,灯会象鬼火那样忽悠忽悠的乱闪(没有示波器看不到波形是怎么样的),有没有写过LED控制的朋友?
代码:
1、灯的控制:
void setup(){
pinMode(5, INPUT);
pinMode(4, INPUT);
pinMode(10, OUTPUT);
pinMode(3, INPUT);
}
void loop(){
if (digitalRead(5) == LOW) {
analogWrite(10,255);
delay(50);
analogWrite(10,0);
delay(1000);
} else {
analogWrite(10,0);
}
if (digitalRead(4) == LOW) {
digitalWrite(10,HIGH);
} else {
analogWrite(10,0);
}
if (digitalRead(3) == LOW) {
analogWrite(10,255);
delay(20);
analogWrite(10,0);
delay(50);
} else {
analogWrite(10,0);
}
}
二、姿态控制:
#include<Servo.h>
Servo analogservo;
Servo analogservo2;
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t value
int16_t value2;
bool blinkState = false;
void setup() {
analogservo.attach(10);
analogservo2.attach(11);
}
void loop() {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
value2=90-az/350;
value=90+ay/350;
analogservo2.write(value2);
analogservo.write(value);
blinkState = !blinkState;
delay(30);
}
其他设计
[现学现卖Arduino实战]一、盲人雷达
http://www.51hei.com/bbs/dpj-175950-1.html
(出处: 单片机论坛)
|