الدرس 14 · الوحدة 7: مفاهيم التفاعل مع المستشعرات والأجهزة الذكية
أنواع المستشعرات: الضوء والتسارع والموقع والكاميرا
خريطة المستشعرات واختيار الصحيح للمهمّة. ⏱ نحو 35 دقيقة.
بعد هذا الدرس ستستطيع أن:
- تصنّف المستشعرات (حركيّ، بيئيّ، موضعيّ، بصريّ، طاقة).
- تقرأ عدّة مستشعراتٍ في واجهةٍ واحدة.
- تختار المستشعر المناسب للمهمّة وتراعي الطاقة.
١خريطة المستشعرات
قبل أن نتعمّق في كلٍّ على حدة، لنرسم خريطةً شاملة. المستشعرات أنواع: حركيّة (تسارع، جيروسكوب)، وبيئيّة (ضوء، حرارة)، وموضعيّة (GPS، بوصلة)، وبصريّة (كاميرا):
| النوع | المستشعر | الوحدة | مثال تطبيق |
|---|---|---|---|
| حركيّ | التسارع Accelerometer | درجات/تسارع | ألعاب، عدّ خطوات |
| بيئيّ | الضوء Light | لَكس (lux) | سطوع تلقائيّ |
| موضعيّ | الموقع GPS | عرض/طول | خرائط، توصيل |
| بصريّ | الكاميرا Camera | صورة/فيديو | مسح QR، تصوير |
| طاقة | البطارية Battery | نسبة % | ترشيد الأداء |
٢لوحة قيادة: مستشعران معًا
تطبيقٌ قد يقرأ عدّة مستشعراتٍ في آنٍ واحد. هنا نجمع الضوء والإمالة في لوحةٍ واحدة. حرّك المنزلقين:
import { View, Text, StyleSheet } from 'react-native';import { useLight, useTilt } from 'smartdevice'; function Gauge({ label, value, unit }) { return ( <View style={styles.g}> <Text style={styles.lbl}>{label}</Text> <Text style={styles.val}>{value}{unit}</Text> </View> );} export default function App() { const light = useLight(); const { x, y } = useTilt(); return ( <View style={styles.row}> <Gauge label="الضوء" value={light} unit=" lux" /> <Gauge label="الإمالة x" value={x} unit="°" /> <Gauge label="الإمالة y" value={y} unit="°" /> </View> );} const styles = StyleSheet.create({ row: { flexDirection: 'row', gap: 8, padding: 12, justifyContent: 'center' }, g: { backgroundColor: '#FFF3E0', borderRadius: 12, padding: 12, alignItems: 'center', minWidth: 80 }, lbl: { color: '#666', fontSize: 13 }, val: { fontSize: 20, fontWeight: 'bold', color: '#E8820C', marginTop: 4 },});
مكوّن Gauge واحد يُعاد استخدامه لثلاث قراءات — props + مستشعرات.
٣اختيار المستشعر المناسب
المهارة ليست قراءة مستشعرٍ فحسب، بل اختيار الصحيح للمهمّة:
| تريد… | المستشعر الصحيح |
|---|---|
| معرفة إن كان الجهاز مستويًا | التسارع (الإمالة) |
| تعتيم الشاشة ليلًا | الضوء |
| عرض متاجر قريبة | الموقع GPS |
| مسح رمز QR | الكاميرا |
| تحذير «اشحن» | البطارية |
توقّع وتحقّق
وحدة قياس الضوء:
لمعرفة إن كان الجهاز مستويًا:
لعرض متاجر قريبة:
أكثر المستشعرات استهلاكًا للطاقة غالبًا:
الخلاصة
- المستشعرات أنواع بوحداتٍ مختلفة (درجات، لَكس، إحداثيّات).
- يمكن قراءة عدّة مستشعراتٍ معًا بخطّافاتٍ متعدّدة.
- اختر المناسب للمهمّة، واحذر استهلاك الطاقة (
GPS/الكاميرا).
تحدٍّ برمجي: لوحة مستشعرين
متوسطاعرض قراءتَي الضوء والإمالة معًا.
المطلوب:
- استورد
useLightوuseTilt. <Text testID="light">يعرض قيمة الضوء.<Text testID="tx">يعرض الإمالة x.
👀 اعرض الناتج المطلوب (وجرّبه)
✓ التحقق الآلي من حلّك:
- الكود يعمل بلا أخطاء في Console
- الضوء الابتدائيّ 70
- الإمالة x الابتدائيّة 0
- استُخدم useLight
- استُخدم useTilt
💡 تلميح 1
القيَم الابتدائيّة: ضوء 70، إمالة 0.
💡 تلميح 2
استورد الخطّافين معًا من smartdevice.
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
import { View, Text, StyleSheet } from 'react-native';import { useLight, useTilt } from 'smartdevice'; export default function App() { const light = useLight(); const { x } = useTilt(); return ( <View style={{ padding: 20, gap: 8 }}> <Text testID="light" style={styles.v}>الضوء: {light} lux</Text> <Text testID="tx" style={styles.v}>الإمالة x: {x}°</Text> </View> );} const styles = StyleSheet.create({ v: { fontSize: 18, fontWeight: 'bold', color: '#E8820C' } });