目標ppmへの希釈計算機
1000 ppmの原液から50 ppmの溶液を100 mL作るなら、原液5 mLに希釈液95 mLを加えます。2つの濃度と最終体積を入れるだけで、両方の量と希釈倍率が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 原液
- 1,000
- 目標ppm
- 50
- 最終体積
- 100
- 原液量
- 5
- 希釈液量
- 95
- 希釈倍率
- 20
- 等式
- stock_ppm · stock_volume = target_ppm · final_volume
指定したppm(百万分率)レベルの作業溶液を調製する場合、ほとんどの場合、より濃い原液から始めます。計算したアリコートの原液をメスフラスコに量り取り、希釈液で標線まで満たします。溶質質量の保存により、原液ppm×原液量=目標ppm×最終体積という積の恒等式が成り立つため、原液量は最終体積に目標ppmと原液ppmの比を掛けたものになります。希釈は濃度を下げることしかできず、上げることはできないからです。
原液ppm・目標ppm・最終体積の意味
調製は一貫した単位で記述してください。エンジンはppmをミリグラム毎リットル、モル濃度、パーセントに変換せず、ミリリットルをリットルにも変換しません。濃度の両側はppmのまま、体積の両側はお選びの一つの体積単位に揃えてください。
原液濃度は厳密に正である必要があります。ゼロの原液は溶質を供給できないからです。目標濃度は非負で、原液濃度を超えてはいけません。
目標が原液と等しい場合は、最終体積全体を原液として使い、希釈液ゼロという意味になります。最終体積は厳密に正である必要があります。体積ゼロのフラスコは物理的な調製ではないからです。
ネットワーク呼び出し、モデル、乱数シード、壁時計が経路上にないため、同一入力は常に同一出力を生みます。教室の例としては、千ppmの硝酸原液から百ミリリットルの五十ppm作業溶液を調製するのに必要なミリリットル数や、一万ppmの消毒濃縮液で五百ミリリットルのボトルを二百ppmに満たす量などがあります。
実験室での使い方と実際の注意点
宿題の確認、講義のデモ、素早いベンチ調製には、表計算の数式ライブラリーをインストールせずに、ブラウザー内の無料の目標ppmへの希釈計算機をご利用ください。逐次の多段階希釈は1回の呼び出し内の連鎖としてはモデル化されず、段階ごとに恒等式を1回実行してください。各段階は依然として同じ3入力の原液から目標への関係だからです。
ソース入力は他のKITのparse項目と同じ保持規則に従い、アルゴリズムは完全に決定論的な算術であるため、結果は継続的インテグレーションのフィクスチャーに安全に固定できます。技術者が紙の上で希釈積の恒等式を手で並べ替えるときに書くのと同じ列です。
活用例
ラボと培地キッチンの調製シート
技術者が原液ppm・目標ppm・フラスコ体積を入力すると、計算機はピペットで量り取る原液のミリリットル数と、定容前に加える希釈液を返します。
水耕栽培と消毒剤の投与
生産者や施設スタッフは、レシピ変更のたびにC1V1=C2V2を再導出せず、濃縮された養液や殺菌剤の原液を表示された作業ppmまで希釈します。
よくある質問
目標ppmが原液ppmより高い場合はどうなりますか?
希釈で濃度を上げることはできません。より高い目標に達するには、より濃い原液か別のプロセスが必要です。
目標ppmへの希釈計算機は無料ですか?
ブラウザーのツールはお使いのデバイスで無料で動作します。検証失敗は課金されません。
汎用のM1V1=M2V2ソルバーとの違いは何ですか?
この計算機は常に原液ppm・目標ppm・最終体積から原液量を解き、目標が原液を超える場合を明示的に拒否します。
ppmをmg/Lやモル濃度に換算してくれますか?
いいえ、換算はしません。2つの濃度はどちらもppmで、体積はどちらも同じ単位で入力してください。原液の量は、最終体積に使った単位のまま返ります。
目標濃度が原液と同じ場合はどうなりますか?
最終体積をすべて原液でまかない、希釈液は加えません。これは正しい計算結果です。受け付けないのは原液より高い目標だけで、希釈で濃度が上がることはないためです。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/chem/dilution-to-target-ppm \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"stock_ppm":1000,"target_ppm":50,"final_volume":100}'const res = await fetch("https://api.kit.forhosting.com/chem/dilution-to-target-ppm", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"stock_ppm": 1000,
"target_ppm": 50,
"final_volume": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/dilution-to-target-ppm",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"stock_ppm": 1000,
"target_ppm": 50,
"final_volume": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/dilution-to-target-ppm", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"stock_ppm":1000,"target_ppm":50,"final_volume":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"stock_ppm":1000,"target_ppm":50,"final_volume":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/dilution-to-target-ppm", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"stock_ppm": 1000,
"target_ppm": 50,
"final_volume": 100
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.dilution_to_target_ppm",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
この機能はこれら3つの数値を受け取り、決定論的な浮動小数点演算で原液量と補完的な希釈液量を返し、目標濃度が原液を超えるリクエストは拒否します。水耕栽培のレシピ、残留消毒剤の調製シート、環境校正標準、教育実習のラボでは、化学CASを埋め込まずに同じJSONをテストに固定できます。
原液ppm・目標ppm・最終体積の意味
stock_ppmとtarget_ppmはどちらも同じ溶質基準の百万分率(ppm)の濃度であり、final_volumeは標線まで満たす容器の定容体積です。必須の3フィールドを有限数または数値文字列としてJSONオブジェクトで送信してください。stock、C1、target、final_ppm、V2、target_volumeなどの文書化されたエイリアスも受け付けるため、クライアントコードは研究室の言葉で書けます。必須フィールドの空白、非有限値の送信、原液を超える目標の要求は、推測せずinvalid_inputで失敗します。
原液量・希釈液量・希釈倍率・チェックの読み方
成功時、レスポンスはstock_ppm、target_ppm、final_volumeをエコーし、安定した丸めの後にstock_volume=final_volume×target_ppm÷stock_ppmを報告します。diluent_volumeはfinal_volume−stock_volumeなので、調製シートは二次計算なしにピペット量と定容溶媒の両方を印刷できます。dilution_factorは目標が正の場合はstock_ppm÷target_ppm、目標がゼロの場合はnullとなり、クライアントが自前のUIでゼロ除算しないようにします。productフィールドは同じ丸めでstock_ppm×stock_volumeを報告し、equationは保存の恒等式を再掲し、checkはその丸めの下で積の両辺が一致する場合にtrueとなるため、UIコードは浮動小数点比較を再実装せずに緑の整合性バッジを表示できます。methodラベルは常にdilution_to_target_ppmなので、下流のルーターは形を推測せずに分岐できます。フォームがアリコートのセルだけを必要とする場合はstock_volume単独を、培地キッチンが溶媒行を印刷する場合はdiluent_volumeを、プロトコルが絶対体積の横に1対20の希釈を表記する場合はdilution_factorを使ってください。目標が原液を超えるなどの検証失敗は両方の濃度に言及するため、技術者はスタックトレースを読まずに入れ替わったフィールドを修正できます。ゼロまたは負の原液、負の目標、非正の最終体積もinvalid_inputを発生させ、エンジンがリクエストを拒否した後は課金されません。
APIの利用、料金、ラボのワークフロー、実務上の限界
stock_ppm、target_ppm、final_volumeを数値または数値文字列としてJSONボディで送信してください。LIMS連携、水耕栽培の投与アプリ、残留塩素プランナー、校正標準ジェネレーター、在庫システムがKIT残高で1成功件あたり$0.002の安定した契約を必要とする場合は、プリペイドAPIをご利用ください。検証失敗はエンジンがリクエストを拒否した後に残高を消費しません。原液量だけでなく任意の欠落フィールドを解く必要がある場合は汎用のM1V1=M2V2ソルバーと、次のステップが目標をモル毎リットルに変換することならppmからモル濃度へのヘルパーと組み合わせてください。SDKを出荷する作者は、3フィールドを「原液ppm」「目標ppm」「最終体積」のラベル付き入力にマッピングし、原液量を自動入力できます。
連携の活用例
宿題とLIMS連携
学生やスクリプトはppmの原液アリコート問題を検証し、構造化JSONを固定します。目標ppmが原液を超える場合は明確なエラーが返ります。
技術的な質問
目標ppmに対する原液量はどう計算しますか。
stock_ppm、target_ppm、final_volumeを含むJSONを送信してください。レスポンスはstock_volume=final_volume×target_ppm÷stock_ppmに加え、diluent_volumeと積のチェックを返します。
原液と最終の体積は同じ単位ですか。
はい。final_volumeと返されるstock_volumeは一貫した一つの単位(たとえば両方ミリリットル)に揃えてください。エンジンは体積単位の変換を行いません。