13장 빛의세기에따른 광합성 속도변화
13장 빛의 세기에따른 광합성 속도 변화
지구 초기의 대기중 산소는 폭발적으로 발생한 광합성에 의해 공급되였다. 현재로는 지구의 허파라고 불리는 아마존 밀림 지역에서 많은 산소를 내뿜고 있습니다. 산소는 식물내의 반응인 광합성에 의해서 생깁니다. 그렇다면 광합성은 어떤 과정에 의해서 산소를 생성할까?
광합성은 식물 세포내의 엽록체에서 일어 납니다
| 빛
6Co2 + 6H2O -----> C6H12O6 +6O2
이산화탄소+물 ------> 포도당 +산소
식물이 광합성을 하는 이유는 포도당을 얻기 위한 활동이다.
어떤 세균에서는
6Co2 +6H2S ----> C6H12O6 +12S
이산화탄소 + 황화수소 ---> 포도당 + 황
이 세균은 광합성의 산물로 포도당과 황이 나온다. 그렇다면 H2O 와 H2S는 어떤 목적으로 광합성에 쓰일까? 광합성 반응은 빛 에너지에 의해 들뜬 전자를 사용하여 포도당을 생산 하는데 이때 전자를 제공하는 물질이 식물에서는 물이, 세균에서는 황화수소가 들뜬 전자 역할을 담당하게 된다.
광합성은 크게 두가지 반응으로 나누는데 명반응과 암반응이 그것입니다.
명반응은 광계1 과 광계2 두 개의 광계가 작용합니다.광께 1은 700나노메타 파장의 빛을 잘 흡수하고 광계2는 680나노메타 파장의 빛을 잘 흡수합니다.
빛의 세기에따른 광합서의 속도의 변화를 실헙해보도록 합니다.
실험계획
1. 빛의 세기에 따른 광합성 --> 2.센서를 통한 CO2, O2농도측정 -->3.ZigBee통신을 이용한 테이타송수신 -->테이타 처리 및 해석
광합성 반응식에따라 광합성이 진행될 때 이산화탄소가 반응물로 작용합니다. 따라서 광합성이 이루어 질 때마다 이산화탄소가 소모됨으로 외부와의 기체 교환이 없다면 이산화탄소는 계속 감소 할 것입니다. 이때 우리는 농도 변화를 이산화탄소 측정기로 측정하여 광합성 속도를 파악할수 있습니다.
준비물: 아두이오 우노-2개 zig Bee안테나-2개 이산화탄소 센서(K-30)-1개이상 조도센서 스텐드, 큰수조 투명한수조 실험에 사용할 식물(시금치)
수신용 아두이노2
#include <SoftwareSerial.h>
SoftwareSerial ZigBee(2, 3);
int data1, data2, temp, seq = 0;
void setup(){
Serial.begin(9600);
ZigBee.begin(9600);
}
void loop(){
if(ZigBee.available()) {
data1 = ZigBee.parseInt(); //이산화탄소 농도 값
data2 = ZigBee.parseInt(); //조도센서 값
if(data1 > data2) {
int temp = data2;
data2 = data1;
data1 = temp;
}
if(data1 != 0 && data2 != 0) {
Serial.print(seq);
Serial.print(",");
Serial.print(data1);
Serial.print(",");
Serial.println(data2 % 20000);
}
seq++; //실험시간을 계산하기위함
}
}
측정용 아두이노1
#include "SoftwareSerial.h"
SoftwareSerial K_30_Serial(12, 13); //이산화탄소 시리얼
SoftwareSerial Zigbee(2, 3); //지그비의 시리얼통신
byte readCO2[] = { 0xFE, 0X44, 0X00, 0X08, 0X02, 0X9F, 0X25 };
byte response[] = { 0, 0, 0, 0, 0, 0, 0 };
int valMultiplier = 1;
void setup() {
Zigbee.begin(9600); //지그비시리얼 통신 열기
Serial.begin(9600); //모니터시리얼
K_30_Serial.begin(9600); //센선시리얼 열기
}
void loop() {
K_30_Serial.listen();
sendRequest(readCO2);
int valCO2 = getValue(response);
int brightness = analogRead(A0);
Serial.print("Co2 ppm = ");
Serial.println(valCO2);
Serial.print("Brigthness = ");
Serial.println(brightness);
Serial.println();
Zigbee.listen();
Zigbee.println(valCO2);
Zigbee.println(20000 + brightness);
delay(10000);
}
void sendRequest(byte packet[]) {
while(!K_30_Serial.available()) {
K_30_Serial.write(readCO2, 7);
delay(50);
}
int timeout = 0;
while(K_30_Serial.available() < 7) {
timeout++;
if(timeout > 10){
while(K_30_Serial.available())
K_30_Serial.read();
break;
}
delay(50);
}
for(int i = 0; i < 7; i++) {
response[i] = K_30_Serial.read();
}
}
unsigned long getValue(byte packet[]) {
int high = packet[3];
int low = packet[4];
unsigned long val = high * 256 + low;
return val* valMultiplier;
}
조도 세기 값에 20,000을 더하는 이유는 지그비 통신을 할 때 수신기 쪽에서 조도 세기 값 과 이산화탄소 농도 값을 구분하기 위함입니다. 이런 방법도 잇습니다
if(valCO2 >20000) ValCo2 =19999; 를 중간에 추가하면 조도세기와 이산화탄소 농도측정 값을 구분할 수 있습니다. 딜레이10초를 한 이유는 센서 가뵤을 10초마다 한번씩 갱신하기 위함입니다.