十个中文例程教会你轻松上手制作Arduino智能小车

合集下载

基于arduino平台的蓝牙遥控小车详细讲解(附带源码程序)

基于arduino平台的蓝牙遥控小车详细讲解(附带源码程序)

基于arduino平台的蓝牙遥控小车详细讲解(附带源码程序)1、材料1. 直流电机2. L298N直流驱动3. Arduino uno4. 蓝牙模块5. 框架(这个自定义不做介绍)2、实物展示1.L298N直流驱动2.蓝牙模块3.arduino uno3、具体内容本实验采用实验的串口来进行演示,读者也可以自定义在arduino主板上已经标注好了串口信息,可以跟着连接蓝牙模块:四个引脚1. TX接主板RX2. RX接主板TX3. VCC接c1-VCC4. GND接C2-GNDL298N直流驱动1. 负极和正极分别接电机的正负极2. 项目通常使用12v供电,电源正极接12v,负极接GND3. IN1、IN2、IN3、IN4接主板上的相同串口4. EN1和EN2接相应串口,EN使能端上有跳冒,要保持两个引脚串联的情况下接引脚(这是关键,好多人就是在这卡住了,导致不能转动)软件端:蓝牙串口(百度使用教程很简单的)用手机搜索蓝牙模块与其配对完成后方,设置参数可使用本次实验里的前进是字符‘G’后退是字符‘B’左移是字符‘L’右移是字符‘R’停止是字符‘S’在设置蓝牙界面的时候按照以上字符设置。

代码:int IN1=9;int IN2=10;int IN3=11;int IN4=12;int EN1=6;int EN2=7;int A=80;int B=80;const String GO = "G";const String BACK = "B";const String RIGHT = "R";const String LEFT = "L"; const String STOP = "S"; /*********前进方法******/ void forward(){digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); analogWrite(EN1,A); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(EN2,B);}void backup(){digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); analogWrite(EN1,A);digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(EN2,B);}void left(){digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); analogWrite(EN1,A); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(EN2,B);}void right(){digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);analogWrite(EN1,A); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(EN2,B);}void Stop(){digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); analogWrite(EN1,30); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); analogWrite(EN2,30);}String readTtl(){String comdata = "";while (Serial.available()){comdata += char(Serial.read()); delay(2);}return comdata;}void setup(){Serial.begin(9600);pinMode(IN1,OUTPUT);pinMode(IN2,OUTPUT);pinMode(IN3,OUTPUT);pinMode(IN4,OUTPUT);pinMode(EN1,OUTPUT);pinMode(EN2,OUTPUT); digitalWrite(IN1,HIGH);digitalWrite(IN2,HIGH); digitalWrite(IN3,HIGH); digitalWrite(IN4,HIGH); }void loop(){String s = readTtl();if (s == GO ) forward(); if (s == LEFT ) left(); if (s == STOP ) Stop(); if (s == RIGHT ) right(); if (s == BACK ) backup(); }。

基于ArduinoUNO和L298N的避障小车DIY制作

基于ArduinoUNO和L298N的避障小车DIY制作

基于ArduinoUNO和L298N的避障小车DIY制作一、壁障小车的制作1、制作避障小车的准备工作硬件:Arduino UNO、L298N驱动模块、超声波模块、小车底盘、舵机模块、一块面包板、一些杜邦线。

软件: Arduino UNO的程序下载软件下面来一张安装好的的图2、舵机模块的解析认识本次用的是简单实用的9克小舵机。

它的扭力不是很大,但是对于咱们想用作扫描超声测距探头来说足够了。

一般舵机的旋转角度范围都是0-180度旋转的,也有一种数字电机可以在电机和舵机这两种状态下切换,既可以控制精确的旋转角度也可以连续旋转作为电机使用。

舵机转动的角度是由控制器的脉冲宽度决定的,假如舵机处在中间位置(90度),这时的脉冲宽度设定为1.5ms那么我们想让舵机转动到0度的时候可以给他1ms的脉冲,如果想让它转动到180度的时候可以给2ms的脉冲,这就是舵机角度控制的基本原理了。

