2022年5月24日火曜日

DRV8835(microbit,espr2,arduino,raspico/ble)

--------- microbit -----------------
radio.onReceivedNumber(function (receivedNumber) {
if (receivedNumber == 0) {
pins.digitalWritePin(DigitalPin.P12, 1)
pins.digitalWritePin(DigitalPin.P13, 0)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 0)
} else {
if (receivedNumber == 1) {
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 1)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 0)
}
}
})
input.onButtonPressed(Button.A, function () {
radio.sendNumber(0)
})
input.onButtonPressed(Button.AB, function () {
music.startMelody(music.builtInMelody(Melodies.Ringtone), MelodyOptions.Once)
})
input.onButtonPressed(Button.B, function () {
radio.sendNumber(1)
})
radio.setGroup(1)

-------------espr2-------------------------------------------------------
espr developper  で3v3からdrv8835のvccにつなぐのでOKです
const int MORTOR1_PIN = 13; for espr const int MORTOR2_PIN = 15 ; for espr void setup() { // put your setup code here, to run once: pinMode(MORTOR1_PIN,OUTPUT); pinMode(MORTOR2_PIN,OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(MORTOR1_PIN,HIGH); digitalWrite(MORTOR2_PIN,LOW); delay(2000); digitalWrite(MORTOR1_PIN,HIGH); digitalWrite(MORTOR2_PIN,HIGH); delay(2000); }
------------------------------------------------------
プチモンテでDRV8835をためしたがDCモーターの使い方 DRV8835版 [Arduino] (petitmonte.com)

間違い発見! ここでも順逆の間にブレーキをいれんとあかんかった なんでかしらんけど
  1. // 回転速度(35-255)
  2. // ※値が大きいほど高速,余りにも小さい値は回転しません。
  3. const uint8_t speeds = 48;
  4.  
  5. void setup() {
  6. Serial.begin(9600);
  7. }
  8. void loop() {
  9. // 正転(回転)
  10. Serial.println("正転");
  11. analogWrite(10,speeds);
  12. analogWrite(11,0);
  13. delay(1000);
  14.  
  15. // ブレーキ
  16. Serial.println("ブレーキ");
  17. analogWrite(10,speeds);
  18. analogWrite(11,speeds);
  19. delay(1000);

  20. // 逆転(逆回転)
  21. Serial.println("逆転");
  22. analogWrite(10,0);
  23. analogWrite(11,speeds);
  24. delay(1000);
  25. // ブレーキ
  26. Serial.println("ブレーキ");
  27. analogWrite(10,speeds);
  28. analogWrite(11,speeds);
  29. delay(1000);
  30. }
ーーーーーーーーーーarduinoーーーーーーーーーーーーーーーーーーーーーーーーーー
下記のように前進停止後退停止としないとスムーズにいかん、なんでやろね

from machine import Pin,UART
import time
led = machine.Pin(15,Pin.OUT) なくてもいいが。。。
IN1=Pin(2,Pin.OUT)
IN2=Pin(3,Pin.OUT)

while True:
     
            print("foward")
            led.value(1)
            time.sleep(1)
            led.value(0)
            IN1.value(1)
            IN2.value(0)
            time.sleep(1)
       
            print("stop")
            led.value(1)
            time.sleep(1)
            led.value(0)
            IN1.value(0)
            IN2.value(0)
            time.sleep(1)
       
            print("back")
            led.value(1)
            time.sleep(1)
            led.value(0)
            IN1.value(0)
            IN2.value(1)
            time.sleep(1)
           
            print("stop")
            led.value(1)
            time.sleep(1)
            led.value(0)
            IN1.value(0)
            IN2.value(0)
            time.sleep(1)

上のコードを援用して、ブルーツースモジュールと組み合わせたら、うまくいった うえをなぞった
rom machine import Pin,UART
import time

uart=UART(0,9600,tx=Pin(0),rx=Pin(1))
IN1=Pin(2,Pin.OUT)
IN2=Pin(3,Pin.OUT)

while True:
        c = uart.readline()
        if c == b'f':
            print("foward")
            IN1.value(1)
            IN2.value(0)
            time.sleep(1)
            IN1.value(0)
            IN2.value(0)
            time.sleep(1)
        if c == b'b':
            print("back")
            IN1.value(0)
            IN2.value(1)
            time.sleep(1)
            IN1.value(0)
            IN2.value(0)
            time.sleep(1)
  

0 件のコメント:

コメントを投稿