Electronic Brick Starter Kit中文

来自Duinopeak_COM
跳转至: 导航搜索

[English]



产品简介

我们一直致力于使电子原形的搭建更快更容易。在实现想法的时候,我们相信更多的精力应该被放在概念设计的阶段,而不是纠结在基础的电路设计。
puzzle是一套将电子平台模块化以实现快速原型搭建的平台。每个模块都有一个功能,例如触控,产生音效等等。只要将你需要的模块接到base shield上,你就可以开始测试你的想法是否可行了。
puzzle Starter Kit Plus是puzzle Starter Kit的升级版。在这个套件里面,我们增加了更多常用的模块以支持你的想法实现。同时,我们还为其配备了醒目的包装盒,助你快速上手的小册子以及可爱的贴纸。电子电路可以非常容易上手,从puzzle Starter Kit Plus开始,重新爱上电子设计吧!



puzzle入门

puzzle Base Shield 简介

puzzle Base Shield是Arduino到puzzle系统的接口板。它将所有Arduino的管脚扩展成22个puzzle接口,包括:digital(13),analog(5),SPI(1),UART(1)以及I2C(2)。不同的puzzle模块是通过不同的协议与Arduino交互数据的。只要知道单个puzzle产品使用哪种方式和Arduino沟通,你就可以轻易地使用该模块了。


Digital接口

中间被红线标出的是8个digital puzzle接口。它们与Arduino上的0 - 9管脚是对等的。大多数情况下,它们被用来读取一个输出0或者1的传感器的值,或者控制一个接受开关命令的执行部件。
它们当中的一些可以被复用为PWM(pulse width modulation)输出,包括D3,D5以及D6这三个接口。在驱动舵机或者制造呼吸灯效果时,你会用到这些功能。
串口也是会用到digital的接口的。Arduino的硬串口,也就是UART口,被引出到D1这个puzzle接口处。Arduino与PC之间的通信就是通过硬串口实现的。在puzzle系统使用的过程中,如果需要至少两个使用串口的设备(例如一个与PC通信以便调试的硬串口,以及另一个串口设备),puzzle Base Shield上的digital puzzle接口是可以作为软串口被复用的。在往后的puzzle系统探索中,会有这种情况。

Analog输入接口

左边区域是4个用于读取analog输入的puzzle接口。analog的传感器工作时会返回一个0 - 1024的值。相比只会返回0或者1的digital传感器而言,analog的传感器返回值更精确和包含更多细节。

I2C接口

下方区域是4个I2C puzzle接口。I2C是一种只使用两根信号线,SCL和SDA,来传输数据的低速总线。SCL是控制总线上节奏的时钟信号,SDA是数据信号。下面是其工作原理的一张简图。

2014-10-21 14h39 50.png

I2C总线上可以挂任意数目的设备,但是同一时间点只能有一个工作在主机模式,其他必须是从机模式。对于puzzle中用到I2C这种协议的模块而言,主机就是Arduino主板。作为主机,Arduino为整个系统提供时钟信号,向从机分发命令,以及接收从机返回的数据。如何识别每一个从机呢?挂在I2C上的设备是需要一个唯一的I2C地址的。
当需要传送的数据量超过了digital或者analog这两种模式可以承受的范围时,I2C就会被提上日程了。例如,当我们想要收集到一些较复杂的传感器信息,如角速度,或者现实时间时,我们就会首选I2C作为模块与Arduino之间的通信方式。


模块介绍

puzzle – Button(P)


一个普通的按键,一个为懒人准备的即插即用的按键。
Example

将Button按键接在D3端口,把LED接在D7端口,复制下面的代码,并上传到Arudino开发板上面即可; 下面演示的是如何用按键来开关LED。

int button = 3;   //attach a button to digital pin 3
int LED = 7;      //attach an LED to digital pin 7

void setup()
{
  pinMode(button, INPUT);  //define button an INPUT device
  pinMode(LED, OUTPUT);    //define LED an OUTPUT device
}

void loop()
{
  int buttonState = digitalRead(button);  //read the status of the button
  if(buttonState == 1)
      digitalWrite(LED,1);
  else
      digitalWrite(LED,0);
}

Tips
这是一个瞬时开关,当被按下的时候,它会输出一个HIGH信号。一放手,信号就会变成LOW。像莫斯电码器之类的项目,瞬时开关是理想的材料,但是如果你想要的是自锁开关,下面的puzzle - Switch就是了。

puzzle – Switch(P)


