Teach Pelajaran dengan makmal jarak jauh

Pelajaran Teach

STM32 dengan API Arduino (4/4): pengawal mini

Pelajar menggabungkan input potensiometer, keputusan, keluaran RGB dan bukti Serial untuk membina pengawal mini STM32 Arduino yang padat.

  • STM32 Nucleo (Arduino)
  • 60 min
  • Tingkatan 4–5 / pengenalan elektronik vokasional
  • ms-MY
  • Embedded systems
STM32 Nucleo (Arduino)
STM32 Nucleo (Arduino)

Hasil pembelajaran

  • Mereka bentuk pengawal mini dengan input, keputusan, keluaran dan mod manual.

  • Memilih dan mewajarkan ambang berdasarkan bacaan sebenar.

  • Menguji ketiga-tiga cabang keputusan dan menyampaikan hasilnya.

Pratonton aktiviti pelajar

Kandungan aktiviti

Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.

1

Fahami cabaran dan rancang ujian

10 min

Pengawal mini anda akan mempunyai tiga keadaan:

- Potensiometer di bawah ambang: warna hijau.
- Potensiometer pada atau melebihi ambang: warna merah.
- Butang ditekan: warna biru, walaupun potensiometer menyatakan sesuatu yang lain.

Cabarannya bukan sekadar menyalin atur cara. Pada akhir aktiviti, anda sepatutnya
mempunyai pengawal mini yang telah diuji: pengawal itu membaca input, menentukan keadaan,
menukar LED RGB, merekod bukti melalui Serial dan mengandungi satu penambahbaikan kecil
yang boleh anda pertahankan.

Sebelum mengatur cara, fikir seolah-olah anda sedang menguji produk kecil. Ujian yang baik
perlu menyatakan perkara yang akan anda ubah, warna yang dijangka dan data Serial yang
akan mengesahkan bahawa pengawal membuat keputusan yang betul.

Atur cara pemula akan mencetak baris tepat dalam bentuk ini:
state=<green/red/manual> pot1=<bacaan ADC> button=<released/pressed>.

Tulis tiga baris berasingan, satu untuk setiap kes. Gunakan format ini:
Kes N | RGB dijangka: ... | Serial: state=... button=...

Lengkapkan satu baris untuk setiap situasi:

1. B1 dilepaskan dan potensiometer di bawah ambang.
2. B1 dilepaskan dan potensiometer pada atau di atas ambang.
3. B1 ditekan dan ditahan, dengan potensiometer pada atau di atas ambang.

2

Bina dan semak pengawal mini

27 min

Fungsi setRgb(red, green, blue) mengelakkan pengulangan tiga baris setiap kali
anda menukar warna. Setiap argumen mewakili nilai kecerahan PWM daripada 0 hingga 255.
Ambang awal ialah 600 kiraan ADC, tetapi anda mesti membandingkannya dengan bacaan sebenar.

bool menyimpan true atau false. Oleh sebab butang 1 aktif pada aras LOW, pemboleh ubah Boolean
buttonPressed menjadi benar apabila bacaan ialah LOW. if / else if / else
menyemak cabang dari atas ke bawah dan menjalankan cabang benar yang pertama sahaja, jadi
syarat manual mesti diutamakan. const char* state menyimpan label teks pendek
untuk Serial; anda tidak perlu menukar sintaks itu.

Anda akan menyalin atur cara pemula, mengujinya dan melaraskannya. Hasil akhir sepatutnya
menjadi pengawal kecil tetapi lengkap: ia membaca POT_1, membuat keputusan menggunakan
THRESHOLD, membenarkan mod manual melalui BUTTON_1, menukar LED RGB dan mencetak
keadaan yang dipilih melalui Serial.

Input dan keluaran yang digunakan oleh pengawal mini

Peta input dan keluaran: potensiometer pot1 dibaca pada PC0 dan butang B1 pada PC5 menjadi input kepada main.ino, yang mengawal keluaran RGB pada PA8, PA9 dan PA10.

Susunan makmal jarak jauh telah siap berwayar. Peta ini hanya menunjukkan dua input dan
tiga saluran RGB yang digunakan dalam cabaran ini; tiada perubahan pendawaian diperlukan.

  1. Lancarkan makmal STM32 Arduino daripada blok ini. Dalam CodeIDE, buka main.ino dan tampalkan atur cara pemula di bawah.

  2. Gantikan TODO 1 dengan ungkapan Boolean benar hanya apabila mod manual diminta. Gantikan TODO 2 dengan perbandingan benar apabila bacaan ADC berada pada atau melebihi ambang. Cari TODO; tiada TODO boleh tertinggal.

  3. Simpan, pilih Compile dan tunggu pengesahan berjaya. Kemudian pilih Upload dan tunggu sehingga papan sebenar menerima atur cara awal.

  4. Buka konsol Serial CodeIDE pada 115200 baud. Tunggu baris state=... pot1=... button=... berulang.

  5. Ujian 1 — keadaan automatik rendah: lepaskan B1 dan letakkan Pot. pot1 kira-kira satu pertiga sepanjang julatnya. Salin bacaan ADC dan lengkapkan baris kedudukan bawah, B1 dilepaskan.

  6. Ujian 2 — keadaan automatik tinggi: pastikan B1 dilepaskan dan letakkan Pot. pot1 kira-kira dua pertiga sepanjang julatnya. Salin bacaan ADC dan lengkapkan baris kedudukan atas, B1 dilepaskan.

  7. Ujian 3 — kawalan manual: kekalkan potensiometer pada kedudukan atas, tekan dan tahan B1 sehingga Serial melaporkan keadaan manual, kemudian lepaskannya dan lengkapkan baris kedudukan atas, B1 ditahan. Ujian ini mengesahkan bahawa butang mempunyai keutamaan.

  8. Lengkapkan tiga baris pertama jadual. Dalam soalan tepat di bawah jadual, kira titik tengah yang dibundarkan bagi dua bacaan ADC ketika butang dilepaskan; titik tengah itu ialah ambang yang ditentukur bagi pusat julat kawalan pilihan anda.

