上海羊羽卓进出口贸易有限公司

释一行传感器 手势传感器,带你装逼带你飞

发布时间:2024-11-24 09:11:39

手势传感器,带你装逼带你飞

在这篇文章中,我们将展示如何使用简单的原件,如红外传感器与 Arduino Nano ,去制作手势检测器。在本文的末尾,你可以学到:

解释红外传感器的应用及其工作原理使用 TPA81 传感器使用红外传感器检测动作和手势制作一个炫酷的检测器来增加或减少你的扬声器音量

材料

名称 数量 Arduino Nano R3 x1 8像素热电堆阵列传感器 TPA81 x1 红外动作传感器 HC-SR505 x8 0.96inch SPI 128X64 OLED x1 面包板 x1 杜邦线 若干 Arduino IDE 被动红外传感器:它是如何工作的?

被动式红外传感器(Passive Infrared,PIR)是一种电子传感器,用于测量其视场中的物体辐射的红外线。它们最常用于基于 PIR 的动作检测器。所有温度高于绝对零度的物体都以辐射的形式发出热能。通常,这种辐射对人眼是不可见的,因为它以红外波长辐射,但它可以通过特殊的电子设备进行检测。

被动在这里指的是,红外传感器不产生或向外辐射能量。它们完全是通过检测物体发出或反射的红外辐射来工作的。他们不检测或测量热量。

TPA81 是一个热电堆阵列(Thermopile Array),检测波长在2-22μm之间的红外线。这是辐射热的波长。热释电传感器(Pyro-electric Sensor),通常用于防盗报警,打开外部灯光,检测特定波段红外线。这些传感器只能检测热量的变化,因此它们为动作探测器。虽然在机器人技术中很有用,但它们的应用受到限制,因为它们不能检测和测量静态热源的温度。另一种类型的传感器是热电堆阵列。这些用于非接触式红外温度计。它们的探测角度或视场(FOV)非常宽,约为100°,需要遮挡物或透镜,或者通常两者都需要,来获得更加有效的视场,大约为12°。有些具有内置透镜。最近,一些热电堆阵列传感器,内置了电子元件和硅透镜,变得流行起来,像 TPA81 。TPA81 内有八个热电堆排列成一排,可以同时测量8个相邻点的温度,还可以使用伺服电机来控制模块去热成像。 TPA81 可以探测2米范围内的蜡烛火焰,并且不受环境光的影响。

红外传感器类似于只能看到温暖的东西的相机。所以 TPA81 是一个具有8像素分辨率的热成像仪,当然,人体总是散发热量的。现在,如果我们用一个控制器来控制红外传感器,并且为红外传感器定义一些手势,那么我们可以做一个简单的手势检测器。

在这个项目中,我们决定使用红外传感器和 Arduino 制作手势检测器。我们使用 TPA81 作为红外传感器,但是它有点贵,所以如果你想省钱,你可以使用8个 HC-SR505 作为红外传感器(不使用透镜)。 TPA81 支持 I2C 协议,与 Arduino Nano 兼容。这个炫酷的项目帮助你了解图像处理和手势检测的基础。我们开始吧。

电路

代码

对于第一个电路(使用 TPA81),你可以把代码复制到 Arduino IDE 中。但首先必须要添加库,然后再上传代码。

#include "Wire.h"

#include "TPA81.h"

// Create new TPA81 instance

TPA81 tpa;

void setup() {

Serial.begin(9600);

// You need to begin the Wire library to use TPA81 library

Wire.begin();

}

void loop() {

// Print temperature light

Serial.print(tpa.getAmbient());

Serial.print(" ");

// Print all temperature point

for (int i = 1; i <= 8; i++)

{

Serial.print(tpa.getPoint(i));

Serial.print(" ");

}

Serial.println(" ");

delay(100);

}

运行此代码后,打开 Arduino IDE 中的串口监视器,查看 TPA81 的8个阵列温度。每一行中的第一个数字是总温度。现在把你的手放在传感器前面,看看你身体的温度。要定义手势,你应该知道你的手的温度,并且把它设定为一个偏移量。我们把它设置为29度。上传下一个代码,然后把手放在传感器前移动。

#include "Wire.h"

#include "TPA81.h"

// Create new TPA81 instance

TPA81 tpa;

