先学Arduino而不是先学单片机

转自KiritoA’s Blog

突然想起一个很重要的问题,为什么大家(包括我)都认为参加电子设计大赛,或者做点什么制作都非得要先学好单片机,还有模电数电这些基础知识?
本文针对还没有足够专业知识的同学,大神可忽略~

在实验室的时候,每当有师弟(师妹)来问“怎样才能弄出这个东西?”大家通常都会说“先学好单片机基础啦,像操作IO口啊,至少点亮个LED先,还有中断定时器串口I2CSPI什么的,然后就是学习控制一些芯片模块啊,对了还有模电数电基础,画电路板,做板要转印显影腐蚀,最后焊接调试。。。”如果不是对这些非常有兴趣的同学估计都要光速逃跑了。然后实验室留下的,都是对电子制作抱有强烈兴趣,能学下去的同学。

直到今天我才想起一个最基本的问题,我们学这些的最终目的:

不是要做一样东西出来吗?
不是想把心目中的一个想法实现出来吗?
一定需要学好那么多东西才能付诸实现?
10年前的我们也许就需要这样,但是赶上时代发展的我们有Arduino这一神器。

What is Arduino?

首先,Arduino算是一个开发平台,其中一个型号的开发板是长这样的

在这里插入图片描述

Arduino是一个开发各类设备,让你比台式电脑更能充分感知和控制物理世界的生态系统。Arduino是一个基于一系列单片机电路板的开源物理计算平台,一个编写用于Arduino和Genuino开发板的软件开发环境和一个拥有活跃开发者和用户社区。
Arduino可用于开发交互式物体,接受来自各类开关或传感器的输入,并能控制各种灯光、马达和其他物理输出装置。Arduino项目可以单独运行,也可以与您计算机上运行的软件(Processing、MaxMSP)配合使用。您可以手动组装简单的开发板,或购买预装的整套开发板, 还可以免费下载开源Arduino软件(IDE)。
Arduino编程所用编程语言是以Processing多媒体编程环境为基础的物理计算平台Wiring。通过多年的努力,Arduino软件(IDE)已经演变成能支持由英特尔和三星等公司制造的众多核心板和开发板。

官方的介绍不明觉厉,简单地说,就是一个开发平台,使用C/C++编写代码,普通人都能轻松上手,制作出想要的东西。简单的可以做个自动或者手动遥控小车。
在这里插入图片描述

图片引用:www.robotshop.com

复杂的或者做个目前比较火的3D打印机

在这里插入图片描述

