はじめに
デフエンジニアの会 アドベントカレンダー 2023の第3日の記事です。
昔に海水魚飼育を始めたのだが、どうもうまくいかない。金魚は何年も飼えるのに、海水魚はなぜか数週間の命で終わってしまうのだった。
そこで大枚をはたいてオーバーフロー式大型水槽に切り替えて、クーラー、ヒーターだけでなく大きなろ過槽も接続して臨んだところ、混泳する魚の相性が悪くない限り、何年も飼育できるようになりました。
淡水よりも海水のほうが頻繁に水換えなどをして水質を良い状態に保つ工夫が必要なわけですが、その理屈がずっと解らないままでした。
発表資料との出会い
飼育を初めてかなり経った後に、ようやく海洋生物環境研究所に掲載されていた記事「マダイの卵及び仔稚魚のアンモニア耐性 」を発掘しました。そこにこんな数式が紹介されていました。
平たく言うと、生物の糞尿などで放出されたアンモニアは、水中ではイオン化されたアンモニア($NH_4^{+}$)とイオン化されていないアンモニア($NH_3$)が平衡状態で混在するのですが、$HN_3$の割合をこんな数式で計算できますよと。
Pythonでグラフを描いてみる
というわけで、前述の数式をPythonを使ってグラフを描くコードを書いてみました。
import numpy as np
import matplotlib.pyplot as plt
# 非イオン化アンモニアのアンモニウムイオンに対する割合(%)を求める関数
def cal_NH3_Percentage(T, pH):
n = 9.35 + 0.0324 * (298-T) - pH
return 100 / (1 + (10 ** n))
# 6~10の間を50個の等間隔で分割したpHを求める(定義域)
pH = np.linspace(6, 10, 50)
# 25℃をKに変換
T = 25 + 273.15
# グラフで描画
plt.xlabel('pH')
plt.ylabel('NH3(%)')
plt.grid(True)
plt.plot(pH, cal_NH3_Percentage(T, pH))
plt.show()
# 数値で出力
print('pH=7.0: NH3 {0:.5f} %'.format(cal_NH3_Percentage(T, 7.0)))
print('pH=8.5: NH3 {0:.5f} %'.format(cal_NH3_Percentage(T, 8.5)))
そのコードで描画したグラフが次のとおりです。
図1. 非イオン化アンモニアのアンモニウムイオンに対する割合
グラフからわかったこと
淡水はpH 7くらいで、海水はpH 8.5くらいです。グラフを見ると、pH 7付近では$NH_3$はほぼゼロであるのに対し、pH 8.5付近だと12%を超えることがわかります。
実はイオン化されていないアンモニア$NH_3$は毒性が非常に強く生体に大きなダメージを与えるわけですから、海水魚飼育の難しさがここで腑に落ちるように分かります。
海水水槽はpHが高いため、淡水水槽に比べてアンモニアをいかにして抑制できるかが肝要だというわけです。
生物の話なのかITの話なのかわからないような記事になってしまいましたが、ご海容をば…