Čas a teplota na oled displeji
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Cílem projektu Smart Car, je Arduino platforma a dva krokové motory, které se řídí podle ultrazvukového senzoru.Pokud senzor detekuje překážku ve stanovené vzdálenosti, Arduino provede odpovídající akci, například zastaví vozítko nebo změní jeho směr, aby se vyhnulo kolizi. Tento projekt umožní studentům a nadšencům získat praktické zkušenosti s programováním, řízením motorů a prací se senzory v reálných podmínkách, čímž přispěje k rozvoji jejich znalostí v oblasti robotiky a automatizace.
#include <AccelStepper.h> // Definice pinů pro krokové motory #define motor1Pin1 2 #define motor1Pin2 3 #define motor1Pin3 4 #define motor1Pin4 5 #define motor2Pin1 6 #define motor2Pin2 7 #define motor2Pin3 8 #define motor2Pin4 9 // Definice pinů pro ultrazvukový senzor #define trigPin 10 #define echoPin 11 // Rychlost a akcelerace motorů #define MOTOR_SPEED 900 // Rychlost motorů (v krocích za sekundu) #define MOTOR_ACCEL 200 // Akcelerace motorů // Definice vzdálenosti překážky (v cm) #define OBSTACLE_DISTANCE 4 // Inicializace motorů AccelStepper motor1(AccelStepper::FULL4WIRE, motor1Pin1, motor1Pin2, motor1Pin3, motor1Pin4); AccelStepper motor2(AccelStepper::FULL4WIRE, motor2Pin1, motor2Pin2, motor2Pin3, motor2Pin4); // Funkce pro měření vzdálenosti pomocí ultrazvukového senzoru long measureDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); long distance = duration * 0.034 / 2; // Převod na centimetry return distance; } // Nastavení pro krokové motory void setupMotors() { motor1.setMaxSpeed(MOTOR_SPEED); motor1.setAcceleration(MOTOR_ACCEL); motor1.moveTo(-10000); // Pohyb dopředu motor2.setMaxSpeed(MOTOR_SPEED); motor2.setAcceleration(MOTOR_ACCEL); motor2.moveTo(10000); // Pohyb dopředu } void setup() { // Inicializace motorů a senzorů setupMotors(); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { // Měření vzdálenosti long distance = measureDistance(); Serial.println(distance); // Pokud je před překážkou, popojeď dozadu a otoč se if (distance < OBSTACLE_DISTANCE) { // Zastavení motorů motor1.stop(); motor2.stop(); // Krátký pohyb dozadu motor1.move(-600); motor2.move(-600); while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) { motor1.run(); motor2.run(); } // Otočení o X stupňů (přibližně, podle krokového motoru uprav kroky) motor1.move(50); // Jeden motor jede dopředu motor2.move(-50); // Druhý motor jede dozadu while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) { motor1.run(); motor2.run(); } // Po otočení se zase rozjedeme dopředu motor1.moveTo(10000); motor2.moveTo(10000); } // Normální jízda dopředu motor1.run(); motor2.run(); }
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Kamarád mi poprosil o pomoc s tím že v současnosti potřebuje v jednom projektu ovládat čtyři reléové moduly, kdy jeden obsahuje šestnáct relátek které zakoupil v [1] a již má hotovou část zapojení přípravku, s tím že časem by chtěl ovládání z PC „po otestování“, ovládat diody pomocí tabletu nebo chytrého telefonu. Na tento počet ovládání relé je potřeba 64 ovládacích pinů, což ani ARDUINO MEGA 2560 s potřebou dalších vstupů které budou potřeba není možné použít. Po návrzích s posuvnými registry kterých by bylo potřeba osm kusů a složitosti zapojení mi napadlo použít pásek NEOPIXEL s RGB led diodami kdy na ovládání stačí jeden výstup z ARDUINA. Tak že pro pokusy co a jak půjde použít, jsem použil modul relátek osazený dvěma relátky, modul s MOSFET tranzistorem, Neopixel pásek s osmi RGB led diodami WS2812B, fototranzistor GL5528 a bluetooth JDY-33 pro komunikaci s tabletem chytrým telefonem vše zakoupené v [1]. Napsané programy jsou celkem dva jeden pouze pro ovládání Neopixel s osmi RGB led diodami, druhý pak umožňuje ovládat maximálně 255 RGB led použitých v Neopixel pásku. Oba programy umožňují ovládat libovolnou RGB diodu nebo více RGB led diod na Neopixel pásku včetně barev a dají se upravit dle potřeby. Přípravek může posloužit při vlastních pokusech s RGB LED Neopixel pásky a zároveň doplňuje články v [2]. Ovládání RGB diod je zde řešeno s ARDUINO NANO je možné použít i ARDUINO UNO. Programové ovládání RGB led diod na Neopixel pásku je dle požadavků kamaráda.