当然最好的,还是把你脑海中的创意付诸于实现。
简而言之,你想做东西又不想学习单片机什么的,Arduino就是快速实现创意的最佳平台,但写代码是逃不掉的了(`・ω・´)


Why Arduino

明明有一个最快最简便的实现方法摆在面前,虽然我一直都知道这东西,却没想过它的意义何在。我们常常从51开始学单片机,然而

当我们在学单片机架构,CPU,ROM,RAM,寄存器等各种理论的时候,用Arduino的人在准备开发环境。
当我们在研究IO口,中断,定时器,如何使用各种通信协议的时候,用Arduino的人已经在尝试跟着教程写程序了。
当我们在纠结Keil破解之类的问题时,用Arduino的人大概已经自己写出了完整的程序了。
在Arduino写程序的时候,完全不需要知道单片机是什么东西,只需要根据官方提供的各种函数写代码,就像编写电脑程序一样,做到了底层无关,底层硬件对用户是透明的,我们只需要集中精力在软件方面。这样的好处是,至少不会再有这些学习51单片机几乎都要问一遍问题:

delay函数要怎么写?我看不懂这些for语句是干什么的?
I2C怎么写?为什么一直都通信不了?
串口怎么没输出的?怎么都是乱码?
这些基本的驱动函数Arduino中都已经全部编写好,使用时只需要调用函数即可。入门速度跟51单片机相比提高的不只是一点点。这也是Arduino项目最开始的目的,让一般人,让不懂什么电子知识的人都能很方便的实现自己的想法,就像开车不需要了解里面各种构造一样。官方也提供了大量示例程序,这些程序基本通用而且简单容易上手,也推出了一些外围器件模块,方便用户拓展。

然而,虽然安利了一大波,但并不是说Arduino就是什么神器,简单地说就是把单片机操作各种底层寄存器羞涩难懂的步骤省掉了。Arduino开发板本身并没有任何模块,因此你在最开始学习时只是学怎么操作这块板的芯片。当你需要操作矩阵键盘,数码管,液晶屏,电机这些东西(统称为外设)时,还是需要了解这些外设其中的原理,但单片机这个门槛你已经跨过了。
但是,

学习Arduino之前首先要学习C语言,此乃基本功。
操作一些官方没有例子的器件(芯片)的时候,还是需要看芯片手册或者一些教程。
当需要更深入了解底层/电子知识时,就需要进一步的学习了。
总而言之,Arduino就是创作/电子制作启蒙工具,实质还是电子积木的形式,但这的确是快速实现一些idea最理想最便捷的平台。不过未来要把做出来的东西整合起来的话,就需要更深入学习其他知识了,例如绘制和制作电路板。

当然,Arduino并不适合所有人,有的同学的确是想学习了解单片机的内部结构,或者从一开始起点比较高,做出来的东西接近一个实际产品(比如我,逃

也许有同学要问:

那已经不再需要学习单片机了?

Arduino使用的就是一款AVR单片机,当你已经不满足于仅使用Arduino提供的库函数的时候,你就可以打开库函数的源代码,当你都看懂之后,你会发现你已经学会如何使用AVR单片机了

当你掌握AVR单片机再回头看51单片机,你就会发现

“51单片机好难用啊”

虽然我最开始不是从Arduino学起,都是先学习51单片机,但当我接触AVR后,我就发现

卧槽我一定是我用过最爽的单片机(手动滑稽

最后,更多Arduino信息可以在官方网站了解更多https://www.arduino.cc


如果还有同学有兴趣并看到这个地方的话

我想说我们常说的单片机比较正确的叫法是微控制器/微处理器,不过因为历史的原因已经习惯这个叫法了。
对于很多工科专业的同学来说,51单片机是大学课程的内容之一,但Arduino对于大一大二模电数电单片机都还沒教的同学来说,Arduino会比较适合入门电子世界。

<think>好的,我现在需要帮助用户了解如何Arduino单片机。首,用户可能是一个刚入门的爱好者,或者是对电子制作感兴趣的生。他们可能没有太多电子或编程的基础,所以习路线需要从基础开始,逐步深入。 用户之前询问过机器习的一般步骤,现在转向Arduino,说明他们可能对技术应用有广泛兴趣,希望将理论应用到实际项目中。因此,习路线应该包含理论与实践的结合,强调动手操作项目实践。 接下来,我需要确定Arduino习的关键步骤。首肯定是基础部分,包括硬件组成编程基础。用户需要了解Arduino的基本结构,如主控板、GPIO接口、电源模块等。同时,编程方面需要介绍Arduino IDE的使用基本语法,比如setup()loop()函数,以及常见的函数如pinMode、digitalWrite等。 然后,可能需要分阶段进行。初级阶段可以包括简单的实验,比如点亮LED、使用按钮控制等。中级阶段涉及传感器执行器的使用,如温湿度传感器、超声波模块、舵机控制等。高级阶段则涉及通信协议、低功耗设计、多任务处理等更复杂的内容。 用户可能还关心如何逐步提升,所以需要给出每个阶段的习重点推荐项目。比如初级阶段做交通灯模型,中级阶段做智能家居原型,高级阶段做物联网或机器人项目。此外,还需要推荐习资源,如书籍、在线教程、社区论坛等,帮助用户自。 另外,用户可能遇到常见问题,比如程序上传失败、传感器数据不准、硬件连接问题等,需要给出解决方案。这部分可以增强用户的信心,帮助他们克服初期的困难。 最后,要强调实践的重要性,建议用户多动手做项目,参与社区交流,持续习新技术。同时,提醒用户注意安全,比如正确使用电源避免短路,确保习过程顺利。</think>以下是一个系统的Arduino单片机习路线指南,结合具体案例关键知识点说明: --- ### **一、基础准备阶段(1-2周)** #### **1. 硬件认知** - **核心组件**: - Arduino UNO开发板(主控芯片ATMega328P) - GPIO接口(数字引脚0-13,模拟引脚A0-A5) - 电源模块(USB供电/外接7-12V电源) - 面包板与杜邦线(用于快速原型搭建) - **必备工具包**: ```markdown - LED灯(红/黄/绿) ×10 - 220Ω电阻 ×20 - 按键开关 ×5 - 电位器 ×3 - 蜂鸣器(有源/无源) ×2 ``` #### **2. 软件环境** - **IDE安装**: - 官网下载Arduino IDE(推荐2.x版本) - 安装CH340/CP2102等USB转串口驱动 - **基础代码结构**: ```cpp void setup() { pinMode(13, OUTPUT); // 初始化13号引脚为输出模式 } void loop() { digitalWrite(13, HIGH); // LED亮 delay(1000); // 延时1秒 digitalWrite(13, LOW); // LED灭 delay(1000); } ``` #### **3. 首个实验:Blink** - 目标:点亮板载LED(PIN13) - 关键函数: - `pinMode()` - `digitalWrite()` - `delay()` --- ### **二、初级阶段(2-4周)** #### **1. 数字信号控制** - **LED流水灯**: ```cpp int pins[] = {2,3,4,5,6}; void setup() { for(int i=0; i<5; i++) pinMode(pins[i], OUTPUT); } void loop() { for(int i=0; i<5; i++){ digitalWrite(pins[i], HIGH); delay(200); digitalWrite(pins[i], LOW); } } ``` - **按键控制**: - 习上拉电阻与`digitalRead()` - 实现按键切换LED状态 #### **2. 模拟信号处理** - **PWM调光**: ```cpp analogWrite(9, 128); // 50%占空比(0-255) ``` - **电位器控制LED亮度**: ```cpp int val = analogRead(A0); // 读取0-1023 analogWrite(9, val/4); // 映射到0-255 ``` #### **3. 推荐项目** - 交通灯模拟系统 - 可调光台灯 - 电子骰子(LED随机数) --- ### **三、中级阶段(4-8周)** #### **1. 传感器应用** | 传感器类型 | 典型型号 | 应用场景 | |------------|----------|----------| | 温湿度 | DHT11/DHT22 | 环境监测 | | 超声波 | HC-SR04 | 测距避障 | | 红外 | IR Receiver | 遥控解码 | | 光敏 | 光敏电阻 | 自动照明 | - **DHT11示例**: ```cpp #include <DHT.h> DHT dht(2, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.print("Humidity: "); Serial.print(h); Serial.print("% Temp: "); Serial.println(t); delay(2000); } ``` #### **2. 执行器控制** - **舵机控制**: ```cpp #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(90); // 转到90度位置 delay(1000); } ``` - **步进电机驱动**: - 使用ULN2003驱动板 - 习单拍/双拍驱动方式 #### **3. 通信协议** - **UART串口通信**: ```cpp Serial.begin(9600); // 初始化串口 Serial.println("Hello!"); // 发送数据 if(Serial.available()) { // 接收数据 char c = Serial.read(); } ``` - **I2C(OLED显示示例)**: ```cpp #include <Wire.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display(128, 64, &Wire); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.println("Hello World!"); display.display(); } ``` #### **4. 推荐项目** - 智能温控风扇(温度传感器+PWM调速) - 超声波避障小车 - 手机蓝牙遥控机械臂 --- ### **四、高级阶段(8周+)** #### **1. 低功耗设计** - 睡眠模式唤醒: ```cpp #include <avr/sleep.h> set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_mode(); // 进入深度睡眠 ``` - 使用外部中断唤醒 #### **2. 多任务处理** - **时间片轮询**: ```cpp unsigned long prevMillis = 0; void loop() { if(millis() - prevMillis >= 1000) { // 每秒执行的任务 prevMillis = millis(); } } ``` - **RTOS应用**: - 使用FreeRTOS库实现多线程 #### **3. 物联网集成** - **WiFi模块(ESP8266)**: ```cpp #include <ESP8266WiFi.h> void setup() { WiFi.begin("SSID", "password"); while(WiFi.status() != WL_CONNECTED) delay(500); } ``` - **MQTT协议**: - 连接阿里云/腾讯云IoT平台 #### **4. 推荐项目** - 基于NB-IoT的远程环境监测站 - 智能家居中控系统(语音控制+APP) - 自平衡两轮机器人 --- ### **五、习资源推荐** #### **1. 书籍推荐** - 《Arduino程序设计基础》 陈吕洲 - 《Arduino从基础到实践》 杨继志 - 《Making Things Talk》 Tom Igoe(英文原版) #### **2. 在线平台** - 官方文档:https://www.arduino.cc/reference/en/ - 慕课网Arduino专题课程 - Instructables项目库 #### **3. 硬件采购** - 推荐商家: - 淘宝:DFRobot旗舰店 - 国际:Adafruit、SparkFun --- ### **六、常见问题解决** 1. **程序上传失败**: - 检查COM端口选择 - 确认板卡型号匹配(工具→开发板→Arduino UNO) - 重启IDE或重插USB线 2. **传感器数据异常**: - 检查供电电压(5V/3.3V) - 确认上拉/下拉电阻配置 - 使用示波器观察信号波形 3. **硬件连接问题**: - 用万用表检测线路通断 - 避免电源短路(断电再接线) --- ### **习路线总结** ``` 基础操作 → 传感器应用 → 通信协议 → 系统设计 → 物联网扩展 ``` **关键建议**: - 每完一个知识点立即做实物验证 - 从复现经典项目开始,逐步增加创新功能 - 参与创客马拉松(如Maker Faire)获取灵感 通过系统化习+持续项目实践,可在3-6个月内掌握Arduino开发的核心技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值