#include <Arduino.h>

const int POT_1 = PC0;
const int BUTTON_1 = PC5;  // Aktif pada aras LOW
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;

const int THRESHOLD = 600;

void setRgb(int red, int green, int blue) {
  analogWrite(RGB_RED, red);
  analogWrite(RGB_GREEN, green);
  analogWrite(RGB_BLUE, blue);
}

void setup() {
  pinMode(BUTTON_1, INPUT);
  pinMode(RGB_RED, OUTPUT);
  pinMode(RGB_GREEN, OUTPUT);
  pinMode(RGB_BLUE, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  int reading = analogRead(POT_1);
  bool buttonPressed = digitalRead(BUTTON_1) == LOW;
  const char* state;

  if (TODO_MANUAL_CONDITION) { // TODO 1: benar hanya apabila mod manual diminta
    setRgb(0, 0, 255);
    state = "manual";
  } else if (TODO_HIGH_CONDITION) { // TODO 2: membaca pada atau melebihi ambang
    setRgb(255, 0, 0);
    state = "red";
  } else {
    setRgb(0, 180, 0);
    state = "green";
  }

  Serial.print("state=");
  Serial.print(state);
  Serial.print(" pot1=");
  Serial.print(reading);
  Serial.print(" button=");
  if (buttonPressed) {
    Serial.println("pressed");
  } else {
    Serial.println("released");
  }

  delay(100);
}

Gunakan enam baris dalam jadual. Baris 1 hingga 3 mendokumenkan atur cara awal dan mesti
dilengkapkan sebelum pengubahsuaian. Baris 4 hingga 6 mengulangi tiga kes ujian yang sama
selepas penentukuran dan penambahbaikan diagnostik. Setiap baris mesti menghubungkan input,
keputusan dan bukti perkakasan sebenar:

- Baris 1 dan 4: B1 dilepaskan, potensiometer pada kedudukan penentukuran bawah.
- Baris 2 dan 5: B1 dilepaskan, potensiometer pada kedudukan penentukuran atas.
- Baris 3 dan 6: B1 ditahan pada kedudukan penentukuran atas.
- Dalam Nilai yang dilihat pada Serial, salin anggaran state, pot1 dan button.
- Dalam baris yang dipertingkatkan juga salin medan margin baharu. Buat semula setiap kedudukan dalam lingkungan kira-kira 30 kiraan ADC daripada bacaan awalnya.

Versi Ujian Nilai yang dilihat pada Serial (pot1 dalam kiraan ADC) Ambang kiraan ADC Keluaran yang dijangkakan Keluaran yang diperhatikan Keputusan

Gunakan dua baris penentukuran dengan butang dilepaskan untuk mengira (bacaan bawah + bacaan atas) / 2, kemudian bundarkan kepada kiraan ADC integer. Nyatakan kedua-dua bacaan, pengiraan anda dan ambang akhir yang ditentukur. Jangan ubah THRESHOLD sebelum pengiraan ini ditulis.

3

Tentukur dan tambah diagnostik

15 min

Gantikan 600 dalam THRESHOLD dengan titik tengah yang telah dibundarkan. Kemudian tambah
diagnostik Serial tepat selepas nilai pot1 dicetak: cetak margin= diikuti
reading - THRESHOLD. Margin negatif bermakna bacaan berada di bawah ambang yang ditentukur;
sifar atau margin positif bermakna pada atau di atasnya.

Simpan, kompil, muat naik dan buka semula Serial pada 115200 baud. Ulang tiga kes ujian
yang sama dan isi baris 4 hingga 6 bagi versi ditambah baik. Diagnostik hanya berguna jika
keadaan yang kelihatan, state dan tanda margin sepadan; mod manual masih perlu mendapat
keutamaan walaupun margin positif.

Nyatakan ambang yang ditentukur dan dua arahan Serial baharu. Kemudian gunakan baris 4 hingga 6 untuk menunjukkan bahawa margin negatif dan positif sepadan dengan cabang automatik, manakala kawalan manual masih mempunyai keutamaan.

4

Bentangkan pengawal

8 min

Serahkan main.ino akhir anda

Simpan main.ino sebelum melampirkannya. Tangkapan mesti menunjukkan pengawal mini
akhir, dengan ambang yang ditentukur, keluaran Serial margin dan tiada token TODO.

Bentangkan pengawal mini dalam 4 hingga 6 ayat: nyatakan tujuan dan inputnya; ringkaskan tiga keputusan dan keluaran; sebutkan hasil enam ujian; terangkan perkara yang ditunjukkan oleh tanda margin; dan namakan satu batasan yang realistik.