400px-SwitchP.jpg

Description
puzzle - Switch是一个mini的滑动变阻器,它是自锁的,可以让你选择HIGH或LOW信号。 Example


400px-Switch1.jpg

puzzle - Button(P)的代码可以完全移植到puzzle - Switch的例子上,而无需修改代码。 Tips 名字里“P”的意思是“panel mount”,名字带“P”的puzzle部件,puzzle接口是焊在板子的反面的,这样你就可以用它来做外壳一个隐藏了puzzle线的交互部件了。

puzzle – Touch Sensor



puzzle - Touch Sensor也是puzzle - Button的一个替代品。当你触摸中间区域时,它会输出HIGH信号。
Example


400px-Touch1.jpg

puzzle - Touch Sensor同样可以用puzzle - Button(P)的程序来调试。
Tips
Touch sensor是通过测量手指与传感区域间电容的变化来辨别触摸的信息的。所以无论你从正面还是反面来触摸它,都能得到相同的信号。

puzzle – Magnetic Switch




Description
puzzle - Magnetic Switch 探测的是附近是否存在磁场。磁场开关(也称干簧开关)常用的场景有门窗的防盗系统,电脑的自动关机系统,以及自行车上用于测速的设备,当它附近的磁场达到它的阈值时,它就会输出HIGH信号。
Example

MagneticSwitch1.jpg

同样试试用puzzle - Button(P)的代码用在磁场开关上面吧。
Tips
用磁场开关来代替传统开关,在一些场合,可以减少损耗,增加设备的寿命。

puzzle – Green LED

LED.jpg

LED是最常用的元件了。我们常用它来作为结果的指示,puzzle Starter Kit Plus里面包含有三种颜色,R, G, B,的LED灯,以满足基本的显示需求。
Example

400px-LEDKit.jpg

除了上面提到过的开关LED的示例,现在我们用LED来制造呼吸灯的效果。

/* This is an example code from Arduino, you can open it via this path in Arduino IDE: File --> Example --> 1.Basic --> Fade */

int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

void setup() 
{ 
  // declare pin 7 to be an output:
  pinMode(7, OUTPUT);
} 

void loop()  
{ 
  // set the brightness of pin 7:
  analogWrite(7, brightness);    
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) 
{
    fadeAmount = -fadeAmount ; 
  } 
  // wait for 30 milliseconds to see the dimming effect    
  delay(30);                            
}


Tips
puzzle的LED备有6种颜色,除了R,G,B三种,还有以下三种可以选择:
1) puzzle – Purple LED(3mm);
2) puzzle – White LED(5mm);
3) puzzle – Multi Color Flash LED(5mm)

puzzle – Buzzer



puzzle - Buzzer是一个微型的蜂鸣器,很可能是你接触到的第一个能够发生的器件。除了能够用作警示或指示之外,也可以用来播放一首简单的歌曲。
Example

400px-BuzzerKit1.jpg

以下是来自Oomlout.com的例子,用puzzle - Buzzer来播放家喻户晓的童谣“Twinkle Twinkle Little Star”。

/* (cleft) 2005 D. Cuartielles for K3
 *
 * This example uses a piezo speaker to play melodies.  It sends
 * a square wave of the appropriate frequency to the piezo, generating
 * the corresponding tone.
 *
 * The calculation of the tones is made following the mathematical
 * operation:
 *
 *       timeHigh = period / 2 = 1 / (2 * toneFrequency)
 *
 * where the different tones are described as in the table:
 *
 * note  frequency  period  timeHigh
 * c          261 Hz          3830  1915  
 * d          294 Hz          3400  1700  
 * e          329 Hz          3038  1519  
 * f          349 Hz          2864  1432  
 * g          392 Hz          2550  1275  
 * a          440 Hz          2272  1136  
 * b          493 Hz          2028 1014 
 * C          523 Hz         1912  956
 *
 * http://www.arduino.cc/en/Tutorial/Melody
 */ 
int speakerPin = 6;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}
void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  
  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}
void setup() 
{
  pinMode(speakerPin, OUTPUT);
}
void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') 
   {
      delay(beats[i] * tempo); // rest
    } 
   else 
   {
      playNote(notes[i], beats[i] * tempo);
    }   
    // pause between notes
    delay(tempo / 2); 
  }
}

Tips
蜂鸣器是如何工作的呢?通常它里面都会有两个陶瓷圆片在,当电压加到上面时,它们会互相吸引或者排斥,以制造空气振动,从而发出声音。所以,当震动的频率改变时,声音也会跟着改变。