3、超声波模块的解析认识本次用的超声波模块如图所示模块工作原理:1、采用IO触发测距,给至少10us的高电平信号;2、模块自动发送8个40KHz的方波,自动检测是否有信号返回;3、有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340m/s))/2;4、L298N模块的解析认识本次用的L298N模块如图所示1.驱动芯片:L298N双H桥直流电机驱动芯片2.驱动部分端子供电范围Vs:+5V~+35V ;如需要板内取电,则供电范围Vs:+7V~+35V3.驱动部分峰值电流Io:2A4.逻辑部分工作电流范围:0~36mA6.控制信号输入电压范围(IN1 IN2 IN3 IN4):低电平:-0.3V≤Vin≤1.5V高电平:2.3V≤Vin≤Vss7.使能信号输入电压范围(ENA ENB):低电平:-0.3≤Vin≤1.5V(控制信号无效)高电平:2.3V≤Vin≤Vss(控制信号有效)8.最大功耗:20W(温度T=75℃时)9.存储温度:-25℃~+130℃10.驱动板尺寸:58mm*40mm12.其他扩展:控制方向指示灯、逻辑部分板内取电接口。

机器人智能小车制作与编程

机器人智能小车制作与编程

机器人智能小车制作与编程
一、智能小车的制作
1、准备材料:电机、智能小车及其相关的板、轮子、电池、杜邦线、螺丝刀、钳子、电钻、活动榫头、把手以及其他相关材料。

2、连接电机与电池:将电机与电池连接起来,用杜邦线将正极引脚
连接到电机的正极,负极引脚连接到电机的负极,确保电池与电机之间的
稳定连接和电路的正确性。

3、安装电机:将电机安装在智能小车的底盘上,使用螺丝刀将电机
固定在底盘上,确保电机的稳定性和牢固性。

4、连接轮子:将轮子连接到电机上,将活动榫头连接到轮子上,再
将把手连接到活动榫头上,以保证轮子与电机之间的稳定连接。

5、安装智能小车板:将智能小车板安装在轮子上,使用螺丝刀将其
固定在轮子上,以保证智能小车板的稳定性和牢固性。

二、智能小车的编程
2、配置参数:将智能小车的电机、电池、摄像头等硬件连接到计算
机上,打开Arduino IDE软件,根据硬件的设置进行参数配置,确保硬件
参数的正确性。

3、编写代码:根据智能小车的功能,利用Arduino IDE进行软件编写,编写完成后,将代码上传到智能小车板上。

智能小车制作详细教程

智能小车制作详细教程

智能小车制作详细教程智能小车是一种具有自主导航和智能决策能力的机器人车辆。

它可以通过传感器感知周围环境,并根据程序进行自主控制,实现不同场景下的导航、避障和定位等功能。

下面将为你介绍如何制作一辆智能小车的详细教程。

首先,我们需要准备以下材料和设备:1. 一个底盘,它可以是一个具有轮子的坚固平台,也可以是一个注重设计的小车模型。

2. 两个直流电机,用于驱动车辆的轮子。

3. 一个电源,例如锂电池,用于给电机和电子设备供电。

4. 一个主控制器,如Arduino板或Raspberry Pi,用于处理传感器数据和执行控制程序。

5. 一套传感器,例如超声波传感器、红外线传感器和摄像头,用于感知周围环境。

6. 一些导线、电路板和螺丝等连接和固定材料。

7. 一个电脑,用于程序开发和调试。

接下来,我们可以开始制作智能小车:1. 首先,将直流电机连接到主控制器上,确保它们可以通过电源进行驱动。

2. 通过编程,编写一个基本的控制程序,使电机可以运行并控制车辆的前进、后退、左转和右转等行为。

3. 安装传感器模块,例如超声波传感器或红外线传感器,用于检测障碍物和测量距离。

4. 根据传感器的数据,更新控制程序,使车辆能够在遇到障碍物时自动停下或转向避开障碍物。

5. 如果需要进行定位和导航,可以添加一个GPS模块或采用视觉识别技术,例如使用摄像头检测道路标志或地标。

6. 调试程序并优化车辆的导航和控制性能。

7. 最后,将所有组件和电子设备固定在底盘上,确保它们牢固可靠。