void setup() {

Serial.begin(9600);

// You need to begin the Wire library to use TPA81 library

Wire.begin();

}

void loop() {

// Print temperature light

Serial.print(tpa.getAmbient());

Serial.print(" ");

// Print all temperature point

for (int i = 1; i <= 8; i++) { if (tpa.getPoint(i)>29)

Serial.print("# ");

else

Serial.print(". ");

}

Serial.println(" ");

delay(100);

}

我们编写了一种算法来检测一个简单的手势,比如增加或减少播放器的音量。你可以复制下面的代码并尝试它。

密集恐惧症请远离

#include "Wire.h"

#include "TPA81.h"

#include "ssd1306.h"

#include "DHT.h"

// Create new TPA81 instance

TPA81 tpa;

#define VCCSTATE SSD1306_SWITCHCAPVCC

#define WIDTH 128

#define HEIGHT 64

#define PAGES 8

#define OLED_RST 9

#define OLED_DC 8

#define OLED_CS 10

#define SPI_MOSI 11 /* connect to the DIN pin of OLED */

#define SPI_SCK 13

uint8_t oled_buf[WIDTH * HEIGHT / 8];

int gesture[8][20];

int tgesture[8];

int sum=0;

int sflag; // standby flag

int gcount;

int c;

int ex;

int vol=5;

