本帖最后由 大貓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);
}
頭追1.jpg (221.87 KB, 下載次數: 107)
下載附件
2019-12-18 17:54 上傳
頭追2.jpg (171.75 KB, 下載次數: 105)
下載附件
2019-12-18 17:54 上傳
其他設計
[現學現賣Arduino實戰]一、盲人雷達
http://www.zg4o1577.cn/bbs/dpj-175950-1.html
(出處: 單片機論壇)
|