Mikrokontrolery Arduino i micro:bit, czujniki, proste programy sterujace
ð Podstawa programowa: II.2Robotyka to interdyscyplinarna dziedzina laczaca informatyke, elektronike i mechanike. Zajmuje sie projektowaniem, budowa i programowaniem robotow - urzadzen zdolnych do wykonywania zadan w sposob autonomiczny lub polautonomiczny. Wspolczesne roboty sa wszechobecne: od robotow przemyslowych w fabrykach, przez odkurzacze automatyczne, po drony i pojazdy autonomiczne.
Arduino to popularna platforma mikrokontrolerowa typu open-source. Sklada sie z plyty z procesorem oraz srodowiska programistycznego (Arduino IDE). Jest idealna do nauki, poniewaz jest tania, ma ogromna spolecznosc i mnóstwo materialow edukacyjnych.
// Przyklad Arduino - miganie dioda LED
// (jezyk oparty na C/C++)
void setup() {
pinMode(13, OUTPUT); // pin 13 jako wyjscie
}
void loop() {
digitalWrite(13, HIGH); // wlacz LED
delay(1000); // czekaj 1 sekunde
digitalWrite(13, LOW); // wylacz LED
delay(1000); // czekaj 1 sekunde
}
// Przyklad z czujnikiem temperatury
void loop() {
int odczyt = analogRead(A0);
float napiecie = odczyt * 5.0 / 1023.0;
float temperatura = napiecie * 100.0;
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" C");
if (temperatura > 30) {
digitalWrite(8, HIGH); // wlacz wentylator
} else {
digitalWrite(8, LOW); // wylacz wentylator
}
delay(2000);
}
micro:bit to miniaturowy komputer edukacyjny opracowany przez BBC. Posiada wbudowane: wyswietlacz LED 5x5, dwa przyciski, czujnik ruchu (akcelerometr), kompas, Bluetooth, czujnik temperatury. Mozna go programowac w Pythonie (MicroPython), JavaScript lub blokach.
# Przyklad micro:bit - MicroPython
from microbit import *
# Wyswietlanie tekstu
display.scroll("Witaj!")
# Reagowanie na przyciski
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
display.show(Image.SAD)
else:
display.show(Image.HEART)
sleep(100)
# Czujnik temperatury
while True:
temp = temperature()
display.scroll(str(temp) + "C")
sleep(5000)
# Akcelerometr - wykrywanie wstrzasow
while True:
if accelerometer.was_gesture("shake"):
display.show(Image.SURPRISED)
sleep(1000)
display.clear()
Jesli nie mamy fizycznych urzadzen, mozemy korzystac z symulatorow online:
W symulatorze Tinkercad Circuits stworz uklad z trzema diodami LED (czerwona, zolta, zielona) i zaprogramuj sekwencje sygnalizacji swietlnej: zielony (5s) -> zolty (2s) -> czerwony (5s) -> zolty (1s) -> zielony...
// Arduino - Sygnalizacja swietlna
const int CZERWONA = 13;
const int ZOLTA = 12;
const int ZIELONA = 11;
void setup() {
pinMode(CZERWONA, OUTPUT);
pinMode(ZOLTA, OUTPUT);
pinMode(ZIELONA, OUTPUT);
}
void loop() {
// Zielone
digitalWrite(ZIELONA, HIGH);
delay(5000);
digitalWrite(ZIELONA, LOW);
// Zolte
digitalWrite(ZOLTA, HIGH);
delay(2000);
digitalWrite(ZOLTA, LOW);
// Czerwone
digitalWrite(CZERWONA, HIGH);
delay(5000);
digitalWrite(CZERWONA, LOW);
// Zolte (krotkie przed zielonym)
digitalWrite(ZOLTA, HIGH);
delay(1000);
digitalWrite(ZOLTA, LOW);
}
Napisz program dla micro:bit (mozesz uzyc symulatora online), ktory: wyswietla temperature co 3 sekundy, pokazuje usmiechnieta buzie gdy temp < 25C, smutna gdy > 30C, i mruga wyswietlaczem gdy > 35C (alarm).
# MicroPython dla micro:bit
from microbit import *
while True:
temp = temperature()
display.scroll(str(temp))
if temp > 35:
# Alarm - mruganie
for i in range(5):
display.show(Image.SKULL)
sleep(300)
display.clear()
sleep(300)
elif temp > 30:
display.show(Image.SAD)
else:
display.show(Image.HAPPY)
sleep(3000)
Zaprojektuj na papierze (lub w edytorze) koncepcje prostego robota do wybranego zadania (np. robot podlewajacy kwiaty). Okresl: jakie czujniki potrzebuje, jakie elementy wykonawcze, jaki algorytm sterowania (schemat blokowy).
PROJEKT: Robot podlewajacy kwiaty
CZUJNIKI:
- Czujnik wilgotnosci gleby (analogowy)
- Czujnik poziomu wody w zbiorniku
- Zegar RTC (real-time clock)
ELEMENTY WYKONAWCZE:
- Pompa wodna (mala, 5V)
- Dioda LED (status)
- Buzzer (alarm braku wody)
ALGORYTM (pseudokod):
1. Co 1 godzine:
a. Odczytaj wilgotnosc gleby
b. Jesli wilgotnosc < 30%:
- Sprawdz poziom wody
- Jesli woda dostepna:
* Wlacz pompe na 10 sekund
* Czekaj 5 minut
* Sprawdz ponownie wilgotnosc
- Jesli brak wody:
* Wlacz buzzer na 3 sekundy
* Zapal czerwona LED
c. Jesli wilgotnosc >= 30%:
- Zapal zielona LED
2. Powtorz
Zaprogramuj prosta gre na micro:bit: na wyswietlaczu 5x5 porusza sie "gracz" (jasny piksel) sterowany przechylaniem plyty (akcelerometr). Cel: zlapac losowo pojawiajacy sie "skarb" (drugi piksel). Licz punkty.
# MicroPython dla micro:bit - Gra "Zlapie skarb"
from microbit import *
import random
gracz_x = 2
gracz_y = 2
skarb_x = random.randint(0, 4)
skarb_y = random.randint(0, 4)
punkty = 0
while True:
# Odczyt akcelerometru
ax = accelerometer.get_x()
ay = accelerometer.get_y()
# Ruch gracza
if ax > 300 and gracz_x < 4:
gracz_x += 1
elif ax < -300 and gracz_x > 0:
gracz_x -= 1
if ay > 300 and gracz_y < 4:
gracz_y += 1
elif ay < -300 and gracz_y > 0:
gracz_y -= 1
# Sprawdz zlapanie skarbu
if gracz_x == skarb_x and gracz_y == skarb_y:
punkty += 1
display.scroll(str(punkty))
skarb_x = random.randint(0, 4)
skarb_y = random.randint(0, 4)
# Rysowanie
display.clear()
display.set_pixel(gracz_x, gracz_y, 9) # gracz jasny
display.set_pixel(skarb_x, skarb_y, 4) # skarb ciemniejszy
sleep(200)