const uint8_t v1 [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x0c, 0x31, 0xc6, 0x0c, 0x61, 0x86, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x0c, 0x67, 0xe6, 0x0c, 0x61, 0x86, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x06, 0x66, 0x36, 0x0c, 0x61, 0xce, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x06, 0x6c, 0x36, 0x0c, 0x61, 0xce, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x06, 0x6c, 0x36, 0x0c, 0x61, 0xce, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x06, 0x4c, 0x36, 0x0c, 0x61, 0xb6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x02, 0xcc, 0x36, 0x0c, 0x61, 0xb6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x03, 0xc6, 0x36, 0x06, 0x61, 0xb6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x03, 0x87, 0xe7, 0xe7, 0xe1, 0x86, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x01, 0x81, 0xc7, 0xe3, 0x81, 0x86, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x38, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x78, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0xf8, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0xf9, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf9, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xf8, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x0f, 0xf9, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0xf8, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x38, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

// 文章过长,此处有删减,完整代码请访问 https://zhangyue.xin/Articles/Content/63 以获得更好的阅读体验

void dsply(int input){

int n1,n2;

if (input<10){ SSD1306_char3216(10, 25, '0', oled_buf);

switch(input)

{ case 0 : SSD1306_char3216(26, 25, '0', oled_buf); break;

case 1 : SSD1306_char3216(26, 25, '1', oled_buf); break;

case 2 : SSD1306_char3216(26, 25, '2', oled_buf); break;

case 3 : SSD1306_char3216(26, 25, '3', oled_buf); break;

case 4 : SSD1306_char3216(26, 25, '4', oled_buf); break;

case 5 : SSD1306_char3216(26, 25, '5', oled_buf); break;

case 6 : SSD1306_char3216(26, 25, '6', oled_buf); break;

case 7 : SSD1306_char3216(26, 25, '7', oled_buf); break;

case 8 : SSD1306_char3216(26, 25, '8', oled_buf); break;

case 9 : SSD1306_char3216(26, 25, '9', oled_buf); break; } }

else

{ n1=input/10;

n2=input%10;

switch(n1) {

case 0 : SSD1306_char3216(10, 25, '0', oled_buf); break;

case 1 : SSD1306_char3216(10, 25, '1', oled_buf); break;

case 2 : SSD1306_char3216(10, 25, '2', oled_buf); break;

case 3 : SSD1306_char3216(10, 25, '3', oled_buf); break;

case 4 : SSD1306_char3216(10, 25, '4', oled_buf); break;

case 5 : SSD1306_char3216(10, 25, '5', oled_buf); break;

case 6 : SSD1306_char3216(10, 25, '6', oled_buf); break;

case 7 : SSD1306_char3216(10, 25, '7', oled_buf); break;

case 8 : SSD1306_char3216(10, 25, '8', oled_buf); break;

case 9 : SSD1306_char3216(10, 25, '9', oled_buf); break; }

switch(n2) {

case 0 : SSD1306_char3216(26, 25, '0', oled_buf); break;

case 1 : SSD1306_char3216(26, 25, '1', oled_buf); break;

case 2 : SSD1306_char3216(26, 25, '2', oled_buf); break;

case 3 : SSD1306_char3216(26, 25, '3', oled_buf); break;

case 4 : SSD1306_char3216(26, 25, '4', oled_buf); break;

case 5 : SSD1306_char3216(26, 25, '5', oled_buf); break;

case 6 : SSD1306_char3216(26, 25, '6', oled_buf); break;

case 7 : SSD1306_char3216(26, 25, '7', oled_buf); break;

case 8 : SSD1306_char3216(26, 25, '8', oled_buf); break;

case 9 : SSD1306_char3216(26, 25, '9', oled_buf); break; }

} }

void setup() {

Serial.begin(9600);

Wire.begin();

SSD1306_begin();

SSD1306_clear(oled_buf);

}

void loop() {

for (int i = 0; i <= 7; i++) // reading 8 pixel { if (tpa.getPoint(i)>29)

{Serial.print("#");

Serial.print(" ");

gesture[i][0]=1;}

else

{Serial.print(".");

Serial.print(" ");

gesture[i][0]=0;}

}

for (int y = 0; y<=7; y++){sum+=gesture[y][0];} Serial.println(sum); // sum of 8 pixel

Serial.println(" ");delay(100); // speed of reading

//////////////////////////////////////////////////////////////////////////////////////standby

if (sum==8){sflag=1; Serial.println("standby");}

else {sum=0;}

//////////////////////////////////////////////////////////////////////////////////////progress

if (sflag==1 && sum!=8){

Serial.println("start gesture");

gcount=0;

c=0;

sum=0;

while (sum<8)

{sum=0;

for (int i = 0; i <= 7; i++) { if (tpa.getPoint(i)>29)

{Serial.print("#");

Serial.print(" ");

gesture[i][gcount]=1;}

else

{Serial.print(".");

Serial.print(" ");

gesture[i][gcount]=0;}

}

for (int y = 0; y<=7; y++) {sum+=gesture[y][gcount];delay(5);} // sum of 8 pixel

Serial.println(" "); delay(50); // speed of reading

gcount++; // lentgh of gesture

}

Serial.print("sum : "); Serial.println(sum);

Serial.print("lentgh of gesture : "); Serial.println(gcount);

delay(5);

for (int c=0; c<=7; c++){

for (int z=0; z<=gcount; z++)

{tgesture[c]+=gesture[c][z];delay(5);}

Serial.println("processing");}

tgesture[0]+= tgesture[1];

tgesture[2]+= tgesture[3];

tgesture[4]+= tgesture[5];

tgesture[6]+= tgesture[7];

tgesture[0]+= tgesture[2];

tgesture[4]+= tgesture[6];

if (tgesture[0]<tgesture[4])

{ vol+=(gcount/2); Serial.print("volume up");}

if (tgesture[4]<tgesture[0])

{vol-=(gcount/2); Serial.print("volume down");}

sflag=0;

}

sum=0;

SSD1306_clear(oled_buf);

switch (vol)

{ case 1 : SSD1306_bitmap(0, 0,v1, 128, 64, oled_buf); break;

case 2 : SSD1306_bitmap(0, 0,v2, 128, 64, oled_buf); break;

case 3 : SSD1306_bitmap(0, 0,v3, 128, 64, oled_buf); break;

case 4 : SSD1306_bitmap(0, 0,v4, 128, 64, oled_buf); break;

case 5 : SSD1306_bitmap(0, 0,v5, 128, 64, oled_buf); break;

case 6 : SSD1306_bitmap(0, 0,v6, 128, 64, oled_buf); break;

case 7 : SSD1306_bitmap(0, 0,v7, 128, 64, oled_buf); break;

case 8 : SSD1306_bitmap(0, 0,v8, 128, 64, oled_buf); break;

case 9 : SSD1306_bitmap(0, 0,v9, 128, 64, oled_buf); break;

case 10 : SSD1306_bitmap(0, 0,v10, 128, 64, oled_buf); break;

case 11 : SSD1306_bitmap(0, 0,v11, 128, 64, oled_buf); break; }

SSD1306_display(oled_buf);

}

下一步是什么?

