# L9110sを使ったモーター制御
<!-- ## 追加パーツ
- ジャンパー線
- 赤、黒、紫、オレンジ(メスメス)
- 白、青(オスオス)
- L9110s
- 抵抗(茶黒赤金)x2
- LEDx2 -->
## L9110sとは
L9110S 2チャンネルモータドライバモジュールは、それぞれ800mA連続電流を駆動できる独立したモータドライバチップを2つ搭載しているコンパクトなボードです。
DCモーター用のドライバーであるため、極性は無く、GPIOを通じたHIGH, LOW入力の組み合わせによって電流の流れる向きを変えることが出来ます。
2.5V~12Vの電圧に対応し,3.3Vと5Vの両方のマイコンに対応しているため、Raspberry Pi Zero Wで使用することが出来ます。
## 配線
PiZero とパーツを使って下の図の通りに配線します。
以下の回路では2つのLEDのアノードとカソードの向きをそれぞれ逆向きになるよう配線しており、GPIOの20番と26番のポートへのHIGH, LOW入力を入れ替えることで、それぞれ別のLEDが発行します。

## プログラム
以下のプログラムを実行すると、まずA1AにLOW, A1BにHIGHの入力が加わり、2つのLEDの内の一つが発光し、次にA1AにHIGH, A1BにLOWの入力が加わり電流の流れる向きが変わることで別のLEDが発光します。最後にA1A, A1B共にLOWを入力することで電流が流れなくなり、LEDの発光が消えます。
```javascript
import { requestGPIOAccess } from "./node_modules/node-web-gpio/dist/index.js"; // WebGPIO を使えるようにするためのライブラリをインポート
const sleep = (msec) => new Promise((resolve) => setTimeout(resolve, msec)); // sleep 関数を定義
const A1A = 20;
const A1B = 26;
const LOW = 0;
const HIGH = 1;
const led = async (char, portA, portB) => {
if (char === "R") {
await portA.write(LOW);
await portB.write(HIGH);
} else if (char == "L") {
await portA.write(HIGH);
await portB.write(LOW);
} else {
await portA.write(LOW);
await portB.write(LOW);
}
};
const main = async () => {
const gpioAccess = await requestGPIOAccess();
const portA1A = await gpioAccess.ports.get(A1A);
const portA1B = await gpioAccess.ports.get(A1B);
await portA1A.export("out");
await portA1B.export("out");
console.log("led A: ON");
// A1AにLOW, A1BにHIGHの入力が加わる
await led("R", portA1A, portA1B);
await sleep(2000);
console.log("led B: ON");
// A1AにHIGH, A1BにLOWの入力が加わる
await led("L", portA1A, portA1B);
await sleep(2000);
console.log("led A and B: Off");
// A1AにLOW, A1BにLOWの入力が加わる
await led("OFF", portA1A, portA1B)
};
main();
```