通过以上步骤,我们可以制作出一辆基本的智能小车。

当然,实际制作中可能会遇到一些困难和挑战,需要更深入的知识和技能来解决。

不过,这个简单的教程可以为初学者提供一个入门指南,让他们了解智能小车制作的基本流程和方法。

希望这个教程对你有所帮助!。

简单易懂的Arduino制作巡线AGV小车

简单易懂的Arduino制作巡线AGV小车

用红外传感器或者磁条感应器,制作巡线小车使用材料:1.带PWM控制器的,伺服或者马达两个2.arduino 2560作为主控板3.电池或者电瓶作为动力电源4.颜色传感接收器接线原理图如下:arduino 2560完整主控程序如下:int MotorLeft_DR=2; //左侧马达正反转int MotorLPWM=3; //左侧马达int MotorRight_DR=4; //右侧马达正反转int MotorRPWM=5; //右侧马达const int Sensorzt=A1; //暂停感測器狀態const int Sensorzx=7; //转向感測器狀態const int Sensorxz=6; //选择线路const int Sensorbjd=13;int zt;int VAL1;int VAL2;int VAL3;int zx;int xz; //选择int bjd; //选择const int Sensor11=22; //前进感測器狀態const int Sensor12=24;const int Sensor13=26;const int Sensor14=28;const int Sensor15=30;const int Sensor16=32;const int Sensor17=34;const int Sensor18=36;const int Sensor19=38;const int Sensor1A=40;const int Sensor1B=42;const int Sensor1C=44;int S11;int S12;int S13;int S14;int S15;int S16;int S17;int S18;int S19;int S1A;int S1B;int S1C;const int Sensor21=23; //后退感測器狀態const int Sensor22=25;const int Sensor23=27;const int Sensor24=29;const int Sensor25=31;const int Sensor26=33;const int Sensor27=35;const int Sensor28=37;const int Sensor29=39;const int Sensor2A=41;const int Sensor2B=43;const int Sensor2C=45;int S21;int S22;int S23;int S24;int S25;int S26;int S27;int S28;int S29;int S2A;int S2B;int S2C;void setup(){pinMode(MotorRight_DR, OUTPUT); // 腳位2 (PWM) pinMode(MotorLeft_DR, OUTPUT); // 腳位4 (PWM) pinMode(MotorLPWM, OUTPUT); // 腳位3 (PWM) pinMode(MotorRPWM, OUTPUT); // 腳位5 (PWM) pinMode(Sensorzt,INPUT); //定義右感測器pinMode(Sensorzx,INPUT_PULLUP); //定義右感測器pinMode(Sensorxz,INPUT_PULLUP); //定義右感測器pinMode(Sensor11,INPUT_PULLUP); //定義左感測器pinMode(Sensor12,INPUT_PULLUP); //定義右感測器pinMode(Sensor13,INPUT_PULLUP); //定義左感測器pinMode(Sensor14,INPUT_PULLUP); //定義左感測器pinMode(Sensor15,INPUT_PULLUP); //定義右感測器pinMode(Sensor16,INPUT_PULLUP); //定義右感測器pinMode(Sensor17,INPUT_PULLUP); //定義左感測器pinMode(Sensor18,INPUT_PULLUP); //定義右感測器pinMode(Sensor19,INPUT_PULLUP); //定義右感測器pinMode(Sensor1A,INPUT_PULLUP); //定義左感測器pinMode(Sensor1B,INPUT_PULLUP); //定義右感測器pinMode(Sensor1C,INPUT_PULLUP); //定義右感測器pinMode(Sensor21,INPUT_PULLUP); //定義左感測器pinMode(Sensor22,INPUT_PULLUP); //定義右感測器pinMode(Sensor23,INPUT_PULLUP); //定義左感測器pinMode(Sensor24,INPUT_PULLUP); //定義右感測器pinMode(Sensor25,INPUT_PULLUP); //定義右感測器pinMode(Sensor26,INPUT_PULLUP); //定義左感測器pinMode(Sensor27,INPUT_PULLUP); //定義右感測器pinMode(Sensor28,INPUT_PULLUP); //定義右感測器pinMode(Sensor29,INPUT_PULLUP); //定義右感測器pinMode(Sensor2A,INPUT_PULLUP); //定義右感測器pinMode(Sensor2B,INPUT_PULLUP); //定義右感測器pinMode(Sensor2C,INPUT_PULLUP); //定義右感測器pinMode(Sensorbjd,OUTPUT); //定義右感測器digitalWrite(Sensorbjd,HIGH);}void xunxian1() // 快速前进寻迹{digitalWrite(MotorLeft_DR,HIGH);digitalWrite(MotorRight_DR,LOW);if(S11==LOW&&S12==LOW&&S13==LOW&&S14==LOW&&S15==LOW&&S16==LOW&& S17==LOW&&S18==LOW&&S19==LOW&&S1A==LOW&&S1B==LOW&&S1C==LOW)// 左黑右白, 快速左轉{digitalWrite(Sensorbjd,LOW);analogWrite(MotorLPWM,0);analogWrite(MotorRPWM,0);}else if (S11==HIGH&&S12==HIGH&&S13==HIGH&&S14==HIGH&&S15==HIGH&&S16==HIGH &&S17==HIGH&&S18==HIGH&&S19==HIGH&&S1A==HIGH&&S1B==HIGH&&S1C==HI GH&&xz==HIGH){analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,80);delay(2000);}else if (S11==HIGH&&S12==HIGH&&S13==HIGH&&S14==HIGH&&S15==HIGH&&S16==HIGH &&S17==HIGH&&S18==HIGH&&S19==HIGH&&S1A==HIGH&&S1B==HIGH&&S1C==HI GH){analogWrite(MotorLPWM,100);analogWrite(MotorRPWM,100);delay(100);analogWrite(MotorLPWM,90);analogWrite(MotorRPWM,90);delay(100);analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,80);delay(100);analogWrite(MotorLPWM,70);analogWrite(MotorRPWM,70);delay(100);analogWrite(MotorLPWM,60);analogWrite(MotorRPWM,60);delay(100);analogWrite(MotorLPWM,50);analogWrite(MotorRPWM,50);delay(100);analogWrite(MotorLPWM,40);analogWrite(MotorRPWM,40);delay(100);analogWrite(MotorLPWM,30);analogWrite(MotorRPWM,30);delay(100);analogWrite(MotorLPWM,20);analogWrite(MotorRPWM,20);delay(100);analogWrite(MotorLPWM,10);analogWrite(MotorRPWM,10);}else if ((S16==HIGH)&&(S17==HIGH)) // 直行{ digitalWrite(Sensorbjd,HIGH);analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,130); }else if ((S16==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,125);analogWrite(MotorRPWM,130);}else if ((S15==HIGH)&&(S16==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,115);analogWrite(MotorRPWM,130);}else if ((S15==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,130);}else if ((S14==HIGH)&&(S15==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,70);analogWrite(MotorRPWM,130);delay(40);}else if ((S14==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,60);analogWrite(MotorRPWM,130);delay(40);}else if ((S13==HIGH)&&(S14==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,50);analogWrite(MotorRPWM,130);delay(40);}else if ((S13==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,40);analogWrite(MotorRPWM,130);delay(40);}else if ((S12==HIGH)&&(S13==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,30);analogWrite(MotorRPWM,120);delay(40);}else if ((S12==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,20);analogWrite(MotorRPWM,120);delay(40);}else if ((S11==HIGH)&&(S12==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,20);analogWrite(MotorRPWM,120);delay(40);}else if ((S11==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,10);analogWrite(MotorRPWM,120);}//=========================================================== ==========================================左边结束1else if ((S17==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,125);}else if ((S17==HIGH)&&(S18==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,115);}else if ((S18==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,90);}else if ((S18==HIGH)&&(S19==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,70);delay(40);}else if ((S19==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,60);delay(40);}else if ((S19==HIGH)&&(S1A==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,50);delay(40);}else if ((S1A==HIGH)){ analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,40);delay(40);}else if ((S1A==HIGH)&&(S1B==HIGH)){ analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,30);delay(40);}else if ((S1B==HIGH)){ analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,20);delay(40);}else if ((S1B==HIGH)&&(S1C==HIGH)){ analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,20);delay(40);}else if ((S1C==HIGH)){ analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,10);}else // 都是白色, 停止{analogWrite(MotorRPWM,80);analogWrite(MotorLPWM,80);}}void xunxian2() // 快速后退寻迹{digitalWrite(MotorLeft_DR,LOW);digitalWrite(MotorRight_DR,HIGH);if(S21==LOW&&S22==LOW&&S23==LOW&&S24==LOW&&S25==LOW&&S26==LOW&& S27==LOW&&S28==LOW&&S29==LOW&&S2A==LOW&&S2B==LOW&&S2C==LOW)// 左黑右白, 快速左轉{digitalWrite(Sensorbjd,LOW);analogWrite(MotorLPWM,0);analogWrite(MotorRPWM,0);}else if (S21==HIGH&&S22==HIGH&&S23==HIGH&&S24==HIGH&&S25==HIGH&&S26==HIGH &&S27==HIGH&&S28==HIGH&&S29==HIGH&&S2A==HIGH&&S2B==HIGH&&S2C==HI GH&&xz==HIGH) //{analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,80);delay(2000);}else if (S21==HIGH&&S22==HIGH&&S23==HIGH&&S24==HIGH&&S25==HIGH&&S26==HIGH &&S27==HIGH&&S28==HIGH&&S29==HIGH&&S2A==HIGH&&S2B==HIGH&&S2C==HI GH) //{analogWrite(MotorLPWM,100);analogWrite(MotorRPWM,100);delay(100);analogWrite(MotorLPWM,90);analogWrite(MotorRPWM,90);delay(100);analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,80);delay(100);analogWrite(MotorLPWM,70);analogWrite(MotorRPWM,70);delay(100);analogWrite(MotorLPWM,60);analogWrite(MotorRPWM,60);delay(100);analogWrite(MotorLPWM,50);analogWrite(MotorRPWM,50);delay(100);analogWrite(MotorLPWM,40);analogWrite(MotorRPWM,40);delay(100);analogWrite(MotorLPWM,30);analogWrite(MotorRPWM,30);delay(100);analogWrite(MotorLPWM,20);analogWrite(MotorRPWM,20);delay(100);analogWrite(MotorLPWM,10);analogWrite(MotorRPWM,10);}else if((S26==HIGH)&&(S27==HIGH)) // 直行{digitalWrite(Sensorbjd,HIGH);analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,130); }else if ((S26==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,125);}else if ((S25==HIGH)&&(S26==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,115);}else if ((S25==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,90);}else if ((S24==HIGH)&&(S25==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,80);}else if ((S24==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,70);}else if ((S23==HIGH)&&(S24==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,60);}else if ((S23==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,130);analogWrite(MotorRPWM,50);}else if ((S22==HIGH)&&(S23==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,40);}else if ((S22==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,30);}else if ((S21==HIGH)&&(S22==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,20);}else if ((S21==HIGH)) // 左黑右白, 快速左轉{analogWrite(MotorLPWM,120);analogWrite(MotorRPWM,10);}//=========================================================== ==========================================左边结束1else if ((S27==HIGH)){ analogWrite(MotorLPWM,125);analogWrite(MotorRPWM,130);}else if ((S27==HIGH)&&(S28==HIGH)){ analogWrite(MotorLPWM,115);analogWrite(MotorRPWM,130);}else if ((S28==HIGH)){ analogWrite(MotorLPWM,90);analogWrite(MotorRPWM,130);}else if ((S28==HIGH)&&(S29==HIGH)){ analogWrite(MotorLPWM,80);analogWrite(MotorRPWM,130);}else if ((S29==HIGH)){ analogWrite(MotorLPWM,70);analogWrite(MotorRPWM,130);}else if ((S29==HIGH)&&(S2A==HIGH)){ analogWrite(MotorLPWM,60);analogWrite(MotorRPWM,130);}else if ((S2A==HIGH)){ analogWrite(MotorLPWM,50);analogWrite(MotorRPWM,130);}else if ((S2A==HIGH)&&(S2B==HIGH)){ analogWrite(MotorLPWM,40);analogWrite(MotorRPWM,120);}else if ((S2B==HIGH)){ analogWrite(MotorLPWM,30);analogWrite(MotorRPWM,120);}else if ((S2B==HIGH)&&(S2C==HIGH)){ analogWrite(MotorLPWM,20);analogWrite(MotorRPWM,120);}else if ((S2C==HIGH)){ analogWrite(MotorLPWM,10);analogWrite(MotorRPWM,120);}else // 都是白色, 停止{analogWrite(MotorRPWM,80);analogWrite(MotorLPWM,80);}}void loop(){VAL1 = analogRead(Sensorzt);VAL2 = analogRead(Sensorzt);VAL3 = analogRead(Sensorzt);if (((VAL1 + VAL2 + VAL3) / 3) > 500){zt=LOW;}else{zt=HIGH;}zx = digitalRead(Sensorzx);xz = digitalRead(Sensorxz);S11 = digitalRead(Sensor11);S12 = digitalRead(Sensor12);S13 = digitalRead(Sensor13);S14 = digitalRead(Sensor14);S15 = digitalRead(Sensor15);S16 = digitalRead(Sensor16);S17 = digitalRead(Sensor17);S18 = digitalRead(Sensor18);S19 = digitalRead(Sensor19);S1A = digitalRead(Sensor1A);S1B = digitalRead(Sensor1B);S1C = digitalRead(Sensor1C);S21 = digitalRead(Sensor21);S22 = digitalRead(Sensor22);S23 = digitalRead(Sensor23);S24 = digitalRead(Sensor24);S25 = digitalRead(Sensor25);S26 = digitalRead(Sensor26);S27 = digitalRead(Sensor27);S28 = digitalRead(Sensor28);S29 = digitalRead(Sensor29);S2A = digitalRead(Sensor2A);S2B = digitalRead(Sensor2B);S2C = digitalRead(Sensor2C);if ((zt==LOW)) //{digitalWrite(Sensorbjd,LOW);analogWrite(MotorLPWM,0);analogWrite(MotorRPWM,0);}else{if ((zx==HIGH)) // 左黑右白, 快速左轉{xunxian1();}else{xunxian2(); }}}实现简单的巡线AGV制作。