使用上述方法,你可以扩展代码以检测其他手势然后定义命令,以便在检测到这些动作和手势时执行某些任务。

从“芯”而论 浅谈数码相机传感器进化史

“芯”,指的是物体的中心部分,也可以指物体的核心,比如“芯片”;对于数码相机来说,最核心的部分自然是相机的传感器。相机行业发展已有百余年,但数码相机出现不过三四十年,而真正进入民用领域仅有二十余年。但是这二十年,凭借着微电子技术的快速发展,不管是相机传感器还是相机处理器都经历了飞速的发展,特别是相机传感器部分。从湿板到正片再到负片,每一次进步都需要几十年甚至更长时间,但是从CCD到CMOS不过二十余年时间。究竟数码相机是如何进化的,画幅真的是从小到大吗,今天我们就来简单聊一聊数码相机的“芯”历史。

·从全画幅起家 再重新回归全画幅

数码相机发展时间虽然短,但是对于大部分消费者来说,接触数码单反或者数码无反其实也不会有太多年头,真要说2000年左右的事情,如果您还历历在目那么您一定是暴露了年龄了。很多朋友都有一个错误的认知,数码相机的画幅是从小到大发展的,从这10年看的确不错,大家从APS-C开始到全画幅,从1/2.3英寸卡片机再到1英寸。但是从整个发展尺度来看,数码相机的画幅,是由小到大,再到小,现阶段再次变大的过程。

传感器画幅大小,经历了从小到大,再到小,然后再到大的过程

最初的数码相机,可以追溯到上世纪七八十年代,第一台数码相机产自柯达,仅仅可以拍摄8万像素的黑白图象,仅仅是一个试验品,第一台真正意义的数码相机诞生于1981年,说出来可能不信,这台数码相机是索尼生产的,型号为Mavica。

世界上第一台数码相机是柯达的试验品,像素只有8万像素

之后的近20年,出现了诸多数码相机的试验品,也包括了苹果的Quick Take 100。富士,尼康,柯达,卡西欧,索尼,理光,佳能等等都在这段时间推出了尝试性的产品,这一阶段,大家的产品长的千奇百怪,存储介质也是五花八门,从CF卡到硬盘到卡带,或者是3.5英寸软盘,无奇不有。

之后二十余年涉及数码相机的厂商非常多,产品更是五花八门,图为苹果QuickTake 100

不过在这20年内,民用数码相机都是以家用机的形式出现,虽然长的千奇百怪,但是用现在的话说,无非就是卡片机。直到1991年柯达推出了首款数码单反相机,型号为DSC-100,搭载一枚14.3×9mm(大概跟现在1英寸画幅差不多)的CCD传感器,像素为130万像素,这是现代数码相机的鼻祖。但是直到2000年前后,佳能和尼康才推出真正意义的自产数码单反。

第一台数码单反是柯达DSC-100是用尼康F3为基础设计的,传感器不过现在1英寸相机大小

第一台数码相机的画幅,在现在看也就是个卡片机,在当时来看由于高昂的售价和复杂的存储,也没有引起太大的轰动。在1999年佳能推出了第一款数码单反D2000,而尼康则是在2000年推出了D1,也都是采用APS-C或者更小画幅。但是2001年,康泰时推出了第一台全画幅数码单反相机 N DIGITAL,第一次把数码全画幅这个概念呈现在了人们眼前。可惜的是,由于CCD工艺复杂,制作全画幅几乎是天工之作,因此康泰时N DIGITAL不仅售价极高而且供货稀少跳票多月,最后也落得了不了了之的下场。

2001年康泰时推出了N DIGITAL这款全画幅,但是结局并不好

其实从康泰时N DIGITAL开始,数码相机实现了第一轮的循环,从小画幅到全画幅的过程。但是康泰时N DIGITAL的悲惨结局,并没有让所有厂商对于全画幅都充满信心。这也导致了第二个过程,就是很多尝试了全画幅原型机的厂商重新回归小底,包括柯达、尼康、富士等等。

·“APS-C决胜论” 尼康带着大家走弯路

