Seite 1 von 2

Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 11:27
von janko84
Hallo

Ich brauche dringend Hilfe, bin schon seit Tagen dran und weis nicht weiter.
Ich habe ein Raspberry pi mit einer Voice HAT Platine drauf, (AIY Voice Kit) .

Ich will 2 Motoren ansteuern, einmal beide laufen lassen, einmal Stop beide, einmal nur einen und einmal nur den anderen.

Wenn ich Start sage, laufen beide Motoren
Wenn ich stop sage , halten beide motoren an ( Wobei egal was ich sage, sie halten immer an)
dasist mal das eine Probelme, das andere , ich bings nicht fertig die einzeln anzusteuern.( Verkabelung ist ok, nur Programcode ist nicht gut)

Kann mir da jemand bitte helfen????

Hier der Code:

#!/usr/bin/env python3
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""A demo of the Google CloudSpeech recognizer."""

import aiy.audio
import aiy.cloudspeech
import aiy.voicehat
from gpiozero import PWMOutputDevice


def main():
recognizer = aiy.cloudspeech.get_recognizer()
recognizer.expect_phrase('Start')
recognizer.expect_phrase('Stop')
recognizer.expect_phrase('left')
recognizer.expect_phrase('right')

button = aiy.voicehat.get_button()
led = aiy.voicehat.get_led()
aiy.audio.get_recorder().start()

pwm4 = PWMOutputDevice(4)
pwm17 = PWMOutputDevice(17)
pwm27 = PWMOutputDevice(27)
pwm22 = PWMOutputDevice(22)

while True:
print('Drücke den Knopf und Spreche')
button.wait_for_press()
print('Höre zu...')
text = recognizer.recognize()
if text is None:
print('Sorry, Ich habe dich nicht gehöhrt')
else:
print('You said "', text, '"')
if 'Start' in text:
print('Motor fährt los')
pwm4.on()
pwm17.on()
elif 'off' or 'Stop' in text:
print('Motor haltet an')
pwm4.off()
pwm17.off()
elif 'right' or 'rechts' in text:
print('Motor geht nach rechts')
pwm4.on()
pwm17.off()
elif 'left' or 'links' in text:
print('Motor geht nach links')
pwm4.off()
pwm17.on()


if __name__ == '__main__':
main()

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 11:45
von janko84
Ich habe es geschafft.

Evtl. andere frage, wie mache ich nun eine Zeitbegrenzung von pwm.4 ?

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 11:50
von __deets__
Bitte setzt deinen Code in Python-Tags. Sonst ist dein Code nicht zu entziffern, da die Einrueckungen verloren gehen. Und wenn du das Problem geloest hast, aber dann weitere Aenderungen wuenschst, muessen wir natuerlich auch den aktuellen Stand kennen.

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 11:57
von janko84
Wie setzte ich den Code in Python Tgas?

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 12:02
von __blackjack__
@janko84: Im (vollständigen) Editor für Beiträge gibt es über dem Texteingabefeld eine Schaltfläche mit der Aufschrift „Python“. Damit fügt man die Tags ein. Zwischen die Tags kommt dann der Python-Quelltext.

Anmerkungen zum Code: `led`, `pwm27`, und `pwm22` werden definiert, aber nicht verwendet.

``'off' or 'Stop' in text`` macht nicht was Du denkst. Das ``or`` ist kein umgangssprachliches „oder“ sondern ein binärer Operator wie ``+`` oder ``*``. Der linke Operand ist ``'off'`` und der rechte Operand ist ``'Stop' in text``. Nichtleere Zeichenketten sind ”wahr”, also ist ``'off'`` ”wahr” und damit ist der Ausdruck *immer* wahr. Korrekt wäre ``'off' in text or 'Stop' in text``.

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 12:09
von janko84
Hier der Code der funktioniert:

Code: Alles auswählen

#!/usr/bin/env python3
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""A demo of the Google CloudSpeech recognizer."""

import aiy.audio
import aiy.cloudspeech
import aiy.voicehat
from gpiozero import PWMOutputDevice