arduino小车详细制作教程

arduino小车详细制作教程

arduino小车详细制作教程
第一次做,很粗糙,都是模块的组合,变速箱用的是模型小车的,最大的难点在于变速箱和马达齿轮的配合因为完全是不配套的两样东西,视频中小车也有走外的迹象,配合是主要问题,两块亚克力板的孔没有打好,在安装上还是有瑕疵
智能小车接线
第一刀开启arduino智能小车DIY的第一步
重要的电机驱动扩展板到了
最初的设想想加个散热扇
这边用到了接口扩展板
舵机到货,有点小贵,金属齿的
搭建中,,,
程序DEBUG中
完成图
变速箱和马达
为了使用大扭力电机,改变了原有变速箱的安装方式
代码部分。

基于Arduino设计的智能小车

基于Arduino设计的智能小车

一、准备工作安装过程中可能用到以下工具,请提前准备好。

二、组装小车底盘按发货箱内的小车底盘组装说明组装小车底盘,说明截图如下:三、安装船型开关及电池盒如图,船型开关从底部按进,两侧引出马达接线,电池盒如图安装,电池盒红线(正极)接船型开关,以备后用,船型开关另外一端引出线。

图中3个铜柱为固定Arduino开发板用,高度为1cm。

四、安装Arduino uno R3 开发板如图所示固定开发板,底部两个螺丝拧紧,上部一个铜柱仅起到支持作用。