从康泰时N Digital开始,其实很多数码厂商都认为,APS-C画幅才是数码相机的最佳画幅,最典型的代表就是当时的尼康派系,也就是以现在的尼康为主导的一系列厂商,包括了尼康、当时的老大哥柯达,以及富士等等。尼康在2000-2004年,疯狂的推出了多款D1系列,D2系列,曾经一年推出多款单反,主打高像素、高连拍等诸多领域,但是画幅方面依然是APS-C画幅。

尼康在D1和D2时代,不断推出APS-C机型,把那个时代的APS-C画幅发挥到了极致,2003年的D2H就搭载了Wi-Fi,也算是超前了时代

在画幅竞赛中,真正的赢家是佳能。面对尼康派系(那个年代美能达将死不活,索尼还没有插足高端数码相机的竞争,奥林巴斯专注于43系统,而宾得,宾得是什么?)的疯狂进攻,佳能虽然在在2000年推出了D30企图用CMOS应对尼康诸多单反,但是那个年代CMOS还不成熟,画质远不及CCD,因此也就作罢。但是2002年佳能另辟蹊径,推出了第一款真正可以用于民用的数码全画幅单反1DS,数码单反的全画幅时代就此拉开帷幕。

佳能1DS,第一台真正可以用于民用的全画幅,当然,这是价格上

虽然佳能已经推出多款数码全画幅单反,但是尼康却不为所动,一心认为“APS-C画幅才是最佳的数码画幅”。这个理念也影响很多厂商很多年,至今仍然可以看到很多厂商仍然没有进军或者刚刚进军全画幅领域。不过佳能相机越卖越好,特别是5D与1DS双系列夹击,尼康在F6之后彻底转行进入数码行业,在比佳能晚了6年之后,推出了第一款全画幅单反D3。虽然晚了6年,但是不得不说D3在2007年打了一次漂亮的翻身仗,只可惜这一次的胜利没持续多久,5D2就再一次击败D700,让佳能奠定了数码相机的领先地位。

尼康在靠着第一台全画幅D3打了翻身仗,但这时候已经是2007年,第二年佳能5D2问世,结果如何相信大家都非常清楚

可以说从2000年左右数码相机走上民用市场,到2007年尼康第一台全画幅单反问世。佳能的成功其实有着一定的巧合,也有这尼康、富士、柯达、美能达等等的不争气。究竟这几年,剩下的厂商在干什么,下一页我们继续聊。

·其他厂商在做啥 索尼成就刷机狂魔

说了这么多,其实数码相机厂商还有很多,其他厂商都在做什么?柯达和康泰时作为曾经的巨头,基本上死在了数码相机民用化的第一股浪潮上,但是奥林巴斯却一直在不断努力,在数码相机初期有着非常不错的表现。奥林巴斯在曾经推出E系列,主打43画幅,同样是单反系统,但是更加轻巧。不过在画幅竞争中,43画幅逐渐败给了APS-C和全画幅,因此奥林巴斯的43系统一度销声匿迹。近些年才和松下一起,在M43画幅的无反领域重新杀出了一席之地。

奥林巴斯早在2004年就推出了43画幅单反E-1,但是可惜受到当时APS-C顶峰论影响,奥林巴斯没有选择更大画幅

另外如今的大厂,索尼。其实索尼在数码相机早期,虽然卡片机做的有姿有色,但是高端相机领域一直没有踏足。索尼并没有高端单反相机的制作基础,因此索尼最大的目标是收购美能达,毕竟这时候的美能达虽然仍有雄厚的技术实力,但是公司财务上已经是风雨飘摇。在经历了数年的收购历程后,2006年索尼终于如愿以偿,也开始了索尼大法的刷机狂魔之旅。

刷机狂魔索尼在2006-2010年推出了23数码单反,这个记录实在是难以超越,图为索尼第一款全画幅数码单反,A900

索尼从2006年开始,疯狂推出α系列单反相机,从最初的a100,一直到2010年最后一款数码单反a580,索尼在四年多时间内发布了23款数码单反相机,而且包括a900、a700、a850等全画幅产品,现在看依然是最强悍的刷机狂魔。从2010年开始,索尼不再生产数码单反,改为两线尝试。A33和A55开启了单电的尝试,而NEX 3和NEX5则开启了微单时代。事实证明,索尼的这一步豪赌,微单系列取得了巨大的胜利。

无反相机不是索尼首创,第一台是松下G1,但是索尼的确把无反相机发扬光大了

