arduino_arduino uno - CSDN
arduino 订阅
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。 [1] 展开全文
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。 [1]
信息
编程语言
基于Java的编译器
开发环境
Arduino IDE
分    类
计算机技术->微型计算机
主控芯片
AVR单片机、ARM芯片
创始人
Massimo Banzi
外文名
Arduino
Arduino发展历程
Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。随后Banzi、Cuartielles和Mellis把设计图放到了网上。版权法可以监管开源软件,却很难用在硬件上,为了保持设计的开放源码理念,他们决定采用Creative Commons(CC)的授权方式公开硬件设计图。在这样的授权下.任何人都可以生产电路板的复制品,甚至还能重新设计和销售原设计的复制品。人们不需要支付任何费用,甚至不用取得Arduino团队的许可。然而,如果重新发布了引用设计,就必须声明原始Arduino团队的贡献。如果修改了电路板,则最新设计必须使用相同或类似的Creative Commons(CC)的授权方式,以保证新版本的Arduino电路板也会一样是自由和开放的。唯一被保留的只有Arduino这个名字,它被注册成了商标,在没有官方授权的情况下不能使用它。Arduino发展至今,已经有了多种型号及众多衍生控制器推出。 [2] 
收起全文
精华内容
参与话题
  • 从硬件方面着手带您学会ARDUINO的硬件原理和编程。 只有懂了硬件原理才能更清楚代码的含义。 零基础入门,快速学会ARDUINO,上手做自己的小设计。 从小白到大神之间就缺这部视频o(* ̄︶ ̄*)o
  • Arduino基础入门篇01—进入Arduino的世界

    万次阅读 多人点赞 2019-11-04 13:57:17
    欢迎来到Arduino的世界,本文主要介绍Arduino的优势,开发所涉及的硬件分类,开发语言及开发环境的下载。可登陆Arduino官网学习了解更多Arduino信息。

    欢迎来到Arduino的世界,本文主要介绍Arduino的优势,开发所涉及的硬件分类,开发语言及开发环境的下载。可登陆Arduino官网学习了解更多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的优势

    目前市场上还有许多其他的单片机和单片机平台,例如51单片机、STM32单片机等。但他们对于普通开发者来说门槛相对较高,需要有一定编程和硬件相关基础,内部寄存器较为繁杂,主流开发环境Keil配置相对麻烦,特别是对于STM32的开发,即使使用官方库也少不了环境配置,还有就是开发环境是收费的。

    Arduino不但简化了使用单片机工作的流程,同时还为教师、学生以及兴趣爱好者提供了一些其他系统不具备的优势:

    • 便宜。相比于其他单片机平台而言,Arduino生态的各种开发板性价比相对较高。
    • 跨平台。Arduino软件(IDE)能在Windows、Mac OS X和Linux操作系统中运行,而大多数其他单片机系统仅限于在Windows操作系统中运行。
    • 开发环境简单。Arduino的编程环境易于初学者使用,同时对高级用户来讲也足够灵活,其安装和操作都非常简单。
    • 开源可扩展。Arduino软件硬件都是开源的,开发者可以对软件库进行扩展,也可以下载到千千万万的软件库来实现自己的功能。Arduino允许开发者对硬件电路进行修改和扩展来满足不同的需求。

    Arduino开发板类型

    Arduino生态包括多种开发板、模块、扩展板、工具和配件。官方将其大致分为五类:入门级、网络版、物联网版、教育版、可穿戴版。具体可从官网查看Arduino开发板类型。

    Arduino开发板类型

    其中入门级开发板易于使用。建议初学者使用入门级如Arduino UNO R3。

    在这里插入图片描述

    Arduino开发语言

    Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。早期的Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新的Arduino核心库采用C与C++混合编写而成。

    通常我们说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。

    传统开发方式中,需要通过配置多个寄存器来实现相应功能,而在Arduino中,繁杂的寄存器被封装成简单的API,能进行直观控制,增强程序的可读性的同时也提高了开发效率。

    Arduino开发环境

    Arduino开发环境IDE可从官网进行下载,支持Windows、Mac OS X、Linux不同平台,对应PC平台进行下载。IDE下载地址
    当前最新版本为1.8.5。我的电脑为Windows系统,Windows版本有三种下载方式,选择一种下载即可。

    IDE下载

    关于IDE软件的介绍将在下一节中详细介绍。

    更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
    扫码加入微信公众号:TonyCode

    展开全文
  • Arduino智能小车——循迹篇

    万次阅读 多人点赞 2020-05-19 10:54:44
    Arduino智能小车——循迹篇   相信大家都在网上看到过类似下图这样的餐厅服务机器人,或者仓库搬运机器人,但是你们有没有注意到图片中地上的那条黑线?没错,他们都是沿着这条黑线来行进的,在这一篇将教大家...

    Arduino智能小车——循迹篇

      相信大家都在网上看到过类似下图这样的餐厅服务机器人,或者仓库搬运机器人,但是你们有没有注意到图片中地上的那条黑线?没错,他们都是沿着这条黑线来行进的,在这一篇将教大家怎么用小车实现类似的循迹功能。

    SouthEast

    准备材料

    黑色电工胶布

      黑色胶布用于搭建小车运行的“轨道”,选用黑色宽度18mm左右的即可。

    SouthEast

    循迹模块

      在此我们使用循迹模块TCRT5000,该模块体积小,灵敏度较高,还可以通过转动上面的电位器来调节检测范围。

    SouthEast

    模块特色

    1、采用TCRT5000红外反射传感器
    2、检测距离:1mm~8mm适用,焦点距离为2.5mm
    3、比较器输出,信号干净,波形好,驱动能力强,超过15mA。
    4、配多圈可调精密电位器调节灵敏度
    5、工作电压3.3V-5V
    6、输出形式 :数字开关量输出(0和1)
    7、设有固定螺栓孔,方便安装
    8、小板PCB尺寸:3.2cm x 1.4cm
    9、使用宽电压LM393比较器

    工作原理

      TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。

      由于黑色具有较强的吸收能力,当循迹模块发射的红外线照射到黑线时,红外线将会被黑线吸收,导致循迹模块上光敏三极管处于关闭状态,此时模块上一个LED熄灭。在没有检测到黑线时,模块上两个LED常量。
    ##循迹模块安装
      循迹模块的工作一般要求距离待检测的黑线距离1-2cm,因此我建议大家可以将循迹模块向下延伸。我自己是在硬纸板上面打了几个孔,固定循迹模块,每个模块之间可以留1cm左右的距离。传感器在接收到反射不同的距离的时候“AO”引脚电压会不同,是模拟信号,“DO”是数字信号输出。因为在这里我们只用判断是否检测到黑线,因此使用“DO”数字信号即可。按照车头为正方向,从右到左循迹模块的“DO”依次接到开发板“10”、“11”、“12”、“13”引脚。

    SouthEast
    ## 跑道的搭建   找一块干净的地面,贴上准备好的黑色电工胶布。由于小车自身结构的原因,转弯的时候尽可能增大转弯半径,在跑道尽头如图中那样拉一条黑色横线,用于小车识别终点。
    SouthEast

    测试代码

    #include <Servo.h>
    
    #define STOP      0
    #define FORWARD   1
    #define BACKWARD  2
    #define TURNLEFT  3
    #define TURNRIGHT 4
    
    int leftMotor1 = 16;
    int leftMotor2 = 17;
    int rightMotor1 = 18;
    int rightMotor2 = 19;
    
    int trac1 = 10; //从车头方向的最右边开始排序
    int trac2 = 11; 
    int trac3 = 12; 
    int trac4 = 13; 
    
    int leftPWM = 5;
    int rightPWM = 6;
    
    Servo myServo;  //舵机
    
    int inputPin=7;   // 定义超声波信号接收接口
    int outputPin=8;  // 定义超声波信号发出接口
    
    void setup() {
      // put your setup code here, to run once:
      //串口初始化
      Serial.begin(9600); 
      //舵机引脚初始化
      myServo.attach(9);
      //测速引脚初始化
      pinMode(leftMotor1, OUTPUT);
      pinMode(leftMotor2, OUTPUT);
      pinMode(rightMotor1, OUTPUT);
      pinMode(rightMotor2, OUTPUT);
      pinMode(leftPWM, OUTPUT);
      pinMode(rightPWM, OUTPUT);
      //寻迹模块D0引脚初始化
      pinMode(trac1, INPUT);
      pinMode(trac2, INPUT);
      pinMode(trac3, INPUT);
      pinMode(trac4, INPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
     
      tracing();
          
      
    }
    void motorRun(int cmd,int value)
    {
      analogWrite(leftPWM, value);  //设置PWM输出,即设置速度
      analogWrite(rightPWM, value);
      switch(cmd){
        case FORWARD:
          Serial.println("FORWARD"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         case BACKWARD:
          Serial.println("BACKWARD"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNLEFT:
          Serial.println("TURN  LEFT"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNRIGHT:
          Serial.println("TURN  RIGHT"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         default:
          Serial.println("STOP"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, LOW);
      }
    }
    void tracing()
    {
      int data[4];
      data[0] = digitalRead(10);
      data[1] = digitalRead(11);
      data[2] = digitalRead(12);
      data[3] = digitalRead(13);
    
      if(!data[0] && !data[1] && !data[2] && !data[3])  //左右都没有检测到黑线
      {
        motorRun(FORWARD, 200);
      }
    
      if(data[0] || data[1])  //右边检测到黑线
      {
        motorRun(TURNRIGHT, 150);
      }
    
      if(data[2] || data[3])  //左边检测到黑线
      {
        motorRun(TURNLEFT, 150);
      }
    
      if(data[0] && data[3])  //左右都检测到黑线是停止
      {
        motorRun(STOP, 0);
        while(1);
      }
      
      Serial.print(data[0]);
      Serial.print("---");
      Serial.print(data[1]);
      Serial.print("---");
      Serial.print(data[2]);
      Serial.print("---");
      Serial.println(data[3]);
    }
    

    代码详解

    小车装有4个TCRT5000,从最右边模块开始读入数据,放入data[]数组中

    data[0] = digitalRead(10);
    data[1] = digitalRead(11);
    data[2] = digitalRead(12);
    data[3] = digitalRead(13);
    

    4个模块可能存在的检测状态如下,其中“1”表示检测到黑线,“0”代表没有检测到黑线:

    data[0] data[1] data[2] data[3] 小车运动状态
    1 1 1 1 停止
    0 0 1 1 左转
    0 0 0 1 左转
    0 0 1 0 左转
    1 1 0 0 右转
    1 0 0 0 右转
    0 1 0 0 右转
    0 0 0 0 直行

    第一种情况,四个模块都没有检测到黑线时,直行:

    if(!data[0] && !data[1] && !data[2] && !data[3])  //左右都没有检测到黑线
    {
    	motorRun(FORWARD, 200);
    }
    

    右边任意一个模块检测到黑线时,右转:

    if(data[0] || data[1])  //右边检测到黑线
    {
      motorRun(TURNRIGHT, 150);
    }
    

    左边任意一个模块检测到黑线时,左转:

    if(data[2] || data[3])  //左边检测到黑线
    {
      motorRun(TURNLEFT, 150);
    }
    

    当四个模块都检测到黑线时,说明已经运动到轨道终点,此时停止运动:

    if(data[0] && data[3])  //左右都检测到黑线是停止
    {
      motorRun(STOP, 0);
      while(1);
    }
    

    循迹效果展示

    在起点出准备出发

    SouthEast

    弯道中

    SouthEast
    识别到终点后停止
    SouthEast

    欢迎各位有兴趣的朋友加入Q群1:789127261点评、交流

    展开全文
  • arduino入门

    万次阅读 多人点赞 2018-12-11 11:42:11
    1,arduino开发板主要用于处理输入输出信号;     2,第一个案例:利用arduino IDE编辑代码控制LED灯闪烁; void setup(){ 仅仅执行一次  PinMode(13,output); //设置引脚模式,13号为输出; } void ...

    1,arduino开发板主要用于处理输入输出信号;

     

     

    2,第一个案例:利用arduino IDE编辑代码控制LED灯闪烁;

    void setup(){         仅仅执行一次

      PinMode(13,output);  //设置引脚模式,13号为输出;

    }

    void loop(){     //循环执行,不停止

    digitalWrite(13,HIGH);   //设置数字输出,13号引脚高电平,此时灯亮;

    delay(1000);   //延迟1000ms之后执行下一步函数;

    digitalWrite(13, LOW);  //设置13号引脚为低电平,此时灯灭;

    delay(1000);   //延迟函数;

    }

     

     

    3,第二个案例:流水灯控制;

    将6个小灯插到面包板上,其中长引脚分别分配arduino的6,7,8,9,10,11接口;短引脚全部都接到面包板的蓝线上,然后在面包板的蓝线中的一个接口连接到arduino的GND接口。代码如下:

    void setup(){

     

    pinMode(6,output);

    pinMode(7,output);

    pinMode(8,output);

    pinMode(9,output);

    pinMode(10,output);

    pinMode(11,output);

    }

    void loop(){
    digitalWrite(6, LOW);

    digitalWrite(7,HIGHT);

    delay(200);

    digitalWrite(7, LOW);

    digitalWrite(8,HIGHT);

    delay(200);

    digitalWrite(8,LOW);

    digitalWrite(9,HIGHT);

    }

     

     

    4,开关元件;

      (1)开关元件有四个脚,内部电路是这样的,连接的时候要么对角线,要么等侧连接;

    (2)还有一种是震动开关:只要震动,里面的电线接触,就接通;没有正负极

    (3)第三种开关,干簧管。磁铁一旦靠近就接通。

    (4)第四种开关,滚珠开关。只要倾斜就接通,因为里面有个小滚珠。但是只有一侧滚动能接通;

    5,本来开关和灯没有关系,现在利用程序控制,当按下开关时,灯亮。其中,灯泡长脚是连接7号接口,7号接口定义为输出信号,而开关连接的引脚是连接8号接口,8号接口定义为输入信号;因为此刻开关作为外部控制设备,是向开发板输入信息,LED灯作为受控器件,是开发板向它输出信号。点击按钮的时候,电流从蓝色线流向接口,此时可以判断如果此接口是低电平则灯泡亮;

    源代码:

    void setup(){

    pinMode(7, output);

    pinMode(8,input);

    digitalWrite(8,HIGH);//设置开关初始值是高电平;

    }

    void loop(){

    if(digitalRead(8)==LOW)  //如果8是低电平,即按下开关;

    digitalWrite(7,HIGH);

    digitalWrite(7,LOW);

    }

    7,利用蜂鸣器实现手风琴;

    和上一个原理一样,因为蜂鸣器是根据频率不同设置的,所以,根据开关接口的电平不同设置相应的蜂鸣器频率。

    void setup(){

    pinMode(8,INPUT);  //设置开关

    digitalWrite(8, HIGH);

    pinMode(9,INPUT);

    digitalWrite(9, HIGH); 

    piMode(10,INPUT);

    digitalWrite(10, HIGH);

     

    pinMode(11,OUTPUT) //设置灯

    pinMode(12, OUTPUT)

    pinMode(13,OUTPUT)

    }

    void loop(){

    if(digitalRead(8)==LOW){
    tone(7,2093);  //蜂鸣器频率设置为2093,发出dou

    digitalWrite(11, HIGH);

    }else{
    notone(7);

    digitalWrite(11,LOW);

    }

    往下重复2个开关值;;;

    8,呼吸灯:所谓呼吸比较平稳,所以不能像闪烁的LED那样忽闪忽灭,所以要使用模拟输出,电流连续变化。

    代码:

    void setup(){

    pinMode(11,OUTPUT);  

    }

    void loop(){

    for(int i=0;i<30;i++){

    analogWrite(11,i);   //模拟信号输入,其中的i范围是[0,255];

    delay(10);

    }

    for(int j=29;j>0;j--){

    analogWrite(11,j);

    delay(10);

    }

    其中模拟信号电压和数字信号电压的值,对应关系:

    模拟信号是如何实现,在一个周期控制电压在一个范围内的?

    如图,on属于5v, off属于0v,在一个时间周期,即发送一次脉冲时, 上一个图ta在on的持续时间是25%,off持续的时间是75%,这样计算出来的电压值:v0=5*25%+0*75%=1.25(v);  可以简单的这样理解;

    9,呼吸流水灯:

    void  setup(){

    pinMode(3, OUTPUT);

    pinMode(5, OUTPUT);

    pinMode(6, OUTPUT);

    pinMode(9, OUTPUT);

    pinMode(10, OUTPUT);

    pinMode(11, OUTPUT);

    }

    int  ports[6]=[3,5,6,9,10,11];

    int i=0,level=0;

     

    set loop(){

     

    analogWrite(ports[i], level);

    delay(10);

    ++level %=7;

    ++i %=6;   i首先自增,然后取模6,也即是,i一直处于0~5的范围循环;

    }

    10,  台灯的原理(模拟输入):利用电位计能够取得连续值;电位计有3个腿,左边接+5v电源接口,最右边的接GND,中间的接模拟输入接口;

    void setup(){

    pinMode(9,OUTPUT);  //仅需要设置灯的接口是输入还是输出就行了,不用设置电位计的接口,因为电位计接的是模拟输入区域,已经规定那几个端口就是输入;

    Serial.begin(9600);   //Serial是表示串口,begin设置波特率;

    }

    void loop(){

    Serial.printIn(analogRead(A0));  //analogRead(A0)表示读取电位计A0输入接口的值,Serial.printIn()表示将值输出到屏幕上;这                                                                个屏幕可以是串口小助手工具,将板子连接到电脑,串口小助手设置相应的COM口,然后                                                              就可以读取值并显示;

    analogWrite(9, analogRead(A0)/4);          //将灯的输出值设置为电位计的输入值;因为模拟输入的范围是[0,1023],而模拟输出的                                                                        范围是[0,255],所以接口9的值应该设置为电位计输入值的1/4;

    delay(200);

    }

    11,电子骰子,使用一个电子数码管,电阻,滚珠开关;其中电子数码管是由8个LED灯组合的,有共阴极和共阳极,使用时需要了解阴阳,如果是共阴需要接GND;并且数码管极易烧坏,需要连接电阻;

    源代码:(使用的是共阴极一位数码管)

    class LedSegmentDisplays
    {
      private:
        int ports[8];
        int digits[10][8];
        
      public:
        LedSegmentDisplays(int a, int b, int c, int d, int e, int f, int g, int h)
        {
          ports[0] = a; ports[1] = b; ports[2] = c; ports[3] = d; ports[4] = e; ports[5] = f; ports[6] = g; ports[7] = h;
          int digits_copy[10][8] = { 
            {1, 1, 1, 1, 1, 1, 0, 0},  // 0
            {0, 1, 1, 0, 0, 0, 0, 0},  // 1
            {1, 1, 0, 1, 1, 0, 1, 0},  // 2
            {1, 1, 1, 1, 0, 0, 1, 0},  // 3
            {0, 1, 1, 0, 0, 1, 1, 0},  // 4
            {1, 0, 1, 1, 0, 1, 1, 0},  // 5
            {1, 0, 1, 1, 1, 1, 1, 0},  // 6
            {1, 1, 1, 0, 0, 0, 0, 0},  // 7
            {1, 1, 1, 1, 1, 1, 1, 0},  // 8
            {1, 1, 1, 1, 0, 1, 1, 0}   // 9
          };
          
          for(int i = 0; i < 8; i++)
            pinMode(ports[i], OUTPUT);
          
          for(int i = 0; i < 10; i++)
           for(int j = 0; j < 10; j++)
             digits[i][j] = digits_copy[i][j];
        }
        
        void noLight() 
        { 
          for(int i = 0; i < 8; i++)
            digitalWrite(ports[i], LOW);
        }
        
        void d(int digit) 
        { 
          for(int i = 0; i < 8; i++)
            digitalWrite(ports[i], digits[digit][i]);
        }
    };

    void setup() {
      randomSeed(analogRead(0));   //设置随机种子,配合random使用
      pinMode(2, INPUT);
      digitalWrite(2, HIGH);
    }

    LedSegmentDisplays Disp(3,10,7,8,9,4,5,6);   //LedSegmentDisplays 是一个模板,Disp是模板下的实例

    void loop() {
      if(digitalRead(2) == LOW)
        Disp.d(random(1,7));  // [1,6]      d是实例Disp下的一个方法,radom不包含下限;
        
      delay(20);
    }

    12,震荡的LED:需要光敏电阻,电阻,LED;

    将光敏电阻一端接到5v,另一端接电阻,电阻接GND,两者中间拉出一条线接analogIn;


    代码:

    void setup(){

    Setrial.begin(9600);

    }

    void loop(){

    Setril.printIn(analogWrite(0));  //中间那根线接0端口,即串口输出端口;

    delay(200);

    }

    电铃的原理:通电时,电磁感应产生磁力,开关(振荡器)被吸引下拉,然后断电,线圈失去磁性,开关又复原,然后又通电;周而复始。这也是晶振的原理;

    源代码:

    void setup(){

    pinMode(9,OUTPUT);

    Setrail.begin(9600);

    }

    void loop(){

    Setrail.printIn(analogRead(0));

    analogWrite(9, map(analogRead(0), 400,700,0,255);   //map(值,a1,b1,a2,b2),即,将值的原始范围[a1,b1]映射到[a2,b2];

    delay(200);

    }

    13,测量温度。器材:LM35

    LM35有三条腿,左边接正极,右边接地,中间接串口输出0端口;

    void setup(){

    Serail.begin(9600);

    }
    void loop(){
    Serail.printIn(analogRead(0)*0.48828125);  //与0.48828125相乘在串口助手界面显示的时温度值,(5/开发板的测量精度)*100

    delay(200);

    }

    14,红外热释报警。器材:红外热释传感器,蜂鸣器。红外热释传感器左边接5v,中间接数字输入7号,右边接GND;

    有探测角度和探测距离等参数;

    void setup(){

    pinMode(7, INPUT);  

    }

    void  loop(){

    if(digitalRead(7)==LOW)

    tone(13,2000);  //蜂鸣器的震动频率

    else{

    noTone(13);

    }

    }

    15,74HC595芯片。功能:扩展输入端口;

    从8号端口输出一个1,在芯片内部设置8个位,然后这8个位作为输出,是并行同时输出。所以是串转并。

     

     

     

     

     

     


     

     

     

    展开全文
  • arduino实战

    千人学习 2019-07-04 13:47:49
    学习如何在arduino中使用各种传感器,包括人体红外传感器,超声波传感器,舵机控制,温湿度传感器,激光接收传感器等,空气质量传感器,wifi模块等....课程内容会不断的更新增加,只要发现比较有趣的传感器就会做...
  • Arduino图形化编程

    万次阅读 2019-01-17 11:20:40
    Arduino是一款风靡全球的开发平台,其通过Arduino block这款插件,实现简单的图形化编程,让青少年也能借助此平台成为创客,博主之前也是机缘巧合,帮助了一位青少年借助该平台实现了自己的创客梦,也拿了一系列的...

    Arduino简介

    Arduino是一款便捷灵活、方便上手的开源电子原型平台。电子平台是什么意思呢,就是说,Arduino有对应的很多的开发板,还有很多的传感器,这些传感器都是围绕着Arduino开发板量身定做的。使用方便操作简单。

    当然了,说了是平台,单独硬件多怎么能构造起一个平台呢?事实上他还有一些免费的软件给别人去开发使用,而且这一些软件也都是围绕这Arduino量身定做的。

    Arduino IDE就是其中的一款比较热门的软件。

    首先解释一下什么是IDE呢,就是一个集成开发环境,一般包括代码编辑器、编译器调试器和图形用户界面等工具。简单地来说,就是我们把代码写到编辑器,然后借助这个IDE就可以实现把这些代码转换为机器语言,然后烧录到单片机中。

    Arduino IDE 有几个按键,一个是工具,在这里你要选择你开发板的型号,你是用哪个端口进行连接。这一部分很重要,如果错了的话,你就无法正常上传程序去控制它。

                                          

     

    Arduino IDE 的界面比较简洁,对于要使用图形化编程的同学来说,你可以不用考虑怎么去在这个IDE里面用代码去实现你要实现的功能。因为你完全可以直接使用图形化编程这去进行编程。

    安装Arduino驱动

    如果你拿到了Arduino 开发板,你就需要先安装驱动,那么你的电脑才能识别到这是Arduino开发板,Arduino驱动程序就在Arduino IDE 下drivers文件夹下,在你安装的Arduino IDE下打开它文件所在位置,就可以看到 drivers文件夹。

                                           

    在“我的电脑”右键,设备管理器,选择端口这个选项,或者在搜索这里选择设备管理器,找到端口这个选项。

                                                        

    打开设备管理器,如果你没有插入单片机,就会看到这样的界面

                                    

    插上单片机后就会发现多了一行叫做端口的,然后因为你没安装驱动,所以在端口这一栏就只能看到是USB设备,无法识别他是单片机。

                                                        

    你可以选择这个COM3这个选项,右键点击它,选择更新驱动程序。

                                      

    然后就会弹出下面这个图,选择第二个框,我们手动添加,这样速度快一点,准确一点。

                                        

    前面我们已经说了这个驱动程序就在我们安装的那个Arduino 所在文件夹的 drivers 文件那里,所以我们现在要做的就是让电脑去那里寻找驱动程序。

                                     

    需要注意的是,这一个路径必须是你的drivers文件夹所在的位置,比如:我的drivers 文件就在这里,那么我的路径就是D:\scratch\arduino-1.0.6\arduino-1.0.6\drivers,所以我的那个图8的搜索位置就得改成下面的路径。

                               

    在完成了这个位置的选择后基本上驱动就完成了。然后你再一次打开设备管理器,再一次去看看那个端口,你会发现有所变化。之前的USB设备已经改成了单片机的型号,因为我们用的信号是 Arduino mega 2560这个型号的单片机,所以就会看到USB设备变换成它。

                                         

    ArduinoBlock

    接下来就是讲我们的主角了,Adrublock这个图形化编程插件,这个插件是依赖着Adruino IDE的。什么意思呢,就是Adrublock是Adruino IDE的一个工具,有了这个工具就可以直接图形化编程,跟scratch一样。所以你需要先下载安装Adruino IDE这个软件。然后再安装Adrublock。这个过程看似很复杂,实际上是很简单一个操作,可以自行百度,这个还是有很多资料的。安装起来不难。安装完了之后就在工具这一栏看到Ardublock 这个选项,点进去就可以进入到图形化编程的界面。

    Ardublock 因为升级换代缓慢,或者是没有人去对他升级换代,所以它不能在一些比较新的Adruino IDE使用,就是在一些版本比较新的Adruino IDE里面,你编写好图形化程序后,下载到Arduino 会失败。所以我们只能用之前比较老一点的版本。你可以看到图11,那个Arduino 1.8.4 后面的1.8.4就是它的版本,这个是一个比较新的版本了,可以看到文件,编辑,项目,工具,帮助都是中文的,我们使用 比较老的版本这些选择按钮就都是英文的了,不过你用去抗拒它,大多数的软件都是英文的,这个可以帮助你去适应其他软件,同时它的英文也才那么几个,不懂就手机词典翻译一下,不难的。

    Adrublock 有几类控制命令在它的左侧,通过拉拽这些命令就可以达到一个图形化编程的效果。但是这个图形化编程的其他图形控件都在”主程序DO” 这个控件里面执行。

                                                        

                                   

    Adrublock 有几类控制命令在它的左侧,通过拉拽这些命令就可以达到一个图形化编程的效果。但是这个图形化编程的其他图形控件都在”主程序DO” 这个黄色控件里面执行。如果没有这个黄色控件,程序无法执行,如果没有在黄色控件里面,程序不执行这个语句。

                            

    现在是完成了串口输出的图形化编程,但是并不是这样就可以直接控制单片机,因为单片机不是人,并不能很好地理解我们人类语言,所以要先转换为代码,然后代码再转换为机器语言,单片机才能识别出这些指令。

    对于我们使用图形开发的人而言,里面的转换过程是怎样的,怎么转换的,可以不去了解,就像你搭积木一样,你只要关注怎么搭建好一座堡垒就行,不用关心你的积木是由什么材质构成的,里面的分子结构是怎样的。

    所以在我们完成后,就点击下载到Arduino ,在Arduino IDE就可以看到对应的代码,但是我们不用管他,直接点击编辑下方的那个箭头,也就是上传建,就可以上传到单片机中,从而控制单片机。

                                 

    科普一下串口输出

    串口通信你可以理解为单片机在打电话,或者用scratch里面的,认为是单片机在广播。但是这个广播对方要怎么接收到你的信息呢,其实呢,它的实现更像是有线电话。就是串口有俩根线,一根是 TX,一根是RX,TX负责发送信息,RX负责接收信息。所以假设单片机A要跟单片机B通信,那就是A的TX跟B的RX相连。比如A用TX发’A’,然后RX就接收到’A’.

    波特率是指每秒传输的符号数,也就是说我们使用串口通信时,要约定好我们在1s,或者一段时间内要发送多少数据,双方要统一好发送数据的时间间隔,比如说我们约定1s发10个,那么我就每隔0.1s左右来读取一下你发送过来的数据。

    所以这个波特率越大,那么它单位时间发送的数据就越多,就有可能会来不及接收,单片机的反应速度根跟不上。所以最高的波特率为115200.除此之外还有9600,38400等波特率。

    编写图形化程序

    在你拉控件串口输出的时候,其实就像是scratch里面的广播一样,你只要把这个串口输出拉出来,然后在信息那一栏输入你要的信息就可以,然后你选择下载到Arduino,就会看到相应的代码。

                                       

    可以看到它正在下载编译,你可以看到图16,那个9600就是它的波特率,你可以在这里修改波特率的值,修改成115200也行。

                                                        

    到这一步为止,我们已经实现了图形化下载到Arduino 这个图形化转代码的步骤,接下来就是要把这个代码烧录到单片机中去,首先就是要选择对应的型号跟端口。

    这个你在插入到电脑后,检查有没有成功插入,然后就找到设备管理器。

                               

    可以看出我们的单片机型号是 Mega2560,然后端口是 COM5,所以我们就在Arduino IDE里面去选择对应的型号跟端口。

    点击Tools 这个按钮,然后选择Board 这个选项,选择Arduino mega2560,然后点击 Serial Port这个按钮,选择端口 为COM5。就大功告成,只等烧录。

    最后需要提醒大家的俩个点就是:

    1. Arduino高版本的不支持Arduino Block这款插件,所以在下载的时候要匹配版本

    2. 烧录之前要先选作编译器

                  

     

    展开全文
  • AVR存储器简介: AVR 系列单片机内部有三种类型的被独立编址的存储器,它们分别为: 1、Flash 程序存储器(即:程序存储空间、闪存) 2、SRAM 数据存储器(即:动态内存) 3、EEPROM 数据存储器 ...
  • Arduino语言介绍

    千次阅读 多人点赞 2019-02-14 10:45:38
    Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手...
  • arduino 15个入门实例

    2020-07-30 23:30:21
    arduino 15个入门实例
  • 3 Arduino 板概览 3.1 供电 3.2 电源接口 3.3 模拟输入 3.3 数字接口 3.5 单片机 4 本书的代码 1 单片机 2 开发板 3 Arduino 板概览 3.1 供电 3.2 电源接口 3.3 模拟输入 ...
  • Arduino基础入门二:搭建一个完整的Arduino程序

    千次阅读 多人点赞 2017-10-11 07:57:40
    一、开发软件 1、下载开发环境:到官网http://www.arduino.cc下载Arduino IDE, 安装完成; 2、启动编译软件;... a、将Arduino板和电脑USB端口通过USB方口数据线相连;  b、选择开发板类型:工具->
  • arduino 学习步骤(一):初识arduino

    千次阅读 2018-12-09 16:13:39
    一、单片机, MCU 微控制单元(Microcontroller Unit, 即MCU) ,又称单片微型计算机(Single Chip Microcomputer ). 是一种集成电路芯片, 将CPU、存储器、I/O接口等装配在一块芯片上,就构成了一台单片微型计算机...
  • 这一章开始,开始正式进入内容配置的环节(之前的可以看做是环境配置,笑)   说起店小蜜的配置,大部分人第一步就会不自觉地踩进坑里…… 从日了狗了的庞大的官方知识库开始配置…… 这个工作量有多大呢……...
  • 几种常用的arduino供电方法

    万次阅读 2019-07-09 00:31:55
    方法一:使用USB端口为Arduino供电 我们可以使用Arduino的USB端口为Arduino开发板供电。使用这种方法供电时,电源电压需要是稳定的+5V的直流电压。 当我们将Arduino开发板通过USB数据线连接在电脑USB端口上开发...
  • Arduino UNO Arduino NANO Arduino PRO MINI
  • 在Win10 上安装最新的Arduino IDE (1.6.9安装包)很简单,并且不行要手动安装Arduino板子的驱动,整个安装过程都当前的简单,我以前在我的Win7系统上安装Arduino1.1.0时,需要手动安装板卡驱动,步骤相当繁琐。...
  • arduino 各种类型转为String类型

    万次阅读 2016-03-27 13:45:23
    应该使用String(),就好了,其他说的都是扯淡
  • 第一次使用Arduino Nano

    万次阅读 2019-06-08 09:02:17
    Getting Started with the Arduino Nano开始使用Arduino Nano用Arduino网上IDE为Arduino Nano编程用Arduino桌面IDE为Arduino Nano编程打开第一个项目选择板子和端口上载并执行新程序学习更多的桌面IDE教程 ...
  • Arduino 串口数据读写

    万次阅读 2018-07-18 12:42:13
    源代码: char teststring; ... //串口和Arduino之间的通信  }   void loop() {  while(Serial.available()&gt;0){  teststring = Serial.read();  Serial.println(teststrin...
  • arduino 常用库文件下载

    千次阅读 2018-08-19 06:19:23
    arduino-pwm-frequency-library https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads
1 2 3 4 5 ... 20
收藏数 37,843
精华内容 15,137
关键字:

arduino