【Arduino】自制声控点击器(吼叫吃鸡助手)

在5年前,我们考虑了使用声控触发点击,帮助在吃鸡游戏中进行多指操作,

【Android】声控注入点击事件实现系统级“吃鸡”辅助_getinputdeviceid-CSDN博客

当时的思路是开一个服务,监听麦克风音量,然后注入input命令,但是,在Android中,由于touch的处理方式比较复杂,区分各输入类型,adb input命令的注入会和手指的touch冲突,发生断触,需要从系统级来处理这个融合,在input系列文章中我们进行了讨论,这里不再细说。

回顾一下我们的需求,大吼一声,射击键被点击,配合手指,实现快捷方便的多指操作,给人一种身临其境的体验感。

这里我们考虑物理点击的方式,市面上有一些自动点击设备,体验后发现,使用的时候需要按开始按钮,实时性不强,这个开始按键,如果改成我们需要的声控处理,就恰到好处了。

我们的需要似乎很小众,就自己尝试制作试试,

原理还是很清晰的:1,使用Arduino来接收声音设备(sound sensor)的信号数据,

D2 接收到的是0 1 这样的数字信号,

A0接收的是模拟信号,使用模拟信号似乎更方便,比如下面的例子,当说话的音量数值到达了600,就触发舵机的转动,

#include <Servo.h> // 包含 Servo 库

int soundPin = 2;
Servo myServo; // 创建 Servo 对象

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(soundPin, INPUT);
  Serial.begin(9600);
  myServo.attach(9);
}

// the loop function runs over and over again forever
void loop() {
    int state = digitalRead(soundPin);
    int sound = analogRead(A0);
      Serial.print("sound Value: ");
    Serial.println(sound);
    if (sound < 600) {
      digitalWrite(LED_BUILTIN, HIGH);
      Serial.println(1);
        int sensorValue = analogRead(A0);

  // 在串口监视器中显示读取的值
  Serial.print("Sensor Value1======: ");
  Serial.println(sensorValue);
      delay(20);
    } else {
      digitalWrite(LED_BUILTIN, LOW);
      Serial.println(0);
        int sensorValue = analogRead(A0);

  // 在串口监视器中显示读取的值
  Serial.print("Sensor Value: ");
  Serial.println(sensorValue);

  int degree = 40;
  // 让舵机从 0 度旋转到 degree 度
  for (int pos = 0; pos <= degree; pos += 10) {
    myServo.write(pos);
    delay(15); // 延迟 15 毫秒
  }
  delay(5000);
  // 让舵机从 degree 度返回到 0 度
  for (int pos = degree; pos >= 0; pos -= 10) {
    myServo.write(pos);
    delay(15); // 延迟 15 毫秒
  }

      delay(500);
    }
    delay(20);
}

2,touch的实现

常规触碰笔是一个导体,连接人体(接地),让屏幕感知到电流(电容)变化,达到触摸的效果

在接地的导线上,加一个开关控制,就可以实现触摸和停止触摸的效果,

似乎可以用舵机来设计这个开关,但是这个制作起来很不方便,

等等,继电器不就是这样的开关么,我们再用个继电器来实现这个开关,当声控信号到来时,闭合开关,实现触碰效果。

于是,粗糙丑陋的吼叫点击器制作完成了,

Arduino code

int soundPin = 2;
int relayPin = 4;

void setup() {
  // put your setup code here, to run once:
    pinMode(relayPin, OUTPUT);
    pinMode(soundPin, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
      int sound = analogRead(A0);

      if (sound < 600) {
      digitalWrite(LED_BUILTIN, HIGH);
      Serial.println(1);

      delay(20);
    } else {
      digitalWrite(LED_BUILTIN, LOW);
      Serial.println(0);
        int sensorValue = analogRead(A0);
digitalWrite(relayPin, HIGH);

delay(5000);
digitalWrite(relayPin, LOW);
    }
      delay(20);
}

普通的继电器似乎是用电磁铁来实现的,连接的时候可以听到贴片的撞击声,如果要实现高频率的点击切换,可能需要使用光耦器件。

参考资料:

利用单片机做手机连点器(附别踩白块自动点击程序)_自动循环点击多个触摸按键电路-CSDN博客
手速不够外挂来凑!每分钟的点击次数1000+的抢购神器!!!_哔哩哔哩_bilibili

电容屏物理外挂,点击而已,没必要用机械臂。第一次用继电器_哔哩哔哩_bilibili





 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值