Arduino中国 | Flamingo EDA

触摸开关去年曾经做过一个版本,当时使用的是一个胶封的芯片,体积比较大,而且一致性也不是很好,并且触摸部分的金属片是附加在按钮上的,制作起来比较复杂。这次做的触摸按钮解决了这两个问题,采用集成了了触摸芯片,并且直接在按钮上设置了一块触摸的区域,中间的焊盘可以很方便地连接其他的金属块,以方便实际中的使用:


连接方法仍然是通过传感器连接线,与传感器扩展板连接起来即可使用Arduino来进行处理了。

触摸按钮属于数字模块,在处理方式上同普通的按钮并没有什么区别,下面是实验时用到的代码:

int ledPin = 13;
int switchPin = 7;
int value = 0; 

void setup() {
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  value = digitalRead(switchPin);
  if (HIGH == value) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

这个触摸按钮上的O1和O2两个跳线用来设置触摸传感器的工作模式,该传感器一共有4个工作模式,其中如下两种是最常使用的:

  • O1和O2都置高(H):当人体触摸到金属片时输出低电压,当人体离开金属片时输出高电压,接触时间不能超过10秒
  • O1和O2都置低(L):当人体触摸到金属片时输出低电压,当人体再次触摸到金属片时输出高电压,相当于一个翻转开关

滑动电位器在类似于音量调节和参数调整这样的场所经常被使用到,其滑块能够滑动的距离称为行程,60行程即代表能够滑动60mm,是最常使用的一种行程大小。这个电子积木选用的就是60行程的滑动电位器:

使用上与其它基于电位器的电子积木一样,只需要用通用传感器连接线或者模拟传感器连接线,将其连接到某个模拟输入接口,如A5上:

然后再借助Arduino读出其值就可以,如下面的示例代码所示:

int sensorPin = 5;
int value = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  value = analogRead(sensorPin);
  Serial.println(value, DEC);
}

这样当滑块位于滑动电位器上的不同位置时,读出来的值会在0到1023间变连续变化。

No tags

Dec/09

4

电子积木 串口适配器 MAX232

电子设备或者模块在需要同外界进行通信时,经常采用串行通信的方式,即逐位传输一系列二进制编码数据。基于单片机的电子设备的串口有很大一部分使用的是 TTL电平标准,它的逻辑1电平是5V,逻辑0电平是0V;而我们常用的PC机串行口所使用的却是RS-232C电平标准,它的逻辑1电平是 -3V~-12V,逻辑0电平是+3V~+12V。由于两者的电平范围相差很远,因此必须在RS-232C和TTL电路之间进行电平和逻辑关系的变换之 后,才能在PC机和这类电子设备间实现串行通信。一般来讲,实现这种变换的电路可以用分立元件搭建,也可以使用MAX232这样的集成电路芯片。

我们开发的电子积木串口适配器,就是采用了MAX232芯片的电平转换模块,可以很方便地在Arduino和PC间建立起串口通信。由于Arduino自带的是USB转串口的方案,实际使用时如果觉得复杂或是稳定性不够,可以考虑这一串品适配器,由于缺少了USB转串口这一中间环节,通信方式更加直接。不过目前该模块还只能用在Arduino MEGA上,并且只能用在串口COM1, COM2, COM3上,原因可能是COM0是直接同USB转串口芯片连接的,它与MAX232之间似乎不是很兼容。

基于串口的电子积木使用的都是4芯的IIC/COM连接线,利用它可以将串口适配器非常方便地连接到Arduino MEGA专用传感器扩展板上,从而完成同Arduino的通信:

最后再用一根串口线连接PC和串口适配器,硬件部分的连接就完成了:

至于软件部分,在PC端我们可以借用SSCOM这样的串口调试工具,而Arduino这端则使用如下的测试代码:

int val = 0;

void setup()
{
  Serial1.begin(9600);
}

void loop()
{
  val = Serial1.read();
  if (-1 != val) {
   if ('A' == val || 'a' == val) {
     Serial1.println("Hello from Arduino!");
   }
  }
}

