I'm not an electrical engineer. But I kept wanting to build smart devices - a mosquito trap for the garden, a nightlight my kid controls with claps, a smart dog collar.
Every time, I'd hit the same wall: which components are compatible? What pins do I connect? What libraries do I need?
So I built Make-it - you describe a device in plain English and it generates:
- A complete parts list with specs
- A wiring diagram with pin assignments
- Working Arduino/ESP32/Raspberry Pi code
- A step-by-step build guide
The technical challenge
The hard part isn't generating code - any LLM can do that. The hard part is making the output actually buildable:
- GPIO pin conflict detection across multiple sensors
- Component compatibility validation (will this sensor work with this board?)
- Correct library dependencies and imports
- Pin assignments that match the physical wiring
A raw LLM will confidently tell you to connect a sensor to a pin that doesn't support analog input. The domain layer on top catches that.
Real-world testing
I've been dogfooding by posting actual builds on Reddit:
- An automated mosquito trap hit 339K views and #1 on r/homeautomation
- A clap-activated nightlight for kids got 25K views on r/arduino
- People are actually ordering parts and building these projects
What's next
I'm working on multi-board communication (Arduino + RPi over serial), better PCB-level layouts, and eventually simulation.
Would love feedback from anyone who's tried using AI for hardware projects. What works? What breaks?



Top comments (2)
include
// Biblioteca que permite criar uma porta serial virtual
// (necessária para comunicação com o módulo Bluetooth HC-05)
// ==========================
// CONFIGURAÇÃO DO BLUETOOTH
// ==========================
// HC-05 TX -> pino 2 do Arduino (recebe dados)
// HC-05 RX -> pino 3 do Arduino (envia dados)
SoftwareSerial bluetooth(2, 3);
// ==========================
// DEFINIÇÃO DOS PINOS DOS MOTORES
// ==========================
// Motor esquerdo
define PINO_IN1 5 // Movimento para frente
define PINO_IN2 6 // Movimento para trás
// Motor direito
define PINO_IN3 9 // Movimento para frente
define PINO_IN4 10 // Movimento para trás
// ==========================
// VELOCIDADE FIXA
// ==========================
// Valor PWM de 0 a 255
// 180 representa uma velocidade média/alta
const int VELOCIDADE = 180;
// ==========================
// CONFIGURAÇÃO INICIAL
// ==========================
void setup() {
// Define os pinos dos motores como saída
pinMode(PINO_IN1, OUTPUT);
pinMode(PINO_IN2, OUTPUT);
pinMode(PINO_IN3, OUTPUT);
pinMode(PINO_IN4, OUTPUT);
// Inicializa comunicação serial (monitor)
Serial.begin(9600);
// Inicializa comunicação com Bluetooth
bluetooth.begin(9600);
Serial.println("Carrinho Bluetooth pronto");
// Garante que o carrinho inicia parado
parar();
}
// ==========================
// FUNÇÃO: PARAR O CARRINHO
// ==========================
void parar() {
// Zera o PWM de todos os motores
// Isso faz o carrinho parar completamente
analogWrite(PINO_IN1, 0);
analogWrite(PINO_IN2, 0);
analogWrite(PINO_IN3, 0);
analogWrite(PINO_IN4, 0);
}
// ==========================
// FUNÇÃO: MOVIMENTO PARA FRENTE
// ==========================
void frente() {
// Ativa os dois motores para frente
analogWrite(PINO_IN3, VELOCIDADE); // Motor direito frente
analogWrite(PINO_IN1, VELOCIDADE); // Motor esquerdo frente
// Garante que o sentido contrário está desligado
digitalWrite(PINO_IN4, LOW);
digitalWrite(PINO_IN2, LOW);
}
// ==========================
// FUNÇÃO: MOVIMENTO PARA TRÁS
// ==========================
void tras() {
// Ativa os dois motores para trás
analogWrite(PINO_IN4, VELOCIDADE); // Motor direito trás
analogWrite(PINO_IN2, VELOCIDADE); // Motor esquerdo trás
// Desliga o sentido contrário
digitalWrite(PINO_IN3, LOW);
digitalWrite(PINO_IN1, LOW);
}
// ==========================
// FUNÇÃO: VIRAR PARA ESQUERDA
// ==========================
void esquerda() {
// Motor esquerdo vai para trás
// Motor direito vai para frente
// Isso faz o carrinho girar para esquerda
analogWrite(PINO_IN4, VELOCIDADE);
analogWrite(PINO_IN1, VELOCIDADE);
// Desliga os outros sentidos
digitalWrite(PINO_IN3, LOW);
digitalWrite(PINO_IN2, LOW);
}
// ==========================
// FUNÇÃO: VIRAR PARA DIREITA
// ==========================
void direita() {
// Motor esquerdo vai para frente
// Motor direito vai para trás
// Isso faz o carrinho girar para direita
analogWrite(PINO_IN3, VELOCIDADE);
analogWrite(PINO_IN2, VELOCIDADE);
// Desliga os outros sentidos
digitalWrite(PINO_IN4, LOW);
digitalWrite(PINO_IN1, LOW);
}
// ==========================
// LOOP PRINCIPAL
// ==========================
void loop() {
// Verifica se chegou algum dado via Bluetooth
if (bluetooth.available() > 0) {
}
}
Nicely done!