五、制作上层支持平台用纸箱板或其他易裁剪、易开孔的薄板制作上层平台,大小可根据实际需要裁剪。

纸箱板可直接用螺栓刀钻孔,穿线和固定螺丝都很方便。

图中铜柱高约5cm,用来和小车底板连接,具体开孔位置与底板孔位对应。

六、穿接引线(结合第七步)开孔穿跳线,为方便后期将开发板的针脚引出,也增加上下层之间的稳定性。

可不全部引出,只引出需要使用的针脚。

引出针脚时,注意次序和颜色搭配,以方便后期查对,此步较为繁琐请耐心制作。

穿线完成后铜柱与底板间进行紧固。

七、面包板和L298N固定(结合第六步)面包板背面有双面胶,撕开后可粘贴在纸箱板上。

粘贴位置应结合穿线、上下层间铜柱位置确定,使不互相影响。

L298N为小车底盘马达驱动,在纸箱板上用螺栓刀开孔后,用螺栓将其固定在面包板下方。

八、固定超声波模块超声波模块固定在小车前端,铜柱高约3.5cm,如图。

九、电池安装4节5号电池,1节9V(6F22)电池大小商店均有售。

4节5号电池接L298N模块,9V电池节Arduino开发板。

各模块接线,见模块说明。

十、安装完成Arduino智能小车接线说明主要模块Arduino uno R3 开发板9g舵机超声波测距模块L298N电机驱动模块红外接收头马达×2电源×2(6V,9V)实物图Arduino智能小车接线说明模块拆分说明1、L298N电机驱动模块接线如下图2、超声波模块3、红外接收头4、9G舵机5、电源在完成硬件组装和接线后即可进行代码烧制,调试工作,参考后续智能小车相关代码。