当然,事后的事情大家就比较清楚了,2013年索尼第一次推出A7系列,从推出就备受好评,全画幅的高画质加上微单的轻巧便携,也注定了索尼在无反领域的行业老大地位。

·从CCD到CMOS 成本决定一切

其实我们说了很多关于相机画幅发展的历史,相机传感器发展的另外一方面,则是从CCD到CMOS的进步。说到CCD,如果您身边有五六十岁,从2000年左右开始使用数码相机的朋友,一定会接触到一个概念:“CCD的画质,特别是色彩,远比CMOS好”。这是,这一点没错。

CCD画质有多好,可以看到近两年专业中画幅后背才换用CMOS,而且不是全部更换(图中三款相机,索尼A900为CMOS,适马SD1为X3,而IQ180为CCD)

CCD和CMOS,本质上是传感器工艺的不同。简单来说,CCD的感光元件,每行的像素点都只使用一个“放大器”来进行处理,而CMOS则是每个像素都有一个单独的放大器。因此CCD上,从像素点来看,用于感光的区域要远大于CMOS,毕竟CMOS上还要集成许多复杂的电路,所以CCD的画质,的确比CMOS好。

如下图所示,CCD传感器中每一行中每一个象素的电荷数据都会依次传送到下一个象素中,由最底端部分输出,再经由传感器边缘的放大器进行放大输出;而在CMOS传感器中,每个象素都会邻接一个放大器及A/D转换电路,用类似内存电路的方式将数据输出。

左图为CCD电路输出示意图,右图为CMOS示意图

但是CCD有两个天生的缺陷,一个是速度慢,毕竟一个处理器要处理上个个像素点的信息,运算量和发热量是不言而喻的,而且发热量巨大的,导致CCD的热噪普遍很高。另外一个是生产成本高,其实这源自于品控问题,一旦CCD有问题,就是成片的像素出问题,除了作废没有别的办法(很多老相机会有坏掉一条线,就是CCD出问题后整行像素报废),而CMOS出现坏点,之后要不是太多,算法屏蔽就是了。

因为CCD成本高,良品率低,而且速度慢高感差,不能适应高速拍摄需要。所以,随着CMOS工艺的进步,CMOS取代CCD是历史的必然。2001年,佳能推出了D30,是第一台采用CMOS的单反相机。但是当时CMOS的画质还不足与抗衡CCD,所以并没有巨大反响。但是到了2002年,佳能推出1DS,虽然之前已经有几款全画幅数码单反,但是用CCD制造一块全画幅,成本极高,因此并没有得到用户认可。而佳能1DS使用了CMOS之后,售价真正进入了民用能接受的范围,因此CMOS的天下,从此开始。虽然CCD依然有着画质优势,但是到了2007年左右,CCD的保有量已经很少,2010年之后,几乎在没有CCD的135产品。

佳能D30是第一台CMOS画幅的单反,而第一台可以用于市场销售的全画幅1DS,同样是CMOS,从而让价格快速下降

其实可以看到,从CCD成熟应用,再到CMOS全面崛起,不超过十年时间。为何CCD到CMOS的迭代进行的如此快速,以至于即便是CMOS的画质不如CCD,CCD仍然被快速淘汰。根本原因在于“成本与价值”。CMOS价格便宜,足以让数码相机普及,而另一方面,CMOS具有高速性能,在那个时代,体育摄影决定了厂商的使用取向,因此从这一点来说,具备高速拍摄性能的CMOS,无疑从属性上就碾压了CCD。

·未来尽是变数 但全画幅仍是主流

我们聊了这么久,说的都是专业相机,从单反到如今无反,大部分机型都是高端机型,即便是入门款,售价也在数千元。我们无法预测长久的未来,相机会以何种形态出现,但是在暂时的三年五年的范围内,我们还是可以对数码相机领域做出较为精准的判断。

现在来看,中画幅这两年发展迅速,但是要是进入大众市场,还为时太早

在未来,从画幅领域来说,更大画幅依然是更吃香。但是中画幅的普及必然是缓慢的,不会像当年全画幅代替APS-C一样来的这么快。因为全画幅替代APS-C,相机的体积和重量在本质上没有变化,但是中画幅由于画幅尺寸、法兰距等等诸多因素,即便是富士GFX、哈苏X1D等等,体积和售价依然昂贵,而且更新周期长,不会再五年十年内替代全画幅产品。因此现阶段,相机画幅依然朝着全画幅方向发展,这是必然的。

