听说过休·赫尔(Hugh Herr)吗?他是一位美国著名的攀岩者,打破了残疾的局限。他坚信技术可以帮助残疾人过上正常的生活。赫尔在他的TED演讲中说:“ 人类不是残疾人。一个人永远不会被打破。我们的建筑环境,我们的技术已损坏并被禁用。我们人民不必接受我们的限制,而是可以通过技术创新来转移残疾 ”。这些不只是言语,而是他为之奉献的生命,今天,他使用假肢,声称过着正常的生活。因此,是的,技术确实可以消除人类的残疾。考虑到这一点,让我们使用一些简单的开发板和传感器来使用Arduino构建超声波盲手杖 对于视力障碍者而言,其效果不仅仅只是一根棍子。
这款智能摇杆将具有一个超声波传感器(可感应到任何障碍物的距离),LDR以感应照明条件,以及一个RF遥控器,盲人可使用该遥控器远程定位其摇杆。所有反馈将通过蜂鸣器提供给盲人。当然,您可以使用振动电机代替蜂鸣器,并利用自己的创造力进一步提高。
所需材料:
- Arduino Nano(任何版本均可使用)
- 超声波传感器HC-SR04
- LDR
- 蜂鸣器和LED
- 7805
- 433MHz射频发射器和接收器
- 电阻器
- 电容器类
- 按钮
- 穿孔板
- 焊接套件
- 9V电池
您可以从这里购买该智能百叶窗 项目的所有必需组件。
盲杆电路图:
这个Arduino Smart Blind Stick项目需要两个独立的电路。一个是将安装在盲人的棍子上的主电路。另一个是小型远程RF发射器电路,将用于定位主电路。下图显示了使用超声波传感器构建盲棒的主板电路图 :
如我们所见,Arduino Nano用于控制所有传感器,但是您也可以使用arduino uno构建智能百叶窗杆,但遵循相同的引脚排列和程序。整个电路板由9V电池供电,该电池使用7805稳压器调节至+ 5V。的超声波传感器是由5V供电,所述触发和回声引脚连接到Arduino的纳米管脚3和2所示的上方。该LDR与电阻器的值10K以形成一个分压器和电压差由Arduino的ADC管脚A1读取连接。 ADC引脚A0用于从RF接收器读取信号。电路板的输出由连接到引脚12的蜂鸣器提供。
的RF遥控电路如下所示。其工作方式也将进一步说明。
我使用了一个小技巧来使此RF远程控制电路正常工作。通常,在使用此433 MHz射频模块时,需要一个编码器和解码器或两个MCU才能工作,就像我们之前的射频发送器和接收器电路一样,我们分别使用了HT12D和HT12E,解码器和编码器IC。但是,在我们的应用中,我们只需要接收器来检测发送器是否正在发送一些信号。因此,发送器的数据引脚连接到电源的接地或Vcc。
接收器的数据引脚通过RC滤波器,然后提供给Arduino,如下所示。现在,只要按下按钮,接收器就会重复输出一些恒定的ADC值。当未按下按钮时,无法观察到此重复。因此,我们编写了Arduino程序来检查重复的值,以检测按钮是否被按下。这样盲人才能跟踪自己的棍子。您可以在此处查看:射频发射器和接收器的工作方式。
我用一块穿孔板焊接了所有的连接,以便它能用棍子完好无损。但是,您也可以将它们放在面包板上。这些是我使用arduino为该盲棒项目制作的板。
适用于Smart Blind Stick的Arduino程序:
一旦我们准备好硬件,就可以将Arduino连接到我们的计算机并开始编程。该页面使用的完整代码位于页面底部,您可以将其直接上传到Arduino开发板。但是,如果您想知道代码的工作原理,请进一步阅读。
像所有程序一样,我们从 void setup()开始 以初始化Input Output Pins。在我们的程序中,蜂鸣器和触发器引脚是输出设备,而回声引脚是输入设备。我们还初始化了串行监视器以进行调试。
void setup(){Serial.begin(9600); pinMode(Buzz,OUTPUT); digitalWrite(Buzz,LOW); pinMode(触发,输出); pinMode(echo,INPUT); }
在 主 循环内,我们正在读取所有传感器数据。我们首先读取超声波传感器的距离数据,LDR的光强度和RF信号以检查按钮是否被按下。所有这些数据都保存在变量中,如下所示,以备将来使用。
compute_distance(trigger,echo); 信号= AnalogRead(远程); 强度= AnalogRead(Light);
我们首先检查远程信号。我们使用一个称为 likely_count 的变量来检查从RF接收机重复多少次相同的值。仅当按下按钮时才会发生此重复。因此,如果计数超过100,我们将触发“远程按下”警报。
//检查是否按下了遥控器int temp = AnalogRead(Remote); similar_count = 0; while(Signal == temp){Signal = AnalogRead(Remote); 相似计数++; } //如果远程按下if(similar_count <100){Serial.print(similar_count); Serial.println(“ Remote Pressed”); digitalWrite(Buzz,HIGH);延迟(3000); digitalWrite(Buzz,LOW); }
您也可以在计算机的串行监视器上检查它:
接下来,我们检查盲人周围的光线强度。如果LDR的值小于200,则认为它很暗,我们通过蜂鸣器向他发出警告,并带有200ms的特定延迟音。如果强度非常高,超过800,则我们还会发出另一种警告音。通过更改以下代码中的相应值,可以轻松更改警报音和强度。
//如果很暗,如果(Intens <200){Serial.print(Intens); Serial.println(“ Bright Light”); digitalWrite(Buzz,HIGH);延迟(200); digitalWrite(Buzz,LOW);延迟(200); digitalWrite(Buzz,HIGH);延迟(200); digitalWrite(Buzz,LOW); delay(200);延迟(500); } //如果很亮,如果(Intens> 800){Serial.print(Intens); Serial.println(“低光”); digitalWrite(Buzz,HIGH);延迟(500); digitalWrite(Buzz,LOW);延迟(500); digitalWrite(Buzz,HIGH);延迟(500); digitalWrite(Buzz,LOW); delay(500); }
最后,我们开始测量到任何障碍物的距离。如果测得的距离超过50厘米,则不会发出警报。但是,如果小于50厘米,警报将通过蜂鸣器响起。当物体靠近蜂鸣器时,蜂鸣间隔也会减少。物体越靠近,蜂鸣器将发出更快的蜂鸣声。这可以通过创建与测量距离成比例的延迟来完成。由于Arduino中的 delay() 无法接受变量,因此我们必须使用 for 循环,该循环基于所测得的距离 进行 循环,如下所示。
如果(dist <50){Serial.print(dist); Serial.println(“ Object Alert”); digitalWrite(Buzz,HIGH); 对于(int i = dist; i> 0; i--)delay(10); digitalWrite(Buzz,LOW); 对于(int i = dist; i> 0; i--)delay(10); }
了解有关使用超声波传感器和Arduino测量距离的更多信息。
通过更改我们用来比较的值,该程序可以轻松地适合您的应用程序。您可以使用串行监视器调试是否触发了错误警报。如果您有任何问题,可以使用下面的评论部分来发表您的问题
Arduino盲目行动:
终于是时候测试我们的盲目arduino项目了。确保按照电路图进行连接,并且程序已成功上传。现在,使用9V电池为两个电路供电,您应该开始看到结果。将超声波传感器移到靠近物体的地方,您会注意到蜂鸣器发出蜂鸣声,并且当操纵杆靠近物体时,蜂鸣声的频率会增加。如果LDR漆黑或光线太强,蜂鸣器会发出蜂鸣声。如果一切正常,蜂鸣器将不会发出蜂鸣声。
当您按遥控器上的按钮时,蜂鸣器会发出一声长鸣。该 视频的末尾显示了使用Arduino的盲人用Smart Stick的完整工作。我还使用一个小棒来安装整个组件,您可以使用一个更大的棒或一个实际的盲棒并付诸实践。
如果您的蜂鸣器总是蜂鸣,则表示警报被错误触发。您可以打开串行监视器以检查参数,并检查哪些参数处于临界状态并进行调整。与往常一样,您可以在评论部分中发布问题以获得帮助。希望您理解该项目并喜欢构建东西。