网络上有很多怎么让Arduino的5V电平转换成3.3V电平,从而和工做在3.3V下的芯片相互沟通的教程。可是若是想驱动高于5V电压的芯片,就找不到教程了。所以今天我来介绍一种方式,能让Arduino的OUTPUT口和须要5~12V的电子元件进行通讯。下文以12V为例。git
面包板图:网络
(假设右边那个nano是咱们须要驱动的12V的东西)oop
原理图:测试
必定要记住:Arduino引脚输出的电平会被取反,即Arduino输出HIGH,芯片却收到LOW,反之亦然!只要知道这一点,剩下的事情和开发普通OUTPUT引脚都差很少了。ui
咱们先弄一个测试工程试试看。spa
在测试工程中,咱们用万用表的电压表(20V挡位)来模拟12V芯片,即万用表红线接图中蓝线,万用表黑线接地(图中黑线)。由于芯片的INPUT模式至关于一个电压表,因此能够这么替代来看效果。当12V芯片应当收到HIGH时,咱们的万用表上就会出现接近12V的电压;收到LOW则出现0V。.net
创建一个ino工程,代码以下:3d
#define TEST_PIN 7 void setup(){ pinMode(13,OUTPUT); pinMode(TEST_PIN,OUTPUT); } void loop(){ digitalWrite(13,!digitalRead(13)); digitalWrite(TEST_PIN,!digitalRead(TEST_PIN)); delay(2000); }
链接电路,查看效果。若是一切正常,你将会看到,当ino上的小灯亮起的时候,万用表显示0V;熄灭时显示12V。code
三极管这东西高中物理竟然不教...所以我自学研究了半天才勉强搞懂一点点。感受不少书/教程讲的都太复杂了,像什么阿尔法值,贝塔值,放大倍数什么的,真正应用的时候不必定用得上,所以我这里简单讲一讲三极管用得上的部分。blog
三极管有两种类型,NPN和PNP,我这里讲一讲NPN,即这篇文章中用到的那种。首先,咱们要记住这张图和它的三个引脚对应的说法:C(集电极),B(基极),E(发射极)(想搞懂名称的本身看原理去)。
咱们首先来看有箭头的那一条路径(B->E):这条路最简单,彻底不用考虑C端发生了什么,而是几乎能够当作一个B->E的二极管。B电压大于E必定程度(即B到E有足够大的电势差,通常是0.3V之类),就会有电流,反之则没有。咱们的电路中,B接的是Arduino引脚。所以,当Arduino HIGH时,BE有5V电位差,可是有一个限流电阻,所以有微小的电流;反之没有。
而后再看另外一条路径,C->E:这一条就悲催的多了,彻底被B->E那一条管着。若是BE没有电流,无论发生什么,CE都不会有电流,这是能够当作C、E之间断开了。若是BE有电流,才会容许CE产生电流。在咱们的电路中,BE有电流则CE连通,即C点接地,因而12V芯片收到LOW;反之,收到HIGH。其实这一部分单独看,就是一个上拉电阻。图见下。
顺便说一下“电流倒灌”的问题:若是如今三极管的部分换成一块导体,那么很明显,C电压高于B,所以会有灌入B的电流,从而形成Arduino出各类各样的问题。可是咱们的电路中没有这个问题(确实实践测试过了),这是由于三极管能够帮助B不被倒灌。可是据传说,若是C电压高于B太多,那么倒灌照样会发生。若是真的发生倒灌,一个(可能)可行的策略是在B处安装一个整流二极管,不让电流倒着流动。
感谢阿古(古做坊坊主)在在电路方面的指导!