puzzle – Vibrator



这是一个适合做静音指示器的小型震动马达。当设置为HIGH时,它可以产生如手机震动模式般的震动效果。
Example


400px-Vibrator1.jpg

它的控制方式与LED完全相同,你也可以用它来做一些节拍。试试将它用于buzzer的代码,看看震动版的“Twinkle Twinkle Little Star”是怎样的? Tips
单个的震动力量有限,但是可以使用多个震动马达来实现更大范围的震动。

puzzle – Rotary Angle Sensor



这是一个10Kohm的线性电位计。它的有效转动区域有300°。因为是常见的界面控制器件,所以它的puzzle座子也是安在背面,以方便其安装在外壳上。如果你想让其各有个性,可以在其上DIY一个帽子。 Example


400px-Rotaty1.jpg

下面演示如何读取电位计的读数。

int potentiometer = 0; 

void setup()
{
  Serial.begin(9600);              //set the serial communication frequency at 9600 bits per sec
  pinMode(potentiometer, INPUT);
}

void loop()
{
  int value = analogRead(potentiometer);
  Serial.println(value);          //pirnt the value on the serial monitor screen
  delay(1000);                    //wait 1000ms before printing next value
}

Tips
旋转电位计和旋转编码器外观极其相似,但他们是完全不同的。 功能上而言,旋转电位计是一个滑动变阻器,只是形状是旋钮的形状。它可以返回角度上的位置信息。相比而言,编码器是可以向一个方向持续旋转的,它返回的是记录角度的标记,通过板上的芯片,它可以以digital或者analog的方式返回转过角度的数据。

puzzle - Sound Sensor



puzzle - Sound Sensor是一个令你的项目会对环境声音作出反应的小型电极麦克风。它的板上有一个电位计,让你可以调节它的灵敏度。 Example


400px-Sound1.jpg

下面的例子里,我们为LED设置了一个阈值,当环境音的强度超过了预设的阈值,LED将亮起。

int ledPin = 6;                       //attach a LED to Digital 6
int thresholdValue = 0;                 // the threshold to turn on or off the LED

void setup()
{
  pinMode(ledPin, OUTPUT);          //set the LED on Digital 12 as an OUTPUT
}

void loop()
{
  int sensorValue = analogRead(A0); //read the sensorValue on Analog 0
  if(sensorValue>thresholdValue)
  digitalWrite(ledPin,HIGH);
  delay(200);
  digitalWrite(ledPin,LOW); 
}

Tips
Sound Sensor收集环境音的时候是不分频段的,所以输出的效果与人耳听到的效果是不同的。

puzzle – Light Sensor (P)



光敏传感器是DIY项目中应用最广的传感器之一,一般来说,当环境光强增加时,光敏电阻的阻值下降。
Example


400px-Light1.jpg

下面的例子里,当环境光强跌到预设阈值之下时,LED就会亮起。

int ledPin=6;                  //attach a LED to Digital 7
int thresholdvalue=400;       //the threshold to turn on or off the LED

void setup() 
{
   pinMode(ledPin,OUTPUT);           //set the LED on Digital 12 as an OUTPUT
}

void loop() 
{
  int sensorValue = analogRead(A0); //the light sensor is attached to analog A0
  if(sensorValue<thresholdvalue)
  {
    digitalWrite(ledPin,HIGH);
  }
  else
  {
  digitalWrite(ledPin,LOW);
  }
}

Tips
light sensor的输出为0 - 1023,但是这个度数与环境光强之间并不是线性的关系。下面是描述这种非线性关系的图表。

读数 光强(LUX) 描述(改自Wikipedia)
100 <1
200 ~1 热带地区的满月
300 ~3 城市的晨光
400 ~6
500 ~10
600 ~15
700 ~35 家庭起居室
800 ~80 办公室走廊
900 >100 非常暗,多云的天气

puzzle – Temperature Sensor



puzzle temperature sensor用一个热敏电阻来探测环境的温度。它的探测范围为-40到125℃,误差为±1.5℃。它并不直接输出温度值,而是通过程序的一条计算公式来获得该值。
Example


400px-TemperatureKit1.jpg

下面的例子展示了如何将传感器原始的值转换成具体温度值得过程,你可以在串口上看到具体的温度值。

int a;
int del=1000;                // duration between temperature readings
float temperature;
int B=3975;                  //B value of the thermistor
float resistance;

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

