حسگر سطح مخزن آب یک دامداری در ورامین دو هفته روی میز بیعیب کار کرد و چهار روز بعد از نصب روی مخزن از کار افتاد. کد در تمام این مدت درست بود. یک مدار پیام خطا نمیدهد، و به همین دلیل روش کار اینجا اندازه گرفتن است نه استدلال کردن: هر ادعایی درباره یک مدار یا یک عدد روی مولتیمتر دارد یا حدس است.
این موضوع چهار پله دارد و بیشتر آدمها از پله سوم وارد میشوند، چون پله سوم همان است که یک زبان برنامهنویسی رویش هست. پله اول و دوم شبیه تئوری به نظر میرسند و در عمل چهار عددند که هر روز به کار میآیند، و رد کردنشان یعنی برد بیصدا میمیرد و کسی نمیداند چرا.
سه رابطهای که همه چیز از آنها درمیآید
قانون اهم: ولت برابر است با آمپر ضرب در اهم، و اندازه هر مقاومتی را همین تعیین میکند. یک نمونه که همان روز اول لازم میشود: یک الایدی نشانگر روی تغذیه ۵ ولت که خودش حدود ۲ ولت افت دارد و ۱۰ میلیآمپر میخواهد. اختلاف ۳ ولت روی مقاومت میافتد، و ۳ تقسیم بر ۰٫۰۱ میشود ۳۰۰ اهم، پس نزدیکترین مقدار استاندارد یعنی ۳۳۰ اهم گذاشته میشود. همین یک حساب، بدون هیچ ابزاری، تفاوت میان یک الایدی و یک الایدی سوخته است.
یک پایه میکروکنترلر فقط چند ده میلیآمپر میدهد، و یک رله یا موتور آمپر میخواهد. دیتاشیت ESP32 برای هر پایه حدود ۴۰ میلیآمپر میگوید و بوبین رلهای که روی مخزن ورامین بود حدود ۷۰ میلیآمپر میکشید. رله وصل شده بود مستقیم به پایه، روی میز هم کار میکرد، چون منبع تغذیه میز جا داشت. روی مخزن هر بار که پمپ وصل میشد ولتاژ میافتاد و برد راهاندازی دوباره میشد، و در لاگ چیزی جز یک شروع تازه دیده نمیشد. جواب یک ترانزیستور میان پایه و رله است و یک دیود موازی بوبین، که جهش ولتاژ لحظه قطع را میگیرد.
ورودی شناور هرچه نزدیکش باشد را میخواند، پس پایه بیاستفاده پولآپ یا پولداون میخواهد. سیم شناور مخزن کنار کابل پمپ کشیده شده بود و پایهای که به آن وصل بود هیچ مقاومت بالاکشندهای نداشت؛ نتیجهاش این بود که هر بار پمپ کار میکرد حسگر «مخزن پر» گزارش میداد. روی میز این اتفاق نمیافتاد چون کابل پمپی در کار نبود. درستش یک مقاومت ۱۰ کیلواهم به تغذیه است، یا همان مقاومت داخلی خود میکروکنترلر که با یک کلمه در تنظیم پایه روشن میشود.
وقتی روی قطعه چیزی نوشته نشده
اینجا یک فرض هم اضافه میشود که در متنهای انگلیسی گرفته شده است. برد کلون و ماژول بینشان یعنی دیتاشیت یک فرض است، نه یک واقعیت. بردی که از بازار خریده میشود اغلب نسخه کپی همان طرح است با قطعههای ارزانتر، و ماژول تبدیل ولتاژی که رویش نوشته سه آمپر میدهد ممکن است زیر یک آمپر داغ کند و بیفتد. این نه شکایت است و نه دلیلی برای نخریدن، چون همان بازار است که این کار را اینجا ارزان نگه داشته؛ فقط یعنی ترتیب کار عوض میشود.
ترتیب عوضشده این است: هر قطعه پیش از رفتن به مدار یک بار اندازه گرفته میشود. مولتیمتر روی حالت میلیآمپر مصرف را میگوید، و بودجه باتری از همان عدد درمیآید، و همین یک اندازهگیری پیش از نصب، چهار روز رفت و آمد به ورامین را حذف میکرد. ماژول تغذیه را زیر بار واقعی بگذارید و ولتاژ خروجی را همان لحظه بخوانید؛ افتی که زیر بار پیدا میشود روی میز خالی هیچوقت دیده نمیشود. مبانی، و چهار عددی که هر روز به کار میآیند همین پله اول است، و مدارها، و ساختنشان روی برد بورد پله دوم.
از میز تا مخزن
فاصله میان نمونهای که کار میکند و چیزی که یک فصل دوام میآورد، فاصله الکترونیکی نیست. سختی مدار در تمام این مسیر تقریبا ثابت میماند و آنچه عوض میشود جنس پرسشهاست: از برقی به مکانیکی و شیمیایی. اولین چیزی که میرسد بودجه توان است، چون از لحظهای که دستگاه روی باتری میرود هر مصرف دائمی یک مهلت میشود. روی مخزن ورامین جواب این بود که ماژول فاصلهسنج فقط هنگام خواندن برق بگیرد، که در هر دقیقه ۲۰ میلیثانیه است، و بقیه وقت کاملا قطع باشد. بعد از آن نوبت آببندی و اتصالهاست، که همان جایی است که پروژههای کارکرده معمولا گم میشوند: لحیمی که داخل ساختمان بیعیب بود، بیرون و کنار آب، دو ماهه اکسید میشود.
از میز تا مخزن
نمونهای که کار میکند چقدر با چیزی که بیرون دوام میآورد فاصله دارد
جای هرکدام بر اساس این است که چقدر از کار باقیمانده فیزیکی است و نه الکترونیکی. یک داوری، همینجا، از روی یک حسگر مخزن.
بر اساس چیزی که حسگر ورامین را خواباند و چیزی که برای هر مرحله باید عوض میشد. نشانهای است، نه اندازهگیریشده.
- روی میز درست میخواندجایی که پروژه حس میکند تمام شده، و دو هفته آزمون هم همین را گفت
- روی باتری خودش کار میکندبودجه توان میرسد، و هر مصرف دائمی یک مهلت میشود
- آببند و با اتصال درسترطوبت، و لحیمهایی که داخل ساختمان بیعیب بودند
- چهار ماه کنار آب دوام میآوردماژول فقط هنگام خواندن برق میگیرد، که در هر دقیقه ۲۰ میلیثانیه است
درباره سختی الکترونیک چیزی نمیگوید، که در هر چهار مرحله تقریبا ثابت است. آنچه عوض میشود این است که پرسشها از برقی بودن درمیآیند و مکانیکی و شیمیایی میشوند.
جایی که کار میایستد
ایست اینجا این است که کد جواب میدهد و همین آدم را گمراه میکند. کسی که از برنامهنویسی میآید سراغ خرابی میرود و کد را میخواند، چون کد چیزی است که میشود خواندش، و مدار چیزی است که فقط میشود اندازهاش گرفت. تمام چهار روز مخزن ورامین صرف خواندن دوباره یک برنامه درست شد. جملهای که این ایست را باز میکند کوتاه است: پیش از هر تغییری در کد، ولتاژ تغذیه را زیر همان شرایطی که خرابی رخ میدهد اندازه بگیرید؛ اگر آن عدد زیر بار میافتد، هیچ تغییری در کد برش نمیگرداند.
ایست دوم خرید است و اینجا شکل ویژهای دارد. قطعهها را میشود از بازار داخلی و به قیمت کم گرفت، اما مجموعههای آماده و کیتهای آموزشی که در آموزشهای خارجی نام برده میشوند اغلب یا نمیرسند یا با چند برابر قیمت میرسند. عملا یعنی طرحی که به یک ماژول خاص گره خورده باشد ممکن است اصلا قابل ساختن نباشد، و طرحی که با قطعههای عمومی نوشته شده هست. همین یک ملاحظه در انتخاب پروژه اول، بیشتر از هر مهارتی تعیین میکند که کسی ادامه میدهد یا نه.
چه چیزی امروز باز میشود
ESP32 چند ده هزار تومان است و بیسیم و بلوتوث را روی خود تراشه دارد؛ جای بردهای قبلی را گرفت که برای همین کار به یک ماژول جدا نیاز داشتند، و زنجیره ابزارش رایگان است. Arduino هم در سختافزار و هم در نرمافزار متنباز و رایگان است و جای شروع کردن از میکروکنترلر خام با یک پروگرامر و یک دیتاشیت را گرفت؛ ارزشش کتابخانهها نیست، این است که اولین برنامه در ده دقیقه اجرا میشود و از آنجا به بعد میشود چیزها را اندازه گرفت. میکروکنترلرها، و برنامهای که روی خود قطعه اجرا میشود از همینجا شروع میشود.
برای طراحی برد، KiCad رایگان و متنباز است و جای نسخههای رایگان بستههای تجاری را گرفت که اندازه برد را محدود میکردند. لازم نیست از روز اول سراغش رفت، اما اولین باری که یک طرح از برد بورد بیرون میآید همین است که آن را به یک چیز تکرارپذیر تبدیل میکند. فرستادن داده همان حسگر به جایی که خوانده شود، موضوع دستگاههای متصل، و دادهای که میفرستند است، و مسیری که آن داده طی میکند در رساندن داده از یک دستگاه به دستگاه دیگر کشیده شده.
پرسشی که بعد از این میماند این است که وقتی همان برد یک کامپیوتر کامل شد و سیستمعامل داشت، کدامیک از این عادتها به کار میآید و کدام نه. خود دستگاه، و کار نگه داشتنش همانجاست که مولتیمتر هنوز کار میکند و لاگ هم اضافه میشود، و ماشینهایی که به درخواستها جواب میدهند جایی است که داده این حسگرها بالاخره مینشیند، و کامپیوتر، شبکه، و زیرساختی که زیر بقیه نشسته ترتیب رسیدن از این پله به آن دو را میدهد.