沛華LabVIEW基礎課程|第47講
『LabVIEW+Arduino』
跟隨小車
看到這個標題的小夥伴是不是覺得有些熟悉?
跟隨效果的小車之前我們用LabVIEW簡單實現過-LabVIEW+ Arduino之「跟屁蟲」小車(←←←點擊藍字可回顧);這期內容我們在」跟屁蟲「小車的基礎上加以改進,具體請看以下視頻。
請看視頻
實物接線圖
實物接線圖
這期內容用到的材料如下:
1.紅外測距傳感器模塊*2;
2.Arduino UNO開發板;
3.麵包線、杜班線若干;
4.數據線;
5.小車套件;
6.電機驅動模塊;
7.升壓模塊;
8.3.7V鋰電池;
紅外測距傳感器模塊
紅外測距傳感器&Arduino的接線分別為:
Left→AI0;
Right→AI1。
電機&Arduino的接線分別為:
左電機→DO5;
左電機→DO6;
右電機→DO10;
右電機→DO11。
Arduino Code
向上滑動查看Arduino原始碼
#define Samples 10
#define UpperLimit 2.9
#define LowerLimit 1.4
boolean blinking;
float Sensor_volt_Left = 0;
float Sensor_volt_Right = 0;
void setup() {
Serial.begin(2000000);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
Acquire();
if (CheckStop()){
Stop();
blinking=!blinking;
if(long((millis()/100))%2==0){
digitalWrite(12, blinking);
digitalWrite(13, blinking);
}
}
else {
if (CheckTurnLeft())
{
digitalWrite(12, 1);
digitalWrite(13, 0);
}
else {
digitalWrite(12, 0);
}
if (CheckTurnRight()) {
digitalWrite(12, 0);
digitalWrite(13, 1);
}else {
digitalWrite(13, 0);
}
if (CheckTurnLeft() == 1 && CheckTurnRight() == 0)
{
TurnLeft();
}
else if (CheckTurnLeft() == 0 && CheckTurnRight() == 1) {
TurnRight();
}
else if (CheckTurnLeft() == 1 && CheckTurnRight() == 1) {
GoForward();
}
else {
Stop();
}
}
}
void GoForward() {
digitalWrite(5, 0);
digitalWrite(6, 1);
digitalWrite(10, 1);
digitalWrite(11, 0);
}
void GoBack() {
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(10, 0);
digitalWrite(11, 1);
}
void TurnLeft() {
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(10, 1);
digitalWrite(11, 0);
}
void TurnRight() {
digitalWrite(5, 0);
digitalWrite(6, 1);
digitalWrite(10, 0);
digitalWrite(11, 1);
}
void Stop() {
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(10, 0);
digitalWrite(11, 0);
}
void Acquire() {
float Sum_A0 = 0;
float Sum_A1 = 0;
for (int i = 0; i < Samples; i++)
{
Sum_A0 += analogRead(0) / 204.8;
Sum_A1 += analogRead(1) / 204.8;
delayMicroseconds(10);
}
Sensor_volt_Left = Sum_A0 / Samples;
Sensor_volt_Right = Sum_A1 / Samples;
}
boolean CheckTurnLeft() {
return (Sensor_volt_Left > LowerLimit); //大於LowerLimit則表明檢測到物體
// return (Sensor_volt_Left > LowerLimit) && (Sensor_volt_Left < UpperLimit);
}
boolean CheckTurnRight() {
return (Sensor_volt_Right > LowerLimit);//大於LowerLimit則表明檢測到物體
//return (Sensor_volt_Right > LowerLimit) && (Sensor_volt_Right < UpperLimit) ;
}
boolean CheckStop() {
return Sensor_volt_Left > 2.8;
// return (Sensor_volt_Left > 3.2) && (Sensor_volt_Right> 2.5);
// return ((Sensor_volt_Left > 2.2) && (Sensor_volt_Left < 2.5)) &&((Sensor_volt_Right > 1.9) && (Sensor_volt_Right < 2.1));
}
以上就是今天的內容,老規矩:對本期內容感興趣的小夥伴後臺發送阿拉伯數字「47」獲取源碼研究~