def main():
    recognizer = aiy.cloudspeech.get_recognizer()
    recognizer.expect_phrase('Start')
    recognizer.expect_phrase('Stop')
    recognizer.expect_phrase('left')
    recognizer.expect_phrase('right')

    button = aiy.voicehat.get_button()
    led = aiy.voicehat.get_led()
    aiy.audio.get_recorder().start()

    pwm4 = PWMOutputDevice(4)
    pwm17 = PWMOutputDevice(17)
    pwm27 = PWMOutputDevice(27)
    pwm22 = PWMOutputDevice(22)

    while True:
        print('Drücke den Knopf und Spreche')
        button.wait_for_press()
        print('Höre zu...')
        text = recognizer.recognize()
        if text is None:
          print('Sorry, Ich habe dich nicht gehöhrt')
        else:
            print('You said "', text, '"')
            if 'Start' in text:
                print('Motor fährt los')
                pwm4.on()
                pwm17.on()
            elif 'off' or 'Stop' in text:
                print('Motor haltet an')
                pwm4.off()
                pwm17.off()
            elif 'right' in text:
                print('Motor geht nach rechts')
                pwm4.on()
                pwm17.off()
            elif 'left' in text:
                print('Motor geht nach links')
                pwm4.off()
                pwm17.on()
         
                
if __name__ == '__main__':
    main()

Jetzt will ich , das right und left jeweils nur 5 sekunden lang gehen und danach abschalten

etwas mit from time import sleep, aber weis nicht wie

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 12:11
von janko84
der pwm.22 und pwm.27 benutze ich nicht, haben keine funktion

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 12:16
von __blackjack__
@janko84: Nee, der Code funktioniert nicht, wegen dem ``or``. Du kommst da nie dazu „left“ oder „right“ zu sagen, bzw. wird das nie erkannt, weil davor immer die Bedingung beim ersten ``elif`` greift, weil die immer wahr ist, egal was für einen Wert `text` hat.

Was ist denn jetzt Dein konkretes Problem damit `sleep` aus dem `time`-Modul zu importieren und zu verwenden?

Das Du `pwm22` und `pwm27` nicht benutzt sieht man ja am Code, die Frage ist warum Du sie dann definierst. Gilt wie gesagt auch für `led`.

Re: Voice Hat Motorsteuerung

Verfasst: Mittwoch 27. Juni 2018, 14:38
von janko84
Ja sorry, hab den falschen code einkopiert, mein code hat keine or mehr, auch die pwm22 und pwm27 sind weg.

es geht mir jetzt nur noch um die zeitliche steuerung, sprich left und right jeweils nur 5 sekunden laufen lassen, danach stop. das ist alles.

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 10:27
von janko84
Hallo

Kann mir jemand betreffend Zeitsteuerung vom Motor weiterhelfen?

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 10:32
von __deets__
Du hast doch immer noch nicht deinen aktuellen Code einkopiert. Und was ist mit dem Vorschlag von __blackjack__, time.sleep zu benutzen? Hast du das mal ausprobiert?

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 14:01
von janko84
Hier mein code:

Code: Alles auswählen

