Calliope Proportional-Fernsteuerung   

           
Elektronik-Labor   Projekte   Microbit 




Video: https://youtu.be/5bNZ0rkYNAQ

Mit einer Proportionalfernsteuerung kann man ein Modell mit beliebiger Geschwindigkeit und beliebiger Richtung steuern. Jeder der beiden Motoren kann stufenlos angesteuert werden. Meist verwendet man analoge Kreuzpotis mit einem gemeinsamen Steuerknüppel für diesen Zweck. Hier bietet sich jedoch eine andere Lösung an. Es wird der 3-Achsen-Beschleunigungssensor verwendet, sodass man die Steuerung über die Neigung des Senders beeinflussen kann:

Neigung nach oben: Vorwärts
Neigung nach rechts: Rechtskurve
Neigung nach links: Linkskurve

Der RC-Sender misst die Beschleunigung in x- und y-Richtung. Die Messwerte reichen jeweils bis ca. 1000 mG.  In einem mittleren Bereich bis 300 mG sollen die Motoren still stehen. Darüber hinaus werden sie linear zur Neigung gesteuert. Jeder Motor erhält so einen Steuerwert von 0% bis 99%. Beide Zahlen werden zu einer gemeinsamen Zahl zusammengefügt, sodass 9999 für Geradeausfahrt steht oder 9970 für eine Sanfte Kurve. Dieser kombinierte Zahlenwert wird dann an den Empfänger gesendet. Dort wird die Zahl wieder zerlegt, sodass beide Motoren getrennt gesteuert werden können. Mit etwas Übung lassen Fahrmodelle mit zwei Motoren allein über die Neigung der Platine feinfühlig steuern. Der Empfänger wurde mit einem separaten Programm realisiert, um Timing-Probleme zwischen Sender und Empfänger zu vermeiden. Der Empfänger bekommt die gesamte Rechenzeit um auf Daten vom Sender zu reagieren.

 
Der RCsender 


let M2 = 0
let M1 = 0
let Gy = 0
let Gx = 0
basic.forever(() => {
    Gx = input.acceleration(Dimension.X)
    Gy = input.acceleration(Dimension.Y)
    if (Gy < 300) {
        Gy = 0
    }
    M1 = 0
    M2 = 0
    if (Gx > 300) {
        M1 = Gx
    }
    if (Gx < -300) {
        M2 = Gx * -1
    }
    M1 = M1 + Gy
    M1 = M1 / 10
    M2 = M2 + Gy
    M2 = M2 / 10
    if (M1 > 99) {
        M1 = 99
    }
    if (M2 > 99) {
        M2 = 99
    }
    M2 = M2 * 100
    M2 = M2 + M1
    radio.sendNumber(M2)
    basic.pause(100)
})
radio.setGroup(15)
radio.setTransmitPower(7)


 

Der RCempfänger 


let Mo1 = 0
let t = 0
let Mo2 = 0
let D = 0
radio.onDataPacketReceived(({receivedNumber}) => {
    D = receivedNumber
    t = 0
})
basic.forever(() => {
    Mo2 = D / 100
    motors.dualMotorPower(Motor.A, Mo2)
    Mo1 = D % 100
    motors.dualMotorPower(Motor.B, Mo1)
    basic.pause(100)
    t = t + 1
    if (t > 2) {
        D = 0
    }
})
radio.setGroup(15)
radio.setTransmitPower(7)




Elektronik-Labor   Projekte   Microbit