void loop()
{
  a=analogRead(0);
  resistance=(float)(1023-a)*10000/a; 
  temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;
  delay(del);
  Serial.println(temperature);
}

Tips
代码中的转换公式是热敏电阻生产厂家在元件的规格书中提供的,它是Steinhart-Hart方程的一个变形。

puzzle – Relay



puzzle - Relay是一个放大你主控控制能力的一个很有用的小部件。只要将控制信号给到Relay,Relay就会为你控制接到其上端子的外部电路的通断。它最高可以控制220VAC的电压哦,开始做些家电的项目吧!
Example


400px-RelayKit1.jpg

下面是用开关来控制relay通断的一个例子。

const int buttonPin = 7;      // the button is attached to digital pin 7
const int relayPin =  6;           // the relay is attached to digital pin 6
int buttonState = 0;

void setup() 
{
  pinMode(relayPin, OUTPUT);      
  pinMode(tiltPin, INPUT);     
}

void loop()
{
  // read the state of the button:
  buttonState = digitalRead(buttonPin);
  if (buttonState == 1)   digitalWrite(relayPin, HIGH);  
  else   digitalWrite(relayPin, LOW); 
  delay(10);
}

Tips
Relay内部是一个机械开关。它的体积与它能够承载的电流是有关系的。体积越大,能承载的电流就越大。

示例项目

1. A Cup Of Flowers



描述
疲倦的时候来杯闪烁的花儿吧。这个项目使用puzzle - LED和puzzle - Touch Sensor做的。当触碰Touch Sensor时,LED会亮起。
材料清单

1. Arduino x 1;
2. puzzle – Base Shield x 1;
3. puzzle – LED x 6;
4. puzzle – Touch Sensor x 1;
5. 6 x 6cm Color paper x 6;
6. 9V battery & 9V battery clip x 1.

Note:puzzle - Starter Kit里面有3个不同颜色的LED,但是如果你想用更多LED,就要另外购买了。
Steps
1. 折出花朵



用一个你喜欢的图样折出一些花朵的外观。如果你没有熟悉的样式,一个Google search可以帮你找到很多,很多的折纸爱好者和艺术家都会在网络上分享自己的作品。
这里我用了郁金香作为图样,但是太阳花啊,百合等等都很棒。
折好花朵之后,在花朵的底部你需要留一个孔位给puzzle线。
2. 搭建



将所有花朵和touch sensor用10cm的puzzle线接到puzzle - Base Shield上,然后将代码上传到主控上。

void setup()
{
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(9, INPUT); //pin of touch sensor
}

void loop()
{
  int switchState = digitalRead(9);
  if(switchState == HIGH)
  {
    digitalWrite(2, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(2, LOW);
    digitalWrite(4, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(11, LOW);
    digitalWrite(13, LOW);
  }
  delay(100);
}

3. 供电



用一个9V电池来为它们供电,把它们放到杯子里,好了,完成了!

2. How You Doing!



(downloaded form think.bigchief.it)
Description
你是如何和朋友打招呼的?Big Chief说“来个摇摆怎么样!”当一个Big Chief背靠着另一个Big Chief时,他们就会震动起来,用摇摆的方式打招呼。
Materials List

1. Arduini x 1;
2. puzzle – Base Shield x 1;
3. puzzle – Magnetic Switch x 1;
4. puzzle – Vibrator x 1;
5. Paper toys x 2;
6. Magnet x 1;
7. 9V battery & 9V battery clip x 1.

Steps
1. 把它打印出来!



网络上有很多纸膜的图样,选择一个你所喜欢的,确保里面有足够的位置放一个puzzle - Magnetic Switch或者puzzle - Vibration Motor即可。找到之后,将它打印出来。
2. 将器件安装好
集中精神将纸玩具好好地切出来,只有这样,你才能拿到一个整洁的。然后,就可以将用到的部件安装进去了。我在一个Big Chief的背上贴了一个磁铁。



然后在另一个背上贴了一个magnetic sensor,然后在他的脚上安装了一个vibration motor。



3. 站好!



遵循纸膜的指示,小心地把两个Big Chief组装起来。
4. 上传代码



将下面的代码上传到你的主控上,你的Big Chief就活过来了。

void setup()
{
  pinMode(11, INPUT);
  pinMode(9, OUTPUT);
}

void loop()
{
  int sensorState = digitalRead(11);
  if (sensorState == 1) digitalWrite(9, HIGH);
  else digitalWrite(9, LOW);
  delay(100);
}