极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11477|回复: 4

炒个剩饭-超声波智能小车+3D打印外壳

[复制链接]
发表于 2016-6-30 21:04:45 | 显示全部楼层 |阅读模式
本帖最后由 lslcxlsl 于 2016-6-30 21:09 编辑




用3d打印机打印了超声波模块的外壳,舵机支架和开关支架


代码注意的是前进 后退 左右转的的代码,我做的小车,超声波在 电机接头方向,需要修改到你的车的方向。

电路的接法,注意的是L298 接12v GND  5V 这三个接头分别接到arduino uno的 5V GND 5v ,不用在单独给L298N供电了,转速还可以接受,我用的是两节锂电池串联。

  1. #define DEBUG 0    // set to 1 to print to serial monitor, 0 to disable

  2. #include <Servo.h>



  3. Servo headservo;  // 头部舵机对象



  4. // Constants

  5. const int EchoPin = 2; //超声波信号输入

  6. const int TrigPin = 3; //超声波控制信号输出



  7. const int leftmotorpin1 = 4; // 直流电机信号输出

  8. const int leftmotorpin2 = 5;

  9. const int rightmotorpin1 = 6;

  10. const int rightmotorpin2 = 7;



  11. const int HeadServopin = 9; // 舵机信号输出 只有9或10接口可利用

  12. const int Sharppin = 11; // 红外输入



  13. const int maxStart = 800;  //run dec time



  14. // Variables

  15. int isStart = maxStart;    //启动

  16. int currDist = 0;    // 距离

  17. boolean running = false;



  18. void setup() {



  19.   Serial.begin(9600); // 开始串行监测



  20.   //信号输入接口

  21.   pinMode(EchoPin, INPUT);

  22.   pinMode(Sharppin, INPUT);



  23.   //信号输出接口

  24.   for (int pinindex = 3; pinindex < 11; pinindex++) {

  25.     pinMode(pinindex, OUTPUT); // set pins 3 to 10 as outputs

  26.   }



  27.   //舵机接口

  28.   headservo.attach(HeadServopin);



  29.   //启动缓冲活动头部

  30.   headservo.write(70);

  31.   delay(2000);

  32.   headservo.write(20);

  33.   delay(2000);

  34. }



  35. void loop() {



  36.   if(DEBUG){

  37.     Serial.print("running:");

  38.     if(running){

  39.       Serial.println("true");

  40.     }

  41.     else{

  42.       Serial.println("false");

  43.     }

  44.   }



  45.   if (isStart <= 0) {

  46.     if(running){

  47.       totalhalt();    // stop!

  48.     }

  49.     int findsomebody = digitalRead(Sharppin);

  50.     if(DEBUG){

  51.       Serial.print("findsomebody:");  

  52.       Serial.println(findsomebody);  

  53.     }   

  54.     if(findsomebody > 0) {

  55.       isStart = maxStart;

  56.     }

  57.     delay(4000);

  58.     return;

  59.   }

  60.   isStart--;

  61.   delay(100);



  62.   if(DEBUG){

  63.     Serial.print("isStart: ");

  64.     Serial.println(isStart);

  65.   }



  66.   currDist = MeasuringDistance(); //读取前端距离



  67.   if(DEBUG){

  68.     Serial.print("Current Distance: ");

  69.     Serial.println(currDist);

  70.   }


  71. //判断距离选择前进还是后退
  72.   if(currDist > 30) {

  73.     nodanger();

  74.   }

  75.   else if(currDist < 15){

  76.     backup();

  77.     randTrun();

  78.   }

  79.   else {

  80.     whichway();  //判断路径

  81.    // randTrun();

  82.   }

  83. }



  84. //测量距离 单位厘米

  85. long MeasuringDistance() {

  86.   long duration;

  87.   //pinMode(TrigPin, OUTPUT);

  88.   digitalWrite(TrigPin, LOW);

  89.   delayMicroseconds(2);

  90.   digitalWrite(TrigPin, HIGH);

  91.   delayMicroseconds(5);

  92.   digitalWrite(TrigPin, LOW);



  93.   //pinMode(EchoPin, INPUT);

  94.   duration = pulseIn(EchoPin, HIGH);



  95.   return duration / 29 / 2;

  96. }



  97. // 前进

  98. void nodanger() {

  99.   running = true;

  100.   digitalWrite(leftmotorpin1, LOW);

  101.   digitalWrite(leftmotorpin2, HIGH);

  102.   digitalWrite(rightmotorpin1, LOW);

  103.   digitalWrite(rightmotorpin2, HIGH);

  104.   return;

  105. }



  106. //后退

  107. void backup() {

  108.   running = true;

  109.   digitalWrite(leftmotorpin1, HIGH);

  110.   digitalWrite(leftmotorpin2, LOW);

  111.   digitalWrite(rightmotorpin1, HIGH);

  112.   digitalWrite(rightmotorpin2, LOW);

  113.   delay(1000);

  114. }



  115. //选择路线

  116. void whichway() {

  117.   running = true;

  118.   totalhalt();    // first stop!



  119.   headservo.write(10);

  120.   delay(1000);

  121.   int lDist = MeasuringDistance();   // check left distance 检查左侧的距离

  122.   totalhalt();      // 恢复探测头



  123.   headservo.write(145);  // turn the servo right

  124.   delay(1000);

  125.   int rDist = MeasuringDistance();   // check right distance

  126.   totalhalt();      // 恢复探测头



  127.   if(lDist < rDist) {

  128.     body_lturn();

  129.   }

  130.   else{

  131.     body_rturn();

  132.   }

  133.   return;

  134. }



  135. //重新机械调整到初始状态

  136. void totalhalt() {

  137.   digitalWrite(leftmotorpin1, HIGH);

  138.   digitalWrite(leftmotorpin2, HIGH);

  139.   digitalWrite(rightmotorpin1, HIGH);

  140.   digitalWrite(rightmotorpin2, HIGH);

  141.   headservo.write(70);  //  set servo to face forward

  142.   running = false;

  143.   return;

  144.   delay(1000);

  145. }



  146. //左转

  147. void body_lturn() {

  148.   running = true;
  149.   
  150.   digitalWrite(leftmotorpin1, HIGH);

  151.   digitalWrite(leftmotorpin2, LOW);

  152.   digitalWrite(rightmotorpin1, LOW);

  153.   digitalWrite(rightmotorpin2, HIGH);
  154.   


  155.   
  156.   delay(500);

  157.   totalhalt();

  158. }



  159. //右转

  160. void body_rturn() {

  161.   running = true;

  162.    digitalWrite(leftmotorpin1, LOW);

  163.   digitalWrite(leftmotorpin2, HIGH);

  164.   digitalWrite(rightmotorpin1, HIGH);

  165.   digitalWrite(rightmotorpin2, LOW);


  166.   delay(500);

  167.   totalhalt();

  168. }


  169. //随机转向
  170. void randTrun(){

  171.   long randNumber;

  172.   randomSeed(analogRead(0));

  173.   randNumber = random(0, 10);

  174.   if(randNumber > 5) {

  175.     body_rturn();

  176.   }

  177.   else

  178.   {

  179.     body_lturn();

  180.   }
  181. }
复制代码




原文地址:http://www.junfcom.cn/post/141.html
回复

使用道具 举报

发表于 2016-7-1 09:08:27 | 显示全部楼层
这个底盘是3D打印的么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-1 15:26:18 | 显示全部楼层
wing 发表于 2016-7-1 09:08
这个底盘是3D打印的么?

底盘不是,不过可以打印
回复 支持 反对

使用道具 举报

发表于 2016-7-2 15:41:40 | 显示全部楼层
打印的成本如何?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-3 16:56:51 | 显示全部楼层
darkorigin 发表于 2016-7-2 15:41
打印的成本如何?

打印非标准件还是很好的。标准件还是淘宝上买
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 16:06 , Processed in 0.039681 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表