将上述代码下载到Arduino中执行后,Arduino会一直等待从PC端过来的命令,如果按受到字符A,则向PC端发送”Hello from Arduino!”这一字符串:
max232_sscom

No tags

1602字符型液晶显示屏是电子制作中经常用到的一个模拟,它可以用来显示两排字符,每排16个字符:

不过,要控制这样一个常用的模块,其实也不是那么容易。首先,我们要按照其4线或者8线的工作模式,占用相应的Arduino引脚,但这样其实占用了较多的数字I/O引脚,特别是8线的连接方式。再次,虽然有相应的库可以支持,但要将其调试通过,并在Arduino上成功运行起来,相应也会遇到不少的问题。最后,控制液晶的代码需要占用相应的存储空间,这对于本来就不富裕的16K存储空间的Arduino来讲,无疑就是雪上加霜。

为了解决这些问题,我们设计了这款基于1602字符型LCD的串行液晶显示屏,与之前的做法相比,优点是很明显的:

  • 采用串口进行控制,硬件连线降到最少;
  • 不占用Arduino的存储空间;
  • 成功验证的代码,将调试时间降到最低。

与传感器扩展板和专用连接线配合,可以非常容易地与Arduino连接上:

为了演示其功能,我在传感器扩展板上还接了一个按钮模块,当按钮按下时,Arduino会通过串口向液晶屏发送相应的命令进行控制。该模块上电时的效果如图所示

在Arduino里运行的代码为:

int switchPin = 7;
int value = 0;

void setup() {
  Serial.begin(9600);
  pinMode(switchPin, INPUT);
}

void loop() {
  if (HIGH == digitalRead(switchPin)){
    Serial.print("$CLEAR\r\n");
    Serial.print("$GO 1 1\r\n");
    Serial.print("$PRINT Flamingo  EDA\r\n");
    Serial.print("$GO 2 4\r\n");
    Serial.print("$PRINT Hello World!\r\n");
    Serial.print("$CURSOR 1 1\r\n");
  }
}

对照代码你可以看出,所有对该液晶屏进行控制的串口命令都以字符”$”开始,以回车按行”\r\n”结束,两者之间是相应的命令和参数,不同的命令具有不同的参数。

  1. GO 光标移动
  2. PRINT 在当前光标位置上显示字符串
  3. CLEAR 清屏
  4. HOME 将光标移回到屏幕左上角的初始位置
  5. CURSOR 设置光标效果,第一个参数为是否显示光标(1和0),第二个参数为是否闪烁(1和0)

当Arduino检测到按钮按下时,会向连接在串口上的串行液晶显示屏发送相应的控制命令,效果如下图所示:

No tags

Nov/09

15

电子积木 控制杆 JoyStick

但凡玩过点游戏的对这个控制杆肯定不陌生,它可以用来对控制物体在二维平面内(X和Y方向)的运动,不知道加上Arduino后又能够变换出什么样的不同创意来。

从原理上来讲,这个控制杆可以看成由两个电位器和一个按钮组成:

其中两个电位器的输入值分别用来表示用户在X和Y轴上的偏移量,其类型为模拟量;而按钮则用来表示用户是否在Z轴上按下,其类型为数字量。因此该控制杆一共有三个输入接口,分别用来连接X、Y和Z:

具体使用的时候,可以和Arduino传感器扩展板结合起来,用相应的连接线与Arduino上对应的引脚连接起来。在下面的例子中,X和Y轴分别连接在模拟输入端口A0和A1上,而Z轴则连接在数字I/O的7号引脚上:

相应的代码如下所示:

int sensorPin = 5;
int value = 0;

void setup() {
  pinMode(7, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  value = analogRead(0);
  Serial.print("X:");
  Serial.print(value, DEC);

  value = analogRead(1);
  Serial.print(" | Y:");
  Serial.print(value, DEC);

  value = digitalRead(7);
  Serial.print(" | Z: ");
  Serial.println(value, DEC);

  delay(100);
}

好了,刚始玩吧;-)

<< Latest posts

Older posts >>

Theme Design by devolux.nh2.me