#!/usr/bin/env python3
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""A demo of the Google CloudSpeech recognizer."""

import aiy.audio
import aiy.cloudspeech
import aiy.voicehat
from gpiozero import PWMOutputDevice
from time import sleep


def main():
    recognizer = aiy.cloudspeech.get_recognizer()
    recognizer.expect_phrase('Start')
    recognizer.expect_phrase('Stop')
    recognizer.expect_phrase('left')
    recognizer.expect_phrase('right')

    button = aiy.voicehat.get_button()
    led = aiy.voicehat.get_led()
    aiy.audio.get_recorder().start()

    pwm4 = PWMOutputDevice(4)
    pwm17 = PWMOutputDevice(17)

    while True:
        print('Drücke den Knopf und Spreche')
        button.wait_for_press()
        print('Höre zu...')
        text = recognizer.recognize()
        if text is None:
          print('Sorry, Ich habe dich nicht gehöhrt')
        else:
            print('You said "', text, '"')
            if 'Start' in text:
                print('Motor fährt los')
                pwm4.on()
                pwm17.on()
            elif 'Stop' in text:
                print('Motor haltet an')
                pwm4.off()
                pwm17.off()
            elif 'right' in text:
                print('Motor geht nach rechts')
                pwm4.on()
                pwm17.off()
            elif 'left' in text:
                print('Motor geht nach links')
                pwm4.off()
                pwm17.on()
         
                
if __name__ == '__main__':
    main()

Habe ch schon versucht, ghet aber nicht. Oben habe ich :

Code: Alles auswählen

from time import sleep

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 14:03
von __deets__
Und was heisst dann "geht nicht"? Explodiert etwas?

Du musst das sleep aufrufen. Hast du das getan?

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 14:13
von janko84

Code: Alles auswählen

            elif 'right' in text:
                print('Motor geht nach rechts')
                pwm4.on()
                sleep(5)
                pwm17.off()
            elif 'left' in text:
                print('Motor geht nach links')
                pwm4.off()
                pwm17.on()
                sleep(5)
das habe ich versucht, geht aber nicht

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 14:39
von pillmuncher
janko84 hat geschrieben: Donnerstag 28. Juni 2018, 14:13 [...] habe ich versucht, geht aber nicht
Dass es nicht geht, liegt daran, dass etwas nicht funktioniert.

PS: Wenn dir diese Antwort nicht hilft, überleg einmal, ob deine Art der Fragestellung viel hilfreicher ist.

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 14:55
von __blackjack__
@janko84: Was hättest Du denn erwartet was da passiert und warum?

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 15:14
von janko84
In dem Magpi Heft, wo die Motorensteuerung beschrieben wird, ist es so im code, nur leider geht es nicht. Aber wenn hier meine Fragestellung kritisiert wird, bin ich sehr wahrscheinlich auf mich allein gestellt.
Werde hier im Forum keine Fragen mehr stellen. Diese Kategorie kann geschlossen werden. Bye

Re: Voice Hat Motorsteuerung

Verfasst: Donnerstag 28. Juni 2018, 15:21
von __blackjack__
@janko84: Entweder ist es da so im Code, dann steht es falsch im Heft, oder es steht dort anders. Überleg doch mal was die einzelnen Anweisungen machen und welchen Effekt das jeweils hat.

Re: Voice Hat Motorsteuerung

Verfasst: Sonntag 1. Juli 2018, 14:52
von janko84
Ich habe verschiedenes versucht, wenn ich es so mache:

Code: Alles auswählen

from gpiozero import PWMOutputDevive
from time import sleep

pwm4 = PWMOutputDevice(4)
while True:
  pwm4.on()
  sleep(1)
  pwm4.off()
  sleep(1)
so funktioniert es, nach einer sekunde schaltet er ein und nach einer weiteren schaltet er wieder aus. und so weiter und so fort. ( Eine eigenständige datei, nicht in meinem Code )

Aber ich kreige es nicht hin, das es in meinem code funktioniert, bei links und rechts nach 5 sekunden ausschaltet.

Wenn ich links sage, muss der Motor anfangen zu drehen und nach 5 sekunden aufhöhren. genau das gleiche bei rechts.

Ich habe nur 2 Motoren (pwm4 und pwm17) .

Start pwm4.on() + pwm17.on()
Stop pwm4.off() + pwm17.off()
Left pwm4.on() + pwm17.off()
Right pwm4.off() + pwm17.on()

kann mir da bitte jemand helfen, bin schon seit tagen dran , immer wieder versuche ich es aufs neue.

Re: Voice Hat Motorsteuerung

Verfasst: Sonntag 1. Juli 2018, 15:10
von ThomasL
wie sieht es hiermit aus?

Code: Alles auswählen

if 'Start' in text:
    print('Motor fährt los')
    pwm4.on()
    pwm17.on()
    sleep(5)
    pwm4.off()
    pwm17.off()    
elif 'Stop' in text:
    print('Motor haltet an')
    pwm4.off()
    pwm17.off()
elif 'right' in text:
    print('Motor geht nach rechts')
    pwm4.on()
    pwm17.off()
    sleep(5)
    pwm4.off()
elif 'left' in text:
    print('Motor geht nach links')
    pwm4.off()
    pwm17.on()
    sleep(5)
    pwm17.off()