Arduino智能避障小车避障程序

Arduino智能避障小车避障程序

Arduino智能避障小车避障程序首先建立一个名为modulecar.ino的主程序。

// modulecar.ino,玩转智能小车主程序#include <Servo.h> //导入舵机库#include <NewPing.h> //导入NwePing库// 对照系统配线方案依次指定各I/Oconst int ENA = 3 ; //左电机PWMconst int IN1 = 4 ; //左电机正const int IN2 = 5 ; //左电机负const int ENB = 6 ; //右电机PWMconst int IN3 = 7 ; //右电机正const int IN4 = 8 ; //右电机负const int trigger = 9 ; //定义超声波传感器发射脚为D9 const int echo = 10 ; //定义传感器接收脚为D10 const int max_read = 300; //设定传感器最大探测距离。

int no_good = 35; //*设定35cm警戒距离。

int read_ahead; //实际距离读数。

Servo sensorStation; //设定传感器平台。

NewPing sensor(trigger, echo, max_read); //设定传感器引脚和最大读数//系统初始化void setup(){Serial.begin(9600); //启用串行监视器可以给调试带来极大便利sensorStation.attach(11); //把D11分配给舵机pinMode(ENA, OUTPUT); //依次设定各I/O属性pinMode(IN1, OUTPUT);pinMode(IN2, OUTPUT);pinMode(ENB, OUTPUT);pinMode(IN3, OUTPUT);pinMode(IN4, OUTPUT);pinMode(trigger, OUTPUT);pinMode(echo, INPUT);sensorStation.write(90); //舵机复位至90?delay(6000); //上电等待6s后进入主循环}//主程序void loop(){read_ahead = readDistance(); //调用readDistance()函数读出前方距离Serial.println("AHEAD:");Serial.println(read_ahead); //串行监视器显示机器人前方距离if (read_ahead < no_good) //如果前方距离小于警戒值{fastStop(); //就令机器人紧急刹车waTch(); //然后左右查看,分析得出最佳路线goForward(); //*此处调用看似多余,但可以确保机器人高速运转下动作的连贯性}else goForward(); //否则就一直向前行驶}主程序用到了两个库,Servo库是IDE自带的,NwePing库是第三方库,需要下载安装。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

