Die Nummer 4 meiner BBC Micro:bit Basteleien ist nun bei Youtube Online. Das Video zeigt 2 Beispiele, wie man mit dem Micro:bit einen Motor steuern kann.
Im ersten Beispiel wird ein Schritt- (Stepper) Motor mit einem Zufallsgenerator gesteuert und im 2. Beispiel baue ich mir einen kleinen Ventilator mit einem DC Motor, der über Tastendruck ein- und ausgeschaltet wird.
Ich habe dazu eine Aufbau nach folgende, Schema gemacht.
Ein Breakout Board war notwendig, um eine saubere Schaltung zu bauen. Das wichtigste war der Treiberbaustein für den Steppermotor mit einem ULN 2003A und natürlich der Stepper Motor 28BYJ-48. Ein 6V Batterieblock hat dann die Schaltung mit Strom versorgt.
Das Programm mit dem Zufallsgenerator stammt von Jonathan Davies. Zum besseren Verständnis habe ich die Kommentare ins deutsche übersetzt und stelle den Code hier zur Verfügung.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Einfaches Schrittmotorsteuerungsprojekt für MICROBIT - von JONATHAN DAVIES - microbit.iwasp.eu | |
# Copyright 2017 iwasp.eu | |
from microbit import * | |
import random | |
port = [pin0, pin1, pin8, pin2] # Liste der zu verwendenden GPIO-Pins | |
t = 2 # Pausenzeit (Mikrosekunden) zwischen Motorschritten - kleiner Wert t, schnellere Motordrehung | |
# Zufallsbereich für die Anzahl der Motorschrittzyklen | |
rangeStart = 10 | |
rangeEnd = 300 | |
while (True): # unendliche Hauptschleife | |
cycle = random.randrange(rangeStart, rangeEnd) # Zufallszahl der auszuführenden Motorschrittzyklen erzeugen | |
while (cycle > 0): # Motorsequenz im Uhrzeigersinn - 4-Schritt-Zyklus | |
# Pins in korrektem Muster für jeden Schritt einschalten | |
# Zyklusmuster im Uhrzeigersinn - 1000,0100,0010,0001 | |
port[0].write_digital(1) | |
port[1].write_digital(0) | |
port[2].write_digital(0) | |
port[3].write_digital(0) | |
sleep(t) # Pause zwischen den Schritten | |
port[0].write_digital(0) | |
port[1].write_digital(1) | |
port[2].write_digital(0) | |
port[3].write_digital(0) | |
sleep(t) | |
port[0].write_digital(0) | |
port[1].write_digital(0) | |
port[2].write_digital(1) | |
port[3].write_digital(0) | |
sleep(t) | |
port[0].write_digital(0) | |
port[1].write_digital(0) | |
port[2].write_digital(0) | |
port[3].write_digital(1) | |
sleep(t) | |
cycle = cycle-1 | |
# wenn Null Zyklen erreicht sind, starten Sie die Sequenz gegen den Uhrzeigersinn | |
Cycle = random.randrange(rangeStart, rangeEnd) | |
while (cycle > 0): # Motorsequenz im Gegenuhrzeigersinn - 4-Schritt-Zyklus | |
# Zyklusmuster gegen den Uhrzeigersinn - 0001,0010,0100,1000 | |
port[0].write_digital(0) | |
port[1].write_digital(0) | |
port[2].write_digital(0) | |
port[3].write_digital(1) | |
sleep(t) # Pause zwischen den Schritten | |
port[0].write_digital(0) | |
port[1].write_digital(0) | |
port[2].write_digital(1) | |
port[3].write_digital(0) | |
sleep(t) | |
port[0].write_digital(0) | |
port[1].write_digital(1) | |
port[2].write_digital(0) | |
port[3].write_digital(0) | |
sleep(t) | |
port[0].write_digital(1) | |
port[1].write_digital(0) | |
port[2].write_digital(0) | |
port[3].write_digital(0) | |
sleep(t) | |
cycle = cycle-1 | |
# Hauptschleifenende |
Dann habe ich mit dem Ender 3Pro noch ein paar Halterungen für die Motore gedruckt. Und das ganze ohne Support. Sonst gibt es dabei nichts besonderes zu beachten, da kann ich auch auf die nähere Beschreibung verzichten.
Und alles weitere gibt es dann wieder in dem Video:
|