全画幅在未来很长时间,依然是主流

另一方面,虽然相机在朝着全画幅发展,但是如今画质的需求已经并不过于强烈。2400万像素的APS-C画幅对于家用来说不仅够用而且绰绰有余。因此相机发展正朝着另一个方向发展,那就是视频化。从2008年佳能5D2推出全高清视频到如今,相机视频发展飞速,4K已经基本普及,未来的视频发展,将会想着更高帧率更高码流发展,从这个维度来说,M43这些小底相机,有着逆势追上的潜质。

对于家用来说,如今的新机器基本都够用

从根本来说,如今的相机竞争已经陷入白热化。厂商的竞争早已过了靠技术吸引消费者的时代,大家拼的是相机的综合配套服务,从相机到镜头,从拍照到视频,从产品到销售。从这个层面来说,或许在未来,真正高速发展的,或许是无反相机,是APS-C/M43画幅或者一英寸。而全画幅则更像一种终极目标,面向越来越专业的人群,而家用用户,则会想着轻量化和便携化的角度不断倾斜。

未来充满变数,视频领域异军突起,但是全画幅仍然是当下的主流

今天说了这么多,其实是让大家对于数码相机的传感器发展有一个新的认知。或许今天的东西说的比较笼统,大家如果有兴趣,可以仔细上网搜索研究一下,也可以在文章下面留言提问,笔者也将第一时间解答大家的疑惑。

相关问答

os-214立象标签打印机打印 一行 之后出现很多行空白的?

没测出纸来.首先要把标签纸安装对了.它是居左安装的.把纸推到最左边.面对打印机的左手边.然后打印一个测试页.如果正常哪就说明没有问题了.如果还是不好.有可...

电子秤不归零,只显示 一行 LLLLLLLLLLL?

1、电子秤的传感器接头,有掉线的,重新接好。2、重新标定一下。3、传感器更换一个。1、电子秤的传感器接头,有掉线的,重新接好。2、重新标定一下。3、传感...

故障码p0132的解决方法

[回答]故障代码p0132的中文意思是氧传感器电路电压高。该故障代码代表氧传感器的电路故障。汽车中氧传感器的作用是检测发动机中的氧含量,并通过氧含量修...

SCOP是什么意思 – 960化工网问答

请输入正确格式的CAS号(一行一个)960化工网化工问答问答详情SCOP是什么意思...自耦合光传感器;以上结果来自金山词霸例句:1.Ineedamplifymyvocabu...

相机清洁感应器有用么?-ZOL问答

也许丶该流一行泪°1、照片上有黑点,有两种情况,一是传感器坏点,二是传感器污点(灰尘);2、传感器坏点检测方式:盖住镜头该手动对焦拍摄一张全黑的RAW格...

如何排除故障码P0137如何排除故障码P0137

[回答]故障代码:P0137详细描述如下:故障的系统范围:燃油或空气适用车型:所有汽车制造商(查成交价|参配|优惠政策)。氧传感器电路电压低(第一排的传感器2)...

计算器上的on/c键是什么键 - m59wNOyU 的回答 - 懂得

电子计算器上的ON/C建为开关键,ON表示开,C为Close的缩写表示关闭。电子计算器是一种小型的手持或桌面的设备,用于完成数学计算。一般的数学电子计算...

肺功能仪器的流量 传感器 头要怎么消毒 – 960化工网问答

(一行一个)960化工网化工问答问答详情肺功能仪器的流量传感器头要怎么消毒网友1最佳答案回答者:网友高温消毒后放在酒精里。具体得咨询专家,仅为参考。空气流量...

印刷机工作中断电?

考虑到光电传感器中发光二极管也是电源的负载,所...按照先易后难的检修原则,首先检查信号电缆的连接情况,发现信号电缆与主机连接处的螺钉未旋紧,接头倾斜。...

【根据工作原理将扫描仪分为四大类】作业帮

[回答]通用针式打印机通用针式打印机是早期使用十分广泛的汉字打印设备,打印头针数普遍为24针,有宽行和窄行两种,打印头在金属杆上来回滑动完成横向行式...

展开全部内容