十个中文例程教会你轻松上手制作Arduino智能小车
Arduino简介
Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的arduino 板)和软件(arduino IDE)。

适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。

Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。

板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器对Arduino的编程是利用Arduino编程语言(基于Wiring)和Arduino开发环境(based on Processing)来实现的。

基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信(比如Flash, Processing, MaxMSP)来实现。

你可以自己自己动手制作,也可以购买成品套装;Arduino所使用到的软件都可以免费下载。

硬件参考设计(CAD 文件)也是遵循availableopen-source协议, 你可以非常自由地根据你自己的要求去修改他们。

本文精选了Arduino教程、例程、设计案例,集结了国内外官方资料和资深工程师的经验,是学习AArduino的必备宝典。

小车、机器人篇
1、Arduino互动玩偶BOXZ
此设计制作在2013年Atmel AVR英雄视频大赛中荣获奖励,并且参与了2014的深圳制汇节。

BOXZ,昵称盒仔,其创意始于2012年6月初。

当时的想法是设计一款基于Arduino 的入门级机器人,可以和三五好友在有限的空间里进行踢足球等互动,而且要做到取材容易制作简单,在设计的上采用了模块化的接插结构,同时还要注重外观拥有个性。

2、基于Arduino的自平衡遥控小车
车模平衡控制也是通过负反馈来实现的。

因为车模有两个轮子着地,车体只会在轮子滚动的方向上发生倾斜。

控制轮子转动,抵消在一个维度上倾斜的趋势便可以保持车体平衡了。

3
当自家的遥控蓝牙小车坏掉的时候不是只能扔掉,作为创客不但要学会制造东西,更要学会修理东西,来看看这位创客是如何修理他的小车的吧!小车采用大电流MOSFET做的电机驱动驱动电机,用Atmega328单片机作为主控,读取航模遥控器(天六A 2.4G)的PWM 信号,然后电机驱动板,转向舵机直接接到航模遥控器的横滚通道控制转向,用天六的第5通道(开关通道)选择前进还是后退
4、基于Arduino的盒子遥控机器人
BOXZ,昵称盒仔。

是一款开源的互动娱乐平台!我们将Arduino,亚克力板和纸模型创意的结合在一起,让大家可以快速搭建自己的遥控玩偶,开展互动体验,而它的组装就像搭乐高积木一样简单!而盒仔的外形和功能完全取决于您的创意。

我们可以用它来搞足球比赛,角色扮演,赛车或对战,甚至拍MV!
5、Arduino小帮手搬运机
Cameron Russell(中山大谷工程师)原创作品,运用了Atmega8 芯片和ATmega2560芯片,从搬运机器人的结构设计到程序,可以成功实现控制机器人做出搬运和倒水等动作.
6、Arduino仿生机器人
本机器人采用了ATmega1280 芯片和语音模块而成,机械结构都是自己全程设计,里面有需要控制8个舵机,会自动应答和相对表情动作。

7、Arduino自平衡机器人
本设计采用arduino uno控制器,角加速度用BMA 180,角速度用ITG 3205的传感器,位移用电机12线正交编码器;采用角度测量用卡尔曼滤波融合的算法,控制用全状态反馈。

动力:两个直流减速电机,电压12v 功率17w 速比64 速度120rpm。

MC33886驱动。

4s 锂电池组。

无线通讯:3个XBEE无线模块分别在小车、Wii手柄遥控模块、PC检测模块上。

8、arduino摇控平衡车
增加mano328 + 24l01,2.4G摇控功能,原卡耳漫滤波PD融合控制,改成了互补滤波融合,PID控制,效果也很好,没有限速,会越跑越快,手动摇控修正
9、Arduino模块DIY智能壁障车
你有倒腾台小车玩玩的想法吗?不是小孩子玩的玩具车,也不是机动车,只是为实施DIY
过程,来做台智能车。

如果感觉用飞思卡尔的硬件来完成智能车,对你来说有难度,那么基于Arduino的智能小车将会是你的首选。

因为Arduino很合适进行DIY,积木式构架、模块化设计,硬件太适合了。

Arduino 的编程代码、编写方式也较简单,有点C基础就能很快上手,合适初学者使用,容易上手。

10、基于arduino uno 红外遥控小车
此作品中所选用的材料都是家中闲置的器件,小车的核心控制器为一块arduino uno. 遥控器是一个废弃的DVD遥控器,电源是一个手机充电宝,实现了小车前进、后退、左转、右转和停止的红外远程操控。

完全DIY,Arduino智能小车
基于Arduino的wifi智能小车
学习笔记
Arduino资料、教程
感谢Atmel技术社区资深网友的分享推荐,也欢迎大家到Atmel技术社区交流讨论Atmel相关技术